背景说明

Chart是Helm的应用打包格式,是一系列用于描述k8s资源相关文件的集合,由一组文件和目录构成,通常整个chart被打成tar包,而且标注上版本信息,便于Helm部署。其中最重要的是模板,模板中定义了 Kubernetes 各类资源的配置信息,Helm 在部署时通过 values.yaml 实例化模板。

解决方案

初始文件

  1. [root@cka-master helm]# tree chart-demo/
  2. chart-demo/
  3. ├── Chart.yaml
  4. └── templates
  5. ├── Deployment.yaml
  6. └── Service.yaml
  7. 1 directory, 3 files
  8. [root@cka-master helm]#

Chart.yaml

  1. apiVersion: v1
  2. name: chart-demo
  3. version: 1.0.0

Deployment.yaml

  1. apiVersion: v1
  2. kind: Pod
  3. metadata:
  4. name: nginx-demo
  5. labels:
  6. name: nginx-demo
  7. app: nginx-demo
  8. spec:
  9. containers:
  10. - name: nginx-demo
  11. image: nginx

Service.yaml

  1. apiVersion: v1
  2. kind: Service
  3. metadata:
  4. name: nginx-demo-svc
  5. spec:
  6. selector:
  7. app: nginx-demo
  8. type: NodePort
  9. ports:
  10. - protocol: TCP
  11. port: 8000
  12. targetPort: 80

文件校验

  1. [root@cka-master chart-demo]# helm install --dry-run --generate-name .
  2. NAME: chart-1647338705
  3. LAST DEPLOYED: Tue Mar 15 18:05:06 2022
  4. NAMESPACE: default
  5. STATUS: pending-install
  6. REVISION: 1
  7. TEST SUITE: None

应用安装

  1. [root@cka-master chart-demo]# helm install chart-demo .
  2. NAME: chart-demo
  3. LAST DEPLOYED: Tue Mar 15 18:09:32 2022
  4. NAMESPACE: default
  5. STATUS: deployed
  6. REVISION: 1
  7. TEST SUITE: None
  8. [root@cka-master chart-demo]# kubectl get svc
  9. NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
  10. kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 42h
  11. nginx-demo-svc NodePort 10.99.153.89 <none> 8000:30205/TCP 12s
  12. [root@cka-master chart-demo]# helm list
  13. NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
  14. chart-demo default 1 2022-03-15 18:09:32.730337415 +0800 CST deployed chart-demo-1.0.0
  15. [root@cka-master chart-demo]#

helm install 根据Chart创建一次Release helm list查询已部署的Release

应用升级

编辑Service.yaml文件修改类型由NodePort改成ClusterIp

  1. apiVersion: v1
  2. kind: Service
  3. metadata:
  4. name: nginx-demo-svc
  5. spec:
  6. selector:
  7. app: nginx-demo
  8. type: ClusterIP
  9. ports:
  10. - protocol: TCP
  11. port: 8000
  12. targetPort: 80

执行升级命令

  1. [root@cka-master chart-demo]# helm upgrade chart-demo .
  2. Release "chart-demo" has been upgraded. Happy Helming!
  3. NAME: chart-demo
  4. LAST DEPLOYED: Tue Mar 15 18:24:06 2022
  5. NAMESPACE: default
  6. STATUS: deployed
  7. REVISION: 2
  8. TEST SUITE: None
  9. [root@cka-master chart-demo]#
  10. [root@cka-master chart-demo]# kubectl get svc
  11. NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
  12. kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 43h
  13. nginx-demo-svc ClusterIP 10.99.153.89 <none> 8000/TCP 14m
  14. [root@cka-master chart-demo]#
  15. [root@cka-master chart-demo]# helm list
  16. NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
  17. chart-demo default 2 2022-03-15 18:24:06.649868478 +0800 CST deployed chart-demo-1.0.0
  18. [root@cka-master chart-demo]#

应用回滚

  1. [root@cka-master chart-demo]# helm rollback chart-demo 1
  2. Rollback was a success! Happy Helming!
  3. [root@cka-master chart-demo]# kubectl get svc
  4. NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
  5. kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 43h
  6. nginx-demo-svc NodePort 10.99.153.89 <none> 8000:32633/TCP 17m
  7. [root@cka-master chart-demo]# helm list
  8. NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
  9. chart-demo default 3 2022-03-15 18:26:30.344297794 +0800 CST deployed chart-demo-1.0.0
  10. [root@cka-master chart-demo]#

应用删除

  1. [root@cka-master templates]# kubectl get svc
  2. NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
  3. kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 43h
  4. nginx-demo-svc NodePort 10.99.153.89 <none> 8000:32633/TCP 30m
  5. [root@cka-master templates]# helm uninstall chart-demo
  6. release "chart-demo" uninstalled
  7. [root@cka-master templates]# kubectl get svc
  8. NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
  9. kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 43h
  10. [root@cka-master templates]#

helm的Chart删除时对应创建的资源对象也会同步删除