用的单点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: rootMYSQL_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 -- bash2. 在临时容器中使用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