您好,登錄后才能下訂單哦!
3.1 為什么需要Helm?
K8S上的應(yīng)用對象,都是由特定的資源描述組成,包括deployment、service等。都保存各自文件中或者集中寫到一個配置文件。然后kubectl apply –f 部署。
為什么使用helm?
在k8s中,當(dāng)我們?nèi)ゲ渴饝?yīng)用的時候,一般都是使用yaml文件去管理我們的應(yīng)用的發(fā)布,比如像微服務(wù),其中包括deployment,service,configmap,ingress,但是如果我們有上百個微服務(wù)的話,每次的修改涉及也都會比較多,感覺就是不太靈活了,再去管理可能就覺得力不從心了,這只是一個問題,其實k8s缺少一個更高級的應(yīng)用級別的管理,如果我們將這些yaml文件放在一個地方,基于一個應(yīng)用層面的管理,那可能會更好了。
使用這些yaml文件面臨著一個什么樣的問題?
且由于缺少對發(fā)布過的應(yīng)用版本管理和控制,使Kubernetes上的應(yīng)用維護和更新等面臨諸多的挑戰(zhàn),主要面臨以下問題:
如何將這些服務(wù)作為一個整體管理,其實我們每次部署也針對這些yaml,然后apply 一下,然后也缺乏了怎么統(tǒng)一的管理
這些資源文件如何高效復(fù)用,其實我們在部署的時候,模版的很多的類型都是一樣的,我們怎么去使用一套模版來發(fā)布多個應(yīng)用呢,發(fā)布的時候只需要簡單修改一下
不支持應(yīng)用級別的版本管理,那么這里有很多的yaml,怎么可能可以去管理應(yīng)用級別的呢,為了解決這個問題,helm也就應(yīng)運而生了。
3.2 Helm 介紹
Helm是一個Kubernetes的包管理工具,就像Linux下的包管理器,如yum/apt等,可以很方便的將之前打包好的yaml文件部署到kubernetes上。
比如像yum ,它主要解決一個依賴的問題,安裝yum的可能會有很多的yum去執(zhí)行,這個helm就相當(dāng)于一個yum的包管理器,它將直接按應(yīng)用去安裝,這個helm也一樣。
Helm有三個重要概念:
helm:一個命令行客戶端工具,主要用于Kubernetes應(yīng)用chart的創(chuàng)建、打包、發(fā)布和管理。
Chart:應(yīng)用描述,一系列用于描述 k8s 資源相關(guān)文件的集合。
Release:基于Chart的部署實體,一個 chart 被 Helm 運行后將會生成對應(yīng)的一個 release;將在k8s中創(chuàng)建出真實運行的資源對象。
3.3 Helm v3 變化
2019年11月13日, Helm團隊發(fā)布 Helm v3的第一個穩(wěn)定版本。
該版本主要變化如下:
1、 架構(gòu)變化
最明顯的變化是,簡單了很多,第一個變化就是,也是最明顯的,它把tiller之前作為一個pod集群中部署的它作為一個服務(wù)端存在的,它主要接收helm客戶端發(fā)來的請求,發(fā)給API里面,然后api去轉(zhuǎn)發(fā),tiller還得需要單獨部署,并且還要授權(quán),它能操作集群的哪些命名空間,擁有哪些權(quán)限給刪除了。
kubeconfig連接集群的配置文件直接連接apiserver,之前呢是直接連接的API,由它做一個轉(zhuǎn)發(fā),現(xiàn)在呢直接使用kubeconfig,kubectl都是使用kubeconfig來連接集群的,所以helm直接連接kubeconfig,再連接apiserver,然后部署chart的包,那簡化了很多,然后v2版本部署一個Helm,還需要tiller還能正常的工作,現(xiàn)在v3版本就不需要了,只需要下載一個helm的客戶端工具就可以了,首先這個部署已經(jīng)簡化了很多,是更合理的,之前的權(quán)限管理也是很麻煩的,也是需要tiller去做權(quán)限管理,所以這個授權(quán)也是比較麻煩,感覺加這個tiller也是多余的東西,也是當(dāng)時設(shè)計的原因,附加了這么一個tiller,這個也是一個可有可無的東西,有了kubeconfig,就可以直接通過原生的kubeconfig去完成了,所以也沒必要搞一個組件單獨去做這件事,比如授權(quán),連接API,有一部分可以再helm的客戶端去實現(xiàn)了,那這么一來的話用helm就很簡單了,這也就是社區(qū)一個認識的轉(zhuǎn)變,真正的讓helm作為一個好用的工具存在。
2、Release名稱可以在不同命名空間重用,之前這個都是tiller去維護的,比如部署一個web產(chǎn)生一個發(fā)行版,這個發(fā)行版這個名稱,不能跨命名空間去使用,只能用一個名字,比如default使用了一個web的名稱,在kube-system的命名空間下就不能用,主要是全局管理,在一個命名空間下存儲這個信息的,所以說是每個命名空間下維護的信息,這個命名空間里面不要重復(fù)。
3、支持將 Chart 推送至 Docker 鏡像倉庫中 ,也就是chart可以推送到harbor倉庫上了,之前是有專門的存儲工具,也就是這個支持,可以只用一個倉庫來存儲多個類型,比如通過harbor放我們的鏡像還能存放我們的chart的包管理工具
4、使用JSONSchema驗證chart values ,主要去驗證你使用values這個格式的變量的文件
5、其他
1)為了更好地協(xié)調(diào)其他包管理者的措辭 Helm CLI個別更名
helm delete更名為
helm uninstall
helm inspect更名為
helm show
helm fetch更名為
helm pull
但以上舊的命令當(dāng)前仍能使用。
2)移除了用于本地臨時搭建 Chart Repository的 helm serve 命令。
3)自動創(chuàng)建名稱空間
在不存在的命名空間中創(chuàng)建發(fā)行版時,Helm 2創(chuàng)建了命名空間。Helm 3遵循其他Kubernetes對象的行為,如果命名空間不存在則返回錯誤。
4) 不再需要requirements.yaml, 依賴關(guān)系是直接在chart.yaml中定義。
基本上就是v3版本的helm就是代碼基本上算是重構(gòu)了
3.4 Helm客戶端
1、部署Helm客戶端
Helm客戶端下載地址:https://github.com/helm/helm/releases
解壓移動到/usr/bin/目錄即可。
wget https://get.helm.sh/helm-v3.0.0-linux-amd64.tar.gz
tar zxvf helm-v3.0.0-linux-amd64.tar.gz
mv linux-amd64/helm /usr/bin/
2、Helm常用命令
3、配置國內(nèi)Chart倉庫
準(zhǔn)備好客戶端工具之后,就要配置一下這個Chart的倉庫,chart就是一個應(yīng)用的包
微軟倉庫(http://mirror.azure.cn/kubernetes/charts/)這個倉庫推薦使用,基本上官網(wǎng)有的chart這里都有。
阿里云倉庫(https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts )
官方倉庫(https://hub.kubeapps.com/charts/incubator)官方chart倉庫,國內(nèi)有點不好使。
添加存儲庫:
helm repo add azure http://mirror.azure.cn/kubernetes/charts
helm repo add aliyun https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
helm repo update 更新
查看配置的存儲庫:
這里也可以添加多個倉庫,比如阿里云,微軟的,都可以通過search會幫你列出來你倉庫所有的
[root@k8s-master1 ~]# helm repo list
NAME URL
stable http://mirror.azure.cn/kubernetes/charts
[root@k8s-master1 ~]# helm search repo mysql
刪除存儲庫:helm repo remove aliyun
3.5 Helm基本使用
主要介紹三個命令:
chart install 安裝
chart update 升級
chart rollback 回滾
1、使用chart部署一個應(yīng)用
查找chart:
helm search repo
helm search repo mysql
為什么mariadb也在列表中?因為他和mysql有關(guān)。
查看chart信息:helm show chart azure/mysql
安裝包:db-1指定包的名稱(自定義)
[root@k8s-master1 ~]# helm install db-1 azure/mysql
NAME: db-1
LAST DEPLOYED: Tue Dec 17 10:24:07 2019
NAMESPACE: default
STATUS: deployed
REVISION: 1
NOTES:
查看發(fā)布狀態(tài):
helm status db-1
列出release
[root@k8s-master1 ~]# helm list
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
db-1 default 1 2019-12-17 10:24:07.593783822 +0800 CST deployed mysql-1.6.2 5.7.28
查看pod的部署狀態(tài)
[root@k8s-master1 ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
db-1-mysql-765759d7d8-n65x6 0/1 Pending 0 3m47s
查看事件,這里出現(xiàn)pending,檢測pod無法運行的原因,查看原因這里的pvc無法綁定,說明沒有pv
[root@k8s-master1 ~]# kubectl describe pod db-1-mysql-765759d7d8-n65x6
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning FailedScheduling <unknown> default-scheduler pod has unbound immediate PersistentVolumeClaims (repeated 3 times)
Warning FailedScheduling <unknown> default-scheduler pod has unbound immediate PersistentVolumeClaims (repeated 3 times)
查看pvc,這里是沒有綁定成功,說明一直沒有找到合適的pv來綁定,只要幫它匹配上就能運行成功
[root@k8s-master1 ~]# kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
db-1-mysql Pending 7m54s
我們給它去創(chuàng)建一個pv,來讓它自動去綁定,這里我還是用的nfs做的網(wǎng)絡(luò)存儲,創(chuàng)建好之后,查看pvc,會顯示綁定成功,查看pod的狀態(tài)
[root@k8s-master1 ~]# cat pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv0003
spec:
capacity:
storage: 8Gi
accessModes:
- ReadWriteOnce
nfs:
path: /opt/k8s/db
server: 10.4.7.200
[root@k8s-master1 ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
db-1-mysql-765759d7d8-n65x6 1/1 Running 0 24m
通過helm list查看部署的應(yīng)用
[root@k8s-master1 ~]# helm list
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
db-1 default 1 2019-12-17 10:24:07.593783822 +0800 CST deployemysql-1.6.2 5.7.28
查看詳細信息,這里面會告訴你怎么連接mysql [root@k8s-master1 ~]# helm status db-1
這里說生成一個隨機的密碼,將里面的值拿出來進行生成
To get your root password run:
MYSQL_ROOT_PASSWORD=$(kubectl get secret --namespace default db-1-mysql -o jsonpath="{.data.mysql-root-password}" | base64 --decode; echo)
這里說通過這個命令去連接數(shù)據(jù)庫
Connect using the mysql cli, then provide your password:
$ mysql -h db-1-mysql -p
先進入這個容器里面,然后將它告訴的我們?nèi)ミB接一下,測試并創(chuàng)建一個數(shù)據(jù)庫
[root@k8s-master1 ~]# kubectl exec -it db-1-mysql-765759d7d8-n65x6 /bin/bash
root@db-1-mysql-765759d7d8-n65x6:/# mysql -h db-1-mysql -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 73
Server version: 5.7.28 MySQL Community Server (GPL)
mysql> create database db;
Query OK, 1 row affected (0.07 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| db |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.02 sec)
現(xiàn)在還有個問題,本身就有這個NFS自動供給,現(xiàn)在我想用自己的pv自動供給怎么去實現(xiàn)?
所以就要去修改chart的配置選項了,因為有的需要一些依賴,比如剛才的mysql有個pv的依賴,因為它不知道我們使用的存儲類是哪個,說白了就是安裝chart之前自定義配置選項,有兩種方法,第一種就是直接使用--values這個yaml去覆蓋它,剛才我們使用的helm show values azure/mysql,這個chart的中的values的yaml
我們先將剛才那個values下的文件重定向一個文件中
[root@k8s-master1 ~]# helm show values azure/mysql > volues.yaml
[root@k8s-master1 ~]# cat volues.yaml
mysqlRootPassword: testing
mysqlUser: k8s
mysqlPassword: k8s123
mysqlDatabase: k8s
persistence:
enabled: true
storageClass: "managed-nfs-storage"
accessMode: ReadWriteOnce
size: 8Gi
這個存儲類之前我是創(chuàng)建好的,這里不做演示,在values-yaml中去指定我們的存儲類
[root@k8s-master1 ~]# kubectl get storageclass
NAME PROVISIONER AGE
managed-nfs-storage fuseim.pri/ifs 3d23h
我們再創(chuàng)建一個數(shù)據(jù)庫根據(jù)我們的values現(xiàn)在可以直接綁定我們的存儲類,直接創(chuàng)建pod了
[root@k8s-master1 ~]# helm install db-2 -f volues.yaml azure/mysql
[root@k8s-master1 ~]# helm list
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
db-1 default 1 2019-12-17 10:24:07.593783822 +0800 CST deployed mysql-1.6.2 5.7.28
db-2 default 1 2019-12-17 11:37:31.852808375 +0800 CST deployed mysql-1.6.2 5.7.28
[root@k8s-master1 ~]# kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
pv0003 8Gi RWO Retain Bound default/db-1-mysql 52m
pvc-0baaf69a-0a3b-4d05-adb5-515057bda753 8Gi RWO Delete Bound default/db-2-mysql managed-nfs-storage 18s
pvc-16725fa9-3fe5-4e87-a2f8-f3f1e7df56b3 16Gi RWO Delete Bound kube-system/prometheus-data-prometheus-0 managed-nfs-storage 3d23h
pvc-30244364-8bcd-43af-b1a9-d36e044c83c4 1Gi RWO Delete Bound kube-system/grafana-data-grafana-0 managed-nfs-storage 3d23h
[root@k8s-master1 ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
db-1-mysql-765759d7d8-n65x6 1/1 Running 0 74m
db-2-mysql-69dc64b75f-b2cxb 1/1 Running 0 59s
現(xiàn)在測試一下我們的數(shù)據(jù)庫,我們的密碼也是在values去中定義的,所以直接登錄,并可以查看到我們創(chuàng)建的數(shù)據(jù)庫
root@db-2-mysql-69dc64b75f-b2cxb:/# echo ${MYSQL_ROOT_PASSWORD}
testing
root@db-2-mysql-69dc64b75f-b2cxb:/# mysql -uroot -p${MYSQL_ROOT_PASSWORD}
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 52
Server version: 5.7.28 MySQL Community Server (GPL)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| k8s |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.06 sec)
查看用戶,已經(jīng)創(chuàng)建k8s用戶
mysql> select user from mysql.user;
+---------------+
| user |
+---------------+
| k8s |
| root |
| mysql.session |
| mysql.sys |
| root |
+---------------+
5 rows in set (0.04 sec)
2、安裝前自定義chart配置選項
如果想對官方的chart進行使用就直接使用install了,有些必須依賴的也是提前去準(zhǔn)備的,比如剛才的pv
有兩種方式,保留一些修改的文件,然后引用這些配置文件,或者使用--set,在命令行進行替換變量
配置文件寫的也都可以在命令行去使用,然后也都運行了。
--values(或-f):指定帶有覆蓋的YAML文件。這可以多次指定,最右邊的文件優(yōu)先
--set:在命令行上指定替代。如果兩者都用,--set優(yōu)先級高
[root@k8s-master1 ~]# helm install db-3 --set persistence.storageClass="managed-nfs-storage" azure/mysql
[root@k8s-master1 ~]# kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
db-1-mysql Bound pv0003 8Gi RWO 4h23m
db-2-mysql Bound pvc-0baaf69a-0a3b-4d05-adb5-515057bda753 8Gi RWO managed-nfs-storage 3h
db-3-mysql Bound pvc-2bf895a8-075b-43d9-ade9-fe9b7ae67b1b 8Gi RWO managed-nfs-storage
[root@k8s-master1 ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
db-1-mysql-765759d7d8-n65x6 1/1 Running 0 4h23m
db-2-mysql-69dc64b75f-b2cxb 1/1 Running 0 179m
db-3-mysql-679888dd7b-9m5cm 1/1 Running 0 85s
或者你想關(guān)心這個官方的chart是怎么寫的,你可以直接pull下來,查看詳細信息[root@k8s-master1 ~]# helm pull azure/mysql --untar
這個拉下來是一個壓縮包,也可以拉的時候直接解壓, --untar
這里面values.yaml,剛才我們重定向出來的就是這個yaml,其他的保持不變,在templates下就是部署mysql的所需的yaml,這樣你會發(fā)現(xiàn)部署一個chart的簡單了很多,而且我還可以快速的啟動多套,部署多個這樣的pod,來動態(tài)的傳入?yún)?shù),還能分生產(chǎn)環(huán)境,測試環(huán)境,只要你在values下面定義不同的命名空間,區(qū)分不同的生產(chǎn)環(huán)境和測試環(huán)境。
[root@k8s-master1 ~]# cd mysql
[root@k8s-master1 mysql]# ls
Chart.yaml README.md templates values.yaml
而且該helm install命令可以從多個來源安裝:
chart存儲庫
本地chart存檔(helm install foo-0.1.1.tgz)或者在它官方剛才我們拉的mysql那個包,直接用helm install mysql-1.5.0.gz
chart目錄(helm install path/to/foo)
完整的URL(helm install https://example.com/charts/foo-1.2.3.tgz)或者你一個url的地址
3、構(gòu)建一個Helm Chart
一個chart是怎么組成的 create + 自定義名稱(目錄結(jié)構(gòu))
[root@k8s-master1 test-helm]# helm create chart
Creating chart
[root@k8s-master1 test-helm]# ls
chart
[root@k8s-master1 test-helm]# cd chart/
[root@k8s-master1 chart]# ls
charts Chart.yaml templates values.yaml
啟動剛才我們的chart,并且起一下pod自定義名稱 helm install 名稱 剛才的配置目錄下
[root@k8s-master1 test-helm]# helm install my-chart chart/
NAME: my-chart
LAST DEPLOYED: Tue Dec 17 15:09:10 2019
NAMESPACE: default
STATUS: deployed
REVISION: 1
NOTES:
1. Get the application URL by running these commands:
export POD_NAME=$(kubectl get pods --namespace default -l "app.kubernetes.io/name=chart,app.kubernetes.io/instance=my-chart" -o jsonpath="{.items[0].metadata.name}")
echo "Visit http://127.0.0.1:8080 to use your application"
kubectl --namespace default port-forward $POD_NAME 8080:80
來看一下我們這個啟動的pod是一個什么服務(wù),這個默認的就是官方的一個模版,在values下面可以看出它獲取的image是nginx
[root@k8s-master1 test-helm]# kubectl get pod -o wide
my-chart-94997cb67-c2zxx 1/1 Running 0 10m 10.244.0.43 k8s-node2 <none> <none>
[root@k8s-master1 chart]# curl -I 10.244.0.43
HTTP/1.1 200 OK
Server: nginx/1.16.0
Date: Tue, 17 Dec 2019 07:22:57 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Tue, 23 Apr 2019 10:18:21 GMT
Connection: keep-alive
ETag: "5cbee66d-264"
Accept-Ranges: bytes
[root@k8s-master1 chart]# helm list
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
db-1 default 1 2019-12-17 10:24:07.593783822 +0800 CST deployed mysql-1.6.2 5.7.28
db-2 default 1 2019-12-17 11:37:31.852808375 +0800 CST deployed mysql-1.6.2 5.7.28
db-3 default 1 2019-12-17 14:36:00.445305589 +0800 CST deployed mysql-1.6.2 5.7.28
my-chart default 1 2019-12-17 15:09:10.164272986 +0800 CST deployed chart-0.1.0 1.16.0
看一下這個文件的目錄結(jié)構(gòu)
[root@k8s-master1 test-helm]# tree .
.
└── chart
├── charts
├── Chart.yaml
├── templates
│ ├── deployment.yaml
│ ├── _helpers.tpl
│ ├── ingress.yaml
│ ├── NOTES.txt
│ ├── serviceaccount.yaml
│ ├── service.yaml
│ └── tests
│ └── test-connection.yaml
└── values.yaml
4 directories, 9 files
Chart.yaml:用于描述這個 Chart的基本信息,包括名字、描述信息以及版本等。
values.yaml :用于存儲 templates 目錄中模板文件中用到變量的值。
Templates: 目錄里面存放所有yaml模板文件。
charts:目錄里存放這個chart依賴的所有子chart。
NOTES.txt :用于介紹Chart幫助信息, helm install 部署后展示給用戶。例如:如何使用這個 Chart、列出缺省的設(shè)置等。
_helpers.tpl:放置模板助手的地方,可以在整個 chart 中重復(fù)使用
現(xiàn)在我們自己制作一個chart的模版,發(fā)布簡單的微服務(wù)類型的發(fā)布
[root@k8s-master1 chart]# tree .
.
├── charts
├── Chart.yaml
├── templates
└── values.yaml
創(chuàng)建一個新的deployment類型的pod,鏡像為nginx
[root@k8s-master1 templates]# kubectl create deployment app-1 --image=nginx -o yaml --dry-run > deployment.yaml
[root@k8s-master1 templates]# ls
deployment.yaml
將yaml中一些不需要使用的字段空值進行刪除
我們修改一下這個yaml,先簡單的去使用values的變量賦值的渲染,然后發(fā)布兩個微服務(wù),使用nginx的鏡像做一個小實例,后續(xù)將一個完整的微服務(wù)(dubbo,spring cloud的應(yīng)用進行發(fā)布)
[root@k8s-master1 chart]# cat templates/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: {{ .Values.name }}
name: {{ .Values.name }}
spec:
replicas: {{ .Values.replicas }}
selector:
matchLabels:
app: {{ .Values.name }}
template:
metadata:
labels:
app: {{ .Values.name }}
spec:
containers:
- image: {{ .Values.image }}:{{ .Values.imageTag }}
name: {{ .Values.image }}
當(dāng)我們?nèi)グl(fā)布一個微服務(wù)的時候,它會去調(diào)用我們上層values的模版的變量進行對我們發(fā)布應(yīng)用的yaml進行渲染,helm的好處就在這里,在k8s原生的yaml中去發(fā)布一個服務(wù),yaml本身的格式不支持變量的注入,所以helm也就應(yīng)運而生了,主要就是解決這個問題,而且我們?nèi)グl(fā)布多個任務(wù)直接通過這個模版將一些變動的值都寫進去,發(fā)布任務(wù)也會很快,節(jié)省我們的時間。
[root@k8s-master1 chart]# cat .//values.yaml
name: base-user-devops
image: nginx
imageTag: 1.15
replicas: 2
[root@k8s-master1 ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
base-user-common-58b7bc9c56-2nmcb 1/1 Running 0 12m
base-user-common-58b7bc9c56-2tgpg 1/1 Running 0 12m
base-user-devops-7cf5c99485-rr295 1/1 Running 0 10m
base-user-devops-7cf5c99485-s2jbb 1/1 Running 0 10m
[root@k8s-master1 test-helm]# helm list
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
base-user-common default 1 2019-12-17 16:29:01.587768045 +0800 CST deployed chart-0.1.0 1.16.0
base-user-devops default 1 2019-12-17 16:27:11.757082258 +0800 CST deployed chart-0.1.0 1
查看我們渲染之后的效果是什么樣的,我們的變量已經(jīng)賦值到我們的yaml中,然后幫我們將pod啟動起來
[root@k8s-master1 test-helm]# helm get manifest base-user-common
---
Source: chart/templates/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: base-user-common
name: base-user-common
spec:
replicas: 2
selector:
matchLabels:
app: base-user-common
template:
metadata:
labels:
app: base-user-common
spec:
containers:
- image: nginx:1.16
name: nginx
4、升級、回滾和刪除
發(fā)布新版本的chart時,或者當(dāng)您要更改發(fā)布的配置時,可以使用該helm upgrade 命令
比如將我們的base-user-common這個服務(wù)的鏡像換成其他的鏡像,因為我們的微服務(wù)其實在發(fā)布的過程中,由于開發(fā)的代碼的修改都會進行重新的構(gòu)建,通過dockerfile,那么其實這里的道理也是一樣的,當(dāng)我們?nèi)グl(fā)布一個新的服務(wù)就需要去替換我們舊代碼的鏡像,這里其實舊可以去指定為我們新的鏡像。[root@k8s-master1 test-helm]# vim chart/values.yaml
進行對鏡像修改為1.15,然后進行更新,使用upgrade指定我們微服務(wù)的名稱這個名稱根據(jù)項目去定義,微服務(wù)本身就是一個拆分的一個機構(gòu)的組成的分子,這個就按自己去定義,然后指定這個chart模版目錄
[root@k8s-master1 test-helm]# helm upgrade base-user-common chart/
Release "base-user-common" has been upgraded. Happy Helming!
NAME: base-user-common
LAST DEPLOYED: Tue Dec 17 16:47:55 2019
NAMESPACE: default
STATUS: deployed
REVISION: 2
TEST SUITE: None
測試查看已經(jīng)將鏡像成功替換為1.15版本
[root@k8s-master1 test-helm]# curl -I 10.244.2.24
HTTP/1.1 200 OK
Server: nginx/1.15.12
Date: Tue, 17 Dec 2019 08:48:34 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Tue, 16 Apr 2019 13:08:19 GMT
Connection: keep-alive
ETag: "5cb5d3c3-264"
Accept-Ranges: bytes
例如將應(yīng)用回滾到第一個版本,現(xiàn)在又回到1.16這個鏡像了
[root@k8s-master1 ~]# helm rollback base-user-common
Rollback was a success! Happy Helming!
[root@k8s-master1 ~]# curl -I 10.244.1.20
HTTP/1.1 200 OK
Server: nginx/1.16.1
Date: Tue, 17 Dec 2019 09:44:44 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Tue, 13 Aug 2019 10:05:00 GMT
Connection: keep-alive
ETag: "5d528b4c-264"
Accept-Ranges: bytes
也可以查看歷史的版本
[root@k8s-master1 chart]# helm history base-user-common
REVISION UPDATED STATUS CHART APP VERSION DESCRIPTION
1 Tue Dec 17 16:29:01 2019 superseded chart-0.1.0 1.16.0 Install complete
2 Tue Dec 17 16:47:55 2019 superseded chart-0.1.0 1.16.0 Upgrade complete
3 Tue Dec 17 17:43:23 2019 deployed chart-0.1.0 1.16.0 Rollback to 1
也可以打包推送的charts倉庫共享別人使用[root@k8s-master1 test-helm]# helm package chart
卸載發(fā)行版使用helm uninstall或者helm delete,這樣的話也會將pod也會刪除
[root@k8s-master1 test-helm]# helm uninstall base-user-common
release "base-user-common" uninstalled
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。