背景说明
Chart是Helm的应用打包格式,是一系列用于描述k8s资源相关文件的集合,由一组文件和目录构成,通常整个chart被打成tar包,而且标注上版本信息,便于Helm部署。其中最重要的是模板,模板中定义了 Kubernetes 各类资源的配置信息,Helm 在部署时通过 values.yaml 实例化模板。
解决方案
初始文件
[root@cka-master helm]# tree chart-demo/chart-demo/├── Chart.yaml└── templates├── Deployment.yaml└── Service.yaml1 directory, 3 files[root@cka-master helm]#
Chart.yaml
apiVersion: v1name: chart-demoversion: 1.0.0
Deployment.yaml
apiVersion: v1kind: Podmetadata:name: nginx-demolabels:name: nginx-demoapp: nginx-demospec:containers:- name: nginx-demoimage: nginx
Service.yaml
apiVersion: v1kind: Servicemetadata:name: nginx-demo-svcspec:selector:app: nginx-demotype: NodePortports:- protocol: TCPport: 8000targetPort: 80
文件校验
[root@cka-master chart-demo]# helm install --dry-run --generate-name .NAME: chart-1647338705LAST DEPLOYED: Tue Mar 15 18:05:06 2022NAMESPACE: defaultSTATUS: pending-installREVISION: 1TEST SUITE: None
应用安装
[root@cka-master chart-demo]# helm install chart-demo .NAME: chart-demoLAST DEPLOYED: Tue Mar 15 18:09:32 2022NAMESPACE: defaultSTATUS: deployedREVISION: 1TEST SUITE: None[root@cka-master chart-demo]# kubectl get svcNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEkubernetes ClusterIP 10.96.0.1 <none> 443/TCP 42hnginx-demo-svc NodePort 10.99.153.89 <none> 8000:30205/TCP 12s[root@cka-master chart-demo]# helm listNAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSIONchart-demo default 1 2022-03-15 18:09:32.730337415 +0800 CST deployed chart-demo-1.0.0[root@cka-master chart-demo]#
helm install 根据Chart创建一次Release helm list查询已部署的Release
应用升级
编辑Service.yaml文件修改类型由NodePort改成ClusterIp
apiVersion: v1kind: Servicemetadata:name: nginx-demo-svcspec:selector:app: nginx-demotype: ClusterIPports:- protocol: TCPport: 8000targetPort: 80
执行升级命令
[root@cka-master chart-demo]# helm upgrade chart-demo .Release "chart-demo" has been upgraded. Happy Helming!NAME: chart-demoLAST DEPLOYED: Tue Mar 15 18:24:06 2022NAMESPACE: defaultSTATUS: deployedREVISION: 2TEST SUITE: None[root@cka-master chart-demo]#[root@cka-master chart-demo]# kubectl get svcNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEkubernetes ClusterIP 10.96.0.1 <none> 443/TCP 43hnginx-demo-svc ClusterIP 10.99.153.89 <none> 8000/TCP 14m[root@cka-master chart-demo]#[root@cka-master chart-demo]# helm listNAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSIONchart-demo default 2 2022-03-15 18:24:06.649868478 +0800 CST deployed chart-demo-1.0.0[root@cka-master chart-demo]#
应用回滚
[root@cka-master chart-demo]# helm rollback chart-demo 1Rollback was a success! Happy Helming![root@cka-master chart-demo]# kubectl get svcNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEkubernetes ClusterIP 10.96.0.1 <none> 443/TCP 43hnginx-demo-svc NodePort 10.99.153.89 <none> 8000:32633/TCP 17m[root@cka-master chart-demo]# helm listNAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSIONchart-demo default 3 2022-03-15 18:26:30.344297794 +0800 CST deployed chart-demo-1.0.0[root@cka-master chart-demo]#
应用删除
[root@cka-master templates]# kubectl get svcNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEkubernetes ClusterIP 10.96.0.1 <none> 443/TCP 43hnginx-demo-svc NodePort 10.99.153.89 <none> 8000:32633/TCP 30m[root@cka-master templates]# helm uninstall chart-demorelease "chart-demo" uninstalled[root@cka-master templates]# kubectl get svcNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEkubernetes ClusterIP 10.96.0.1 <none> 443/TCP 43h[root@cka-master templates]#
helm的Chart删除时对应创建的资源对象也会同步删除
