背景说明
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.yaml
1 directory, 3 files
[root@cka-master helm]#
Chart.yaml
apiVersion: v1
name: chart-demo
version: 1.0.0
Deployment.yaml
apiVersion: v1
kind: Pod
metadata:
name: nginx-demo
labels:
name: nginx-demo
app: nginx-demo
spec:
containers:
- name: nginx-demo
image: nginx
Service.yaml
apiVersion: v1
kind: Service
metadata:
name: nginx-demo-svc
spec:
selector:
app: nginx-demo
type: NodePort
ports:
- protocol: TCP
port: 8000
targetPort: 80
文件校验
[root@cka-master chart-demo]# helm install --dry-run --generate-name .
NAME: chart-1647338705
LAST DEPLOYED: Tue Mar 15 18:05:06 2022
NAMESPACE: default
STATUS: pending-install
REVISION: 1
TEST SUITE: None
应用安装
[root@cka-master chart-demo]# helm install chart-demo .
NAME: chart-demo
LAST DEPLOYED: Tue Mar 15 18:09:32 2022
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
[root@cka-master chart-demo]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 42h
nginx-demo-svc NodePort 10.99.153.89 <none> 8000:30205/TCP 12s
[root@cka-master chart-demo]# helm list
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
chart-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: v1
kind: Service
metadata:
name: nginx-demo-svc
spec:
selector:
app: nginx-demo
type: ClusterIP
ports:
- protocol: TCP
port: 8000
targetPort: 80
执行升级命令
[root@cka-master chart-demo]# helm upgrade chart-demo .
Release "chart-demo" has been upgraded. Happy Helming!
NAME: chart-demo
LAST DEPLOYED: Tue Mar 15 18:24:06 2022
NAMESPACE: default
STATUS: deployed
REVISION: 2
TEST SUITE: None
[root@cka-master chart-demo]#
[root@cka-master chart-demo]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 43h
nginx-demo-svc ClusterIP 10.99.153.89 <none> 8000/TCP 14m
[root@cka-master chart-demo]#
[root@cka-master chart-demo]# helm list
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
chart-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 1
Rollback was a success! Happy Helming!
[root@cka-master chart-demo]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 43h
nginx-demo-svc NodePort 10.99.153.89 <none> 8000:32633/TCP 17m
[root@cka-master chart-demo]# helm list
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
chart-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 svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 43h
nginx-demo-svc NodePort 10.99.153.89 <none> 8000:32633/TCP 30m
[root@cka-master templates]# helm uninstall chart-demo
release "chart-demo" uninstalled
[root@cka-master templates]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 43h
[root@cka-master templates]#
helm的Chart删除时对应创建的资源对象也会同步删除