Helm應用以及服務升級與回滾

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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章