Helm应用以及服务升级与回滚
helm:包管理工具
官方提提供的仓库:https://hub.helm.sh/
Charts:是一个Helm的程序包,它包含了运行一个kubernetes应用程序所需要的镜像、依赖关系和资源定义等
Release:应用程序运行charts后,得到的一个实例
部署一个实例:
helm install + charts -n release名称
根据以一个包运行一个实例
[root@master ~]# helm install stable/redis -n redis --dry-run
--dry-run:用来测试有没有问题,如果没有问题就可以运行
[root@master ~]# helm install stable/redis -n redis
#这里是运行不成功的,因为他需要镜像,PV等准备工作
运行之后会有三部分描述
1、关于这个Release的描述
2、关于这个Release资源的描述
3、怎么使用这个Release
根据提示可以获得redis的密码,等等一些信息
[root@master ~]# kubectl get secret --namespace default redis-redis -o jsonpath="{.data.redis-password}" | base64 --decode
rTmeGF2rcY
删除实例:
[root@master ~]# helm delete redis --purge
查询chart包
[root@master ~]# helm search mysql
运行一个实例:
[root@master ~]# helm install stable/mysql -n mysql
我们运行过的实例都会生成一个charts包存放在这个缓存目录下
[root@master archive]# pwd
/root/.helm/cache/archive
[root@master archive]# ls
mysql-0.3.5.tgz redis-1.1.15.tgz
Charts包解压目录
[root@master archive]# tar zxf mysql-0.3.5.tgz
[root@master archive]# tree -C mysql
mysql
├── Chart.yaml
├── README.md
├── templates
│ ├── configmap.yaml
│ ├── deployment.yaml
│ ├── _helpers.tpl
│ ├── NOTES.txt
│ ├── pvc.yaml
│ ├── secrets.yaml
│ └── svc.yaml
└── values.yaml
Chart.yaml:这个chart包的概要信息
name和version这两个是必填项,其他可选
README.md:是这个chart包的一个使用帮助文档
templates:chart包内各种资源对象模板
values.yaml:是这个chart包的默认的值,可以被template内的yaml文件使用
我们在部署之前还可以提前查看这个包会有什么东西
[root@master ~]# helm inspect values stable/prometheus
除了部署实例后会生成chart包,还可以下载chart包
[root@master ~]# helm fetch stable/prometheus
Helm部署安装一个Mysql服务
部署NFS服务:
[root@master ~]# mkdir /data
[root@master ~]# vim /etc/exports
/data *(rw,sync,no_root_squash)
创建PV:
[root@master ~]# vim nfs-pv1.yml
apiVersion: v1
kind: PersistentVolume
metadata:
name: mysqlpv
spec:
capacity:
storage: 8Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Recycle
nfs:
path: /data/mysqlpv
server: 192.168.1.70
[root@master ~]# kubectl apply -f nfs-pv1.yml
persistentvolume/mysqlpv created
[root@master ~]# kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
mysqlpv 8Gi RWO Recycle Available 16s
[root@master ~]# mkdir /data/mysqlpv
部署mysql实例(镜像提前准备好):
[root@master ~]# helm install stable/mysql -n bdqn-mysql --set mysqlRootPassword=123.com #创建实例,并设置密码
[root@master ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
bdqn-mysql-mysql-7b89c7b99-kg4wf 0/1 Init:0/1 0 17s #正在初始化
[root@master ~]# kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
bdqn-mysql-mysql Bound mysqlpv 8Gi RWO 48s
#还需要一个小镜像
docker pull busybox:1.25.0
[root@master ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
bdqn-mysql-mysql-7b89c7b99-kg4wf 1/1 Running 0 2m10s
[root@master ~]# kubectl get deployments.
NAME READY UP-TO-DATE AVAILABLE AGE
bdqn-mysql-mysql 1/1 1 1 2m13s
查看密码是否设置成功:
[root@master ~]# kubectl get secret --namespace default bdqn-mysql-mysql -o jsonpath="{.data.mysql-root-password}" | base64 --decode; echo
123.com
验证数据有没有问题:
[root@master ~]# kubectl exec -it bdqn-mysql-mysql-7b89c7b99-kg4wf -- mysql -u root -p123.com
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.01 sec)
在部署mysql的时候,如何开启storageclass,以及如何使用?
首先需要部署storageclass(存储类),让他可以自动创建PV
1、需要基于NFS环境
2、RBAC权限
3、nfs-deployment.
4、storageclass
helm在创建实例的时候是基于templates模板里的内容创建的,而模板内需要的信息则是在values.yaml文件里,我们则需要修改values.yaml文件里的内容就行
[root@master mysql]# vim values.yaml
找到storageClass,去掉注释即可
storageClass: "test-nfs" #storageclass的名称
accessMode: ReadWriteOnce
size: 8Gi
然后直接部署实例,在部署实例的时候 -f 指定这个values.yaml这个文件即可,它会根据实例的PVC自动创建PV
如果想将sservice资源对象的类型更改为NodePort,又应该怎么做
同样只需要修改values.yaml文件就行
#将类型给位NodePort即可,还可以自己指定端口
type: NodePort
port: 3306
在创建实例的时候只需要指定以下这个文件就行
[root@master mysql]# helm install stable/mysql -n bdqn-mysql --set mysqlRootPassword=123.com -f values.yaml
[root@master mysql]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
bdqn-mysql-mysql NodePort 10.104.45.139 <none> 3306:30165/TCP 13m
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 60d
服务的升级:
[root@master mysql]# helm upgrade --set imageTag=5.7.15 bdqn-mysql stable/mysql -f values.yaml
[root@master mysql]# kubectl get deployments. -o wide
NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
zhb-mysql 1/1 1 1 9m22s zhb-mysql mysql:5.7.15 app=zhb-mysql
回滚
#查看有哪些版本
[root@master mysql]# helm history zhb
REVISION UPDATED STATUS CHART DESCRIPTION
1 Mon Mar 2 16:33:26 2020 SUPERSEDED mysql-0.3.5 Install complete
2 Mon Mar 2 16:37:04 2020 DEPLOYED mysql-0.3.5 Upgrade complete
回滚到1版本
[root@master mysql]# helm rollback zhb 1
Rollback was a success.
[root@master mysql]# kubectl get deployments. -o wide
NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
zhb-mysql 1/1 1 1 13m zhb-mysql mysql:5.7.14 app=zhb-mysql