grafana高可用部署
# mysql安装
在数据库主机执行,docker-compose.yaml文件
version: '3.9'
services:
mysql:
image: docker.cnb.cool/zzppjj/docker-images/mysql:8.0.39
container_name: mysql8
restart: always
ports:
- "3306:3306"
environment:
TZ: Asia/Shanghai
MYSQL_ROOT_PASSWORD: "2023WqGhsd"
MYSQL_DATABASE: app_db
MYSQL_USER: app_user
MYSQL_PASSWORD: "App123456"
command:
--default-authentication-plugin=mysql_native_password
--character-set-server=utf8mb4
--collation-server=utf8mb4_unicode_ci
volumes:
- ./data:/var/lib/mysql
- ./logs:/var/log/mysql
- ./conf:/etc/mysql/conf.d
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-uroot", "-p2023WqGhsd"]
interval: 10s
timeout: 5s
retries: 10
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
创建数据库
docker exec -it mysql8 mysql -uroot -p'2023WqGhsd'
create database grafana;
1
2
2
将宿主机(物理机/虚拟机)上的 MySQL 提供给集群内部 Pod 使用
推荐方案Service + Endpoints(企业最常用)
这是最标准、最稳定的方法。
原理:
Pod --> Kubernetes Service --> Endpoints --> 外部 MySQL IP
1
这样你的应用只需要连接:
mysql.default.svc.cluster.local
1
不用关心真实 IP。
创建service
apiVersion: v1
kind: Service
metadata:
name: external-mysql
namespace: default
spec:
ports:
- port: 3306
targetPort: 3306
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
创建Endpoints
apiVersion: v1
kind: Endpoints
metadata:
name: external-mysql
namespace: default
subsets:
- addresses:
- ip: 192.168.51.51
ports:
- port: 3306
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
# 创建headless service
#先创建命名空间
kubectl create ns monitoring
#headless.yaml
apiVersion: v1
kind: Service
metadata:
name: monitoring-grafana-headless
namespace: monitoring
spec:
clusterIP: None
ports:
- name: http-web
port: 3000
protocol: TCP
targetPort: 3000
- name: alert
port: 9094
protocol: TCP
targetPort: 9094
selector:
app.kubernetes.io/instance: monitoring
app.kubernetes.io/name: grafana
type: ClusterIP
# 执行安装
kubectl apply -f headless.yaml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# helm chart
replicas: 2
image:
repository: grafana/grafana
registry: "docker.1ms.run"
tag: latest
pullPolicy: IfNotPresent
defaultDashboardsTimezone: browser
grafana.ini:
unified_alerting:
enabled: true
ha_peers: 'monitoring-grafana-headless.monitoring.svc.cluster.local:9094'
alerting:
enabled: false
database:
url: 'mysql://root:2023WqGhsd@external-mysql.default.svc.cluster.local:3306/grafana'
server:
root_url: "https://grafana.zzppjj.top"
paths:
data: /var/lib/grafana/
logs: /var/log/grafana
plugins: /var/lib/grafana/plugins
provisioning: /etc/grafana/provisioning
analytics:
check_for_updates: true
log:
mode: console
grafana_net:
url: https://grafana.net
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# 安装
先更新helm的repo
helm repo add grafana "https://helm-charts.itboon.top/grafana" --force-update
helm repo update
1
2
2
执行安装
helm install grafana grafana/grafana -n monitoring --create-namespace -f values.yaml
1
上次更新: 2026/05/26, 13:41:27
|