Akemi

Helm部署mysql8

2024/12/04

用的单点k8s,装单点mysql8

添加与下载chart模板

阿里云的仓库默认提供的mysql5.7的,所以使用bitnami的仓库

但是bitnami概率被墙,所以有时需要在另外机器上下载

1
2
3
helm repo add bitnami https://charts.bitnami.com/bitnami
helm search repo bitnami | grep mysql
helm pull bitnami/mysql

查看chart信息与准备镜像

可以看到有几个镜像需要提前准备好

我用了docker desktop挂代理拉的,他妈docker桌面版还和VMware互斥,我一会还得费劲巴拉把那些东西禁用,气死了。这个docker还有这个墙,死全家了真的

1
2
3
4
5
6
7
8
9
    - name: mysql
image: docker.io/bitnami/mysql:8.0.36-debian-12-r12
- name: mysqld-exporter
image: docker.io/bitnami/mysqld-exporter:0.15.1-debian-12-r12
- name: os-shell
image: docker.io/bitnami/os-shell:12-debian-12-r19

可以先拉取好第一个,我是1.23的k8s直接用docker就行
用containerd就拉取好之后再导入,一样的

准备一个pv

因为我是单节点,没有nfs供应商,pvc没法自动申请pv,所以手动搞一个

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
sudo mkdir /data/mysql -p
sudo chmod 777 /data/mysql

sudo tee > ~/下载/mysql-helm-8/templates/primary/pv.yaml <<EOF
apiVersion: v1
kind: PersistentVolume
metadata:
name: local-pv
spec:
capacity:
storage: 8Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
local:
path: /data/mysql
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- ws-station
EOF

污点容忍度

因为我是单节点部署,所以需要添加污点容忍,容忍主节点的污点node-role.kubernetes.io/master

所以在statefulset.spec.template.spec下修改tolerations

1
2
3
4
5
6
7
8
9
10
11
在statefulset文件中容忍是这么写的
tolerations: {{- include "common.tplvalues.render" (dict "value" .Values.primary.tolerations "context" $) | nindent 8 }}
{{- end }}
{{- if .Values.primary.priorityClassName }}

意味着需要去Values.yaml文件下,找primary这个字段下,定义容忍规则
加入
tolerations:
- key: "node-role.kubernetes.io/master"
operator: "Exists"
effect: "NoSchedule"

创建release与验证

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
helm install mysql8 ./
helm list
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
mysql8 default 1 2024-12-03 15:03:47.821112342 +0800 CST deployed mysql-10.2.1 8.0.36
kubectl get pods
NAME READY STATUS RESTARTS AGE
mysql8-0 1/1 Running 0 8m30s

以下是创建完成后的提示
echo Username: root
MYSQL_ROOT_PASSWORD=$(kubectl get secret --namespace default mysql8 -o jsonpath="{.data.mysql-root-password}" | base64 -d)

To connect to your database:
1. Run a pod that you can use as a client:
kubectl run mysql8-client --rm --tty -i --restart='Never' --image docker.io/bitnami/mysql:8.0.36-debian-12-r12 --namespace default --env MYSQL_ROOT_PASSWORD=$MYSQL_ROOT_PASSWORD --command -- bash
2. To connect to primary service (read/write):
mysql -h mysql8.default.svc.cluster.local -uroot -p"$MYSQL_ROOT_PASSWORD"

验证

如上所示,两步走

第一步创建一个用于交互的mysql client的pod

第二步连接与登录myslq的service端点

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
1.
这个也需要添加污点,所以就这么搞了,不重要,正常情况下都不需要,只筛选一下node就可以
kubectl run mysql8-client --rm --tty -i --restart='Never' \
--image docker.io/bitnami/mysql:8.0.36-debian-12-r12 --namespace default \
--env MYSQL_ROOT_PASSWORD='root' --overrides='{
"apiVersion": "v1",
"spec": {
"tolerations": [
{
"key": "node-role.kubernetes.io/master",
"operator": "Exists",
"effect": "NoSchedule"
}
]
}
}' --command -- bash

2.
在临时容器中使用mysql命令行
I have no name!@mysql8-client:/$ mysql -h mysql8.default.svc.cluster.local -uroot -pV6shijvABr
mysql> select user,host from mysql.user;
+------------------+-----------+
| user | host |
+------------------+-----------+
| root | % |
| mysql.infoschema | localhost |
| mysql.session | localhost |
| mysql.sys | localhost |
+------------------+-----------+
4 rows in set (0.00 sec)

修改root密码与更新release

1
2
3
4
5
6
7
mysql> alter user 'root'@'%' identified by 'root';
Query OK, 0 rows affected (0.01 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)

NAME READY STATUS RESTARTS AGE
mysql8-0 0/1 Running 2 (108s ago) 34m

想不到吧,哥们就在里面小改了一手root用户密码,pod直接给我报错了

报错access denied

原因是他使用的是value.yaml中定义好的密码,我一改他密码对不上了

1
2
3
4
5
我直接进行修改
rootPassword: "root"

更新
helm upgrade mysql8 ./ -f values.yaml
CATALOG
  1. 1. 添加与下载chart模板
  2. 2. 查看chart信息与准备镜像
  3. 3. 准备一个pv
  4. 4. 污点容忍度
  • 创建release与验证
  • 修改root密码与更新release