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