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
Logo

开源、云原生的融合云平台

更多推荐