实验:Helm部署MySQL服务
//在部署MySQL实例前,可以先查看对应Chart包的信息,需要提前做依赖的环境,当然也可以直接部署,然后一步一步推理、拍错。
//这里我们直接部署安装一次MySQL,安装之前,先将之前的实例删除,使用uninstall命令。
[root@master mysql]# helm uninstall test-mysql
//直接部署安装MySQL实例(通过名为stable的微软源)。
[root@master mysql]# helm install new-mysql stable/mysql
//可以查看安装部署的详细信息。
[root@master mysql]# helm list
[root@master mysql]# helm status new-mysql
//首先,确认,都生产了什么资源对象。
[root@master mysql]# ls templates/
configmap.yaml _helpers.tpl pvc.yaml svc.yaml
deployment.yaml NOTES.txt secrets.yaml
//通过查看Pod的详细信息,我们判断,由于PVC没有PV支持,所以PVC现在一直处于Pending的状态,导致Pod绑定这个PVC之后,也会出现问题,所以,解决思路是给这PVC创建一个PV。
//这里做基于NFS服务的PV服务,先开启NFS服务。
[root@master ~]# yum install nfs-utils -y
[root@master ~]# mkdir /nfsdata
[root@master ~]# cat /etc/exports
/nfsdata *(rw,sync,no_root_squash)
[root@master ~]# systemctl start rpcbind
[root@master ~]# systemctl enable rpcbind
[root@master ~]# systemctl start nfs-server.service
[root@master ~]# systemctl enable nfs-server.service
Created symlink from /etc/systemd/system/multi-user.target.wants/nfs-server.service to /usr/lib/systemd/system/nfs-server.service.
[root@master ~]# showmount -e
Export list for master:
/nfsdata *
//为PVC创建一个PV.
[root@master templates]# mkdir /nfsdata/new-pv
[root@master ~]# vim new-pv.yaml
```yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: new-pv
spec:
capacity:
storage: 8Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
nfs:
path: /nfsdata/new-pv
server: 192.168.8.10
kubectl apply -f new-pv.yaml
//查看对应的PV,PVC状态,已经成功绑定。
[root@master ~]# kubectl get pv,pvc
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
persistentvolume/new-pv 8Gi RWO Retain Bound default/new-mysql-mysql 25s
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
persistentvolumeclaim/new-mysql-mysql Bound new-pv 8Gi RWO 24m
//此时,查看Pod,已经正常运行了。
[root@master mysql]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
new-mysql-mysql-6cf95546fb-x7v9h 1/1 Running 0 27m 10.244.1.31 node01 <none> <none>
---------------------------------------------
Releases的升级与回滚
//目前releases的镜像版本为:5.7.30版本,假设将此镜像版本升级为5.7.40
[root@master mysql]# helm upgrade --set imageTag=5.7.40 new-mysql stable/mysql
[root@master ~]# kubectl get deployments. -o wide
NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
new-mysql-mysql 1/1 1 1 57m new-mysql-mysql mysql:5.7.40 app=new-mysql-mysql
//helm也有查看历史版本的命令。
[root@master ~]# helm history new-mysql
REVISION UPDATED STATUS CHART APP VERSION DESCRIPTION
1 Fri Sep 23 10:50:53 2022 superseded mysql-1.6.9 5.7.30 Install complete
2 Fri Sep 23 11:06:57 2022 deployed mysql-1.6.9 5.7.40 Upgrade complete
//helm回滚(helm可以回滚到指定版本)
[root@master ~]# helm rollback new-mysql 1
Rollback was a success! Happy Helming!
[root@master ~]# kubectl get deployments. -o wide
NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
new-mysql-mysql 1/1 1 1 62m new-mysql-mysql mysql:5.7.30 app=new-mysql-mysql