中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

k8s原生微服務管理工具helm-v3的使用初探實踐(1)

發布時間:2020-09-12 17:14:03 來源:網絡 閱讀:1563 作者:wx5c1cfd6e22842 欄目:系統運維

Helm-v3應用包管理器

3.1 為什么需要Helm?
K8S上的應用對象,都是由特定的資源描述組成,包括deployment、service等。都保存各自文件中或者集中寫到一個配置文件。然后kubectl apply –f 部署。

為什么使用helm?
在k8s中,當我們去部署應用的時候,一般都是使用yaml文件去管理我們的應用的發布,比如像微服務,其中包括deployment,service,configmap,ingress,但是如果我們有上百個微服務的話,每次的修改涉及也都會比較多,感覺就是不太靈活了,再去管理可能就覺得力不從心了,這只是一個問題,其實k8s缺少一個更高級的應用級別的管理,如果我們將這些yaml文件放在一個地方,基于一個應用層面的管理,那可能會更好了。

使用這些yaml文件面臨著一個什么樣的問題?
且由于缺少對發布過的應用版本管理和控制,使Kubernetes上的應用維護和更新等面臨諸多的挑戰,主要面臨以下問題:
如何將這些服務作為一個整體管理,其實我們每次部署也針對這些yaml,然后apply 一下,然后也缺乏了怎么統一的管理
這些資源文件如何高效復用,其實我們在部署的時候,模版的很多的類型都是一樣的,我們怎么去使用一套模版來發布多個應用呢,發布的時候只需要簡單修改一下
不支持應用級別的版本管理,那么這里有很多的yaml,怎么可能可以去管理應用級別的呢,為了解決這個問題,helm也就應運而生了。

3.2 Helm 介紹
Helm是一個Kubernetes的包管理工具,就像Linux下的包管理器,如yum/apt等,可以很方便的將之前打包好的yaml文件部署到kubernetes上。
比如像yum ,它主要解決一個依賴的問題,安裝yum的可能會有很多的yum去執行,這個helm就相當于一個yum的包管理器,它將直接按應用去安裝,這個helm也一樣。

Helm有三個重要概念:
helm:一個命令行客戶端工具,主要用于Kubernetes應用chart的創建、打包、發布和管理。
Chart:應用描述,一系列用于描述 k8s 資源相關文件的集合。
Release:基于Chart的部署實體,一個 chart 被 Helm 運行后將會生成對應的一個 release;將在k8s中創建出真實運行的資源對象。

3.3 Helm v3 變化
2019年11月13日, Helm團隊發布 Helm v3的第一個穩定版本。
該版本主要變化如下:

1、 架構變化
最明顯的變化是,簡單了很多,第一個變化就是,也是最明顯的,它把tiller之前作為一個pod集群中部署的它作為一個服務端存在的,它主要接收helm客戶端發來的請求,發給API里面,然后api去轉發,tiller還得需要單獨部署,并且還要授權,它能操作集群的哪些命名空間,擁有哪些權限給刪除了。

kubeconfig連接集群的配置文件直接連接apiserver,之前呢是直接連接的API,由它做一個轉發,現在呢直接使用kubeconfig,kubectl都是使用kubeconfig來連接集群的,所以helm直接連接kubeconfig,再連接apiserver,然后部署chart的包,那簡化了很多,然后v2版本部署一個Helm,還需要tiller還能正常的工作,現在v3版本就不需要了,只需要下載一個helm的客戶端工具就可以了,首先這個部署已經簡化了很多,是更合理的,之前的權限管理也是很麻煩的,也是需要tiller去做權限管理,所以這個授權也是比較麻煩,感覺加這個tiller也是多余的東西,也是當時設計的原因,附加了這么一個tiller,這個也是一個可有可無的東西,有了kubeconfig,就可以直接通過原生的kubeconfig去完成了,所以也沒必要搞一個組件單獨去做這件事,比如授權,連接API,有一部分可以再helm的客戶端去實現了,那這么一來的話用helm就很簡單了,這也就是社區一個認識的轉變,真正的讓helm作為一個好用的工具存在。

k8s原生微服務管理工具helm-v3的使用初探實踐(1)
2、Release名稱可以在不同命名空間重用,之前這個都是tiller去維護的,比如部署一個web產生一個發行版,這個發行版這個名稱,不能跨命名空間去使用,只能用一個名字,比如default使用了一個web的名稱,在kube-system的命名空間下就不能用,主要是全局管理,在一個命名空間下存儲這個信息的,所以說是每個命名空間下維護的信息,這個命名空間里面不要重復。
3、支持將 Chart 推送至 Docker 鏡像倉庫中 ,也就是chart可以推送到harbor倉庫上了,之前是有專門的存儲工具,也就是這個支持,可以只用一個倉庫來存儲多個類型,比如通過harbor放我們的鏡像還能存放我們的chart的包管理工具
4、使用JSONSchema驗證chart values ,主要去驗證你使用values這個格式的變量的文件
5、其他
1)為了更好地協調其他包管理者的措辭 Helm CLI個別更名
helm delete更名為helm uninstall
helm inspect更名為helm show
helm fetch更名為helm pull
但以上舊的命令當前仍能使用。
2)移除了用于本地臨時搭建 Chart Repository的 helm serve 命令。
3)自動創建名稱空間
在不存在的命名空間中創建發行版時,Helm 2創建了命名空間。Helm 3遵循其他Kubernetes對象的行為,如果命名空間不存在則返回錯誤。
4) 不再需要requirements.yaml, 依賴關系是直接在chart.yaml中定義。
基本上就是v3版本的helm就是代碼基本上算是重構了

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常用命令
k8s原生微服務管理工具helm-v3的使用初探實踐(1)
3、配置國內Chart倉庫
準備好客戶端工具之后,就要配置一下這個Chart的倉庫,chart就是一個應用的包
微軟倉庫(http://mirror.azure.cn/kubernetes/charts/)這個倉庫推薦使用,基本上官網有的chart這里都有。
阿里云倉庫(https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts )
官方倉庫(https://hub.kubeapps.com/charts/incubator)官方chart倉庫,國內有點不好使。
添加存儲庫:

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部署一個應用
查找chart:

helm search repo
helm search repo mysql

為什么mariadb也在列表中?因為他和mysql有關。
查看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:

查看發布狀態:

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的部署狀態

[root@k8s-master1 ~]# kubectl get pod
NAME                                      READY   STATUS    RESTARTS   AGE
db-1-mysql-765759d7d8-n65x6               0/1     Pending   0          3m47s

查看事件,這里出現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

我們給它去創建一個pv,來讓它自動去綁定,這里我還是用的nfs做的網絡存儲,創建好之后,查看pvc,會顯示綁定成功,查看pod的狀態

[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查看部署的應用

[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)

這里說通過這個命令去連接數據庫

Connect using the mysql cli, then provide your password:
    $ mysql -h db-1-mysql -p

先進入這個容器里面,然后將它告訴的我們去連接一下,測試并創建一個數據庫

[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)

現在還有個問題,本身就有這個NFS自動供給,現在我想用自己的pv自動供給怎么去實現?
所以就要去修改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

這個存儲類之前我是創建好的,這里不做演示,在values-yaml中去指定我們的存儲類

[root@k8s-master1 ~]# kubectl get storageclass
NAME                  PROVISIONER      AGE
managed-nfs-storage   fuseim.pri/ifs   3d23h

我們再創建一個數據庫根據我們的values現在可以直接綁定我們的存儲類,直接創建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

現在測試一下我們的數據庫,我們的密碼也是在values去中定義的,所以直接登錄,并可以查看到我們創建的數據庫

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)

查看用戶,已經創建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了,有些必須依賴的也是提前去準備的,比如剛才的pv
有兩種方式,保留一些修改的文件,然后引用這些配置文件,或者使用--set,在命令行進行替換變量
配置文件寫的也都可以在命令行去使用,然后也都運行了。
--values(或-f):指定帶有覆蓋的YAML文件。這可以多次指定,最右邊的文件優先
--set:在命令行上指定替代。如果兩者都用,--set優先級高

[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

或者你想關心這個官方的chart是怎么寫的,你可以直接pull下來,查看詳細信息
[root@k8s-master1 ~]# helm pull azure/mysql --untar

這個拉下來是一個壓縮包,也可以拉的時候直接解壓, --untar
這里面values.yaml,剛才我們重定向出來的就是這個yaml,其他的保持不變,在templates下就是部署mysql的所需的yaml,這樣你會發現部署一個chart的簡單了很多,而且我還可以快速的啟動多套,部署多個這樣的pod,來動態的傳入參數,還能分生產環境,測試環境,只要你在values下面定義不同的命名空間,區分不同的生產環境和測試環境。

[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、構建一個Helm Chart
一個chart是怎么組成的 create + 自定義名稱(目錄結構)

[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是一個什么服務,這個默認的就是官方的一個模版,在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 

看一下這個文件的目錄結構

[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、列出缺省的設置等。
_helpers.tpl:放置模板助手的地方,可以在整個 chart 中重復使用

現在我們自己制作一個chart的模版,發布簡單的微服務類型的發布

[root@k8s-master1 chart]# tree .
.
├── charts
├── Chart.yaml
├── templates
└── values.yaml

創建一個新的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的變量賦值的渲染,然后發布兩個微服務,使用nginx的鏡像做一個小實例,后續將一個完整的微服務(dubbo,spring cloud的應用進行發布)

[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 }}

當我們去發布一個微服務的時候,它會去調用我們上層values的模版的變量進行對我們發布應用的yaml進行渲染,helm的好處就在這里,在k8s原生的yaml中去發布一個服務,yaml本身的格式不支持變量的注入,所以helm也就應運而生了,主要就是解決這個問題,而且我們去發布多個任務直接通過這個模版將一些變動的值都寫進去,發布任務也會很快,節省我們的時間。

[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

查看我們渲染之后的效果是什么樣的,我們的變量已經賦值到我們的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、升級、回滾和刪除
發布新版本的chart時,或者當您要更改發布的配置時,可以使用該helm upgrade 命令

比如將我們的base-user-common這個服務的鏡像換成其他的鏡像,因為我們的微服務其實在發布的過程中,由于開發的代碼的修改都會進行重新的構建,通過dockerfile,那么其實這里的道理也是一樣的,當我們去發布一個新的服務就需要去替換我們舊代碼的鏡像,這里其實舊可以去指定為我們新的鏡像。
[root@k8s-master1 test-helm]# vim chart/values.yaml
進行對鏡像修改為1.15,然后進行更新,使用upgrade指定我們微服務的名稱這個名稱根據項目去定義,微服務本身就是一個拆分的一個機構的組成的分子,這個就按自己去定義,然后指定這個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

測試查看已經將鏡像成功替換為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

例如將應用回滾到第一個版本,現在又回到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
卸載發行版使用helm uninstall或者helm delete,這樣的話也會將pod也會刪除

[root@k8s-master1 test-helm]# helm uninstall base-user-common
release "base-user-common" uninstalled
向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

镶黄旗| 霞浦县| 年辖:市辖区| 疏附县| 徐汇区| 阿拉善左旗| 桂平市| 上犹县| 建宁县| 藁城市| 格尔木市| 南丹县| 万荣县| 福贡县| 嵊泗县| 镇康县| 麦盖提县| 金溪县| 曲麻莱县| 修水县| 娄底市| 博湖县| 尉犁县| 天祝| 通州市| 京山县| 广南县| 温宿县| 瑞丽市| 三门峡市| 宁乡县| 玉山县| 鄂托克前旗| 漯河市| 泰兴市| 和平区| 永胜县| 宁安市| 富源县| 安丘市| 宜兰县|