使用Helm管理Kubernetes应用
Helm是Kubernetes中安装应用的工具。这里介绍如何使用自己创建的Helm chart实现Kubernetes应用的安装。
一 安装Helm
通过下面的安装脚本安装:
curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bash
安装好后,查看版本,这里安装的是3.4的版本:
$ helm version --short v3.4.2+g23dd3af
二 通过Helm Chart安装应用
1 创建Chart和template文件
创建相应的目录和文件,如下:
$ tree . `-- my-app |-- Chart.yaml `-- templates `-- deployment.yaml 2 directories, 2 files
Chart.yaml是应用安装的入口文件,具体内容如下:
apiVersion: v1 name: my-app version: 0.1.0 appVersion: 1.0.0 description: My app with flask chart
deployment.yam 可以通过kubectl命令生成:
kubectl create deploy my-app \ --image gcr.io/wh-host/hello:1.0.0 \ --dry-run=client -o yaml > templates/deployment.yaml
修改配置如下:
apiVersion: apps/v1 kind: Deployment metadata: labels: app: my-app name: my-app spec: replicas: 3 selector: matchLabels: app: my-app template: metadata: labels: app: my-app spec: containers: - image: gcr.io/wh-host/hello:1.0.0 name: app
2 通过helm安装应用
安装
helm install my-app .
通过下面的命令查看安装情况:
$ helm list NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION my-app default 1 2020-12-30 deployed my-app-0.1.0 1.0.0
三 通过helm管理应用
1 通过helm更新应用
A 添加svc配置文件
创建Service:
kubectl expose deploy my-app --port 80 \ --dry-run=client -o yaml > templates/service.yaml
具体内容如下:
apiVersion: v1 kind: Service metadata: creationTimestamp: null labels: app: my-app app.kubernetes.io/managed-by: Helm name: my-app spec: ports: - port: 80 protocol: TCP targetPort: 80 selector: app: my-app
B 更新Chart文件
更新Chart.yaml
apiVersion: v1 name: my-app version: 0.2.0 appVersion: 1.0.0 description: My app with flask chart
此时目录结构如下:
$ tree . `-- my-app |-- Chart.yaml `-- templates |-- deployment.yaml `-- service.yaml
C 采用helm更新应用
更新应用:
helm upgrade my-app .
查看:
$ helm list NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION my-app default 2 2020-12-30 deployed my-app-0.2.0 1.0.0
2 采用helm rollback应用
Rollback:
helm rollback my-app 1 Rollback was a success! Happy Helming! helm rollback my-app 2 Rollback was a success! Happy Helming!
3 通过helm删除应用
删除:
helm delete my-app release "my-app" uninstalled
四 Helm中参数设置
在应用管理中,参数需要通过配置文件进行管理。在Helm中可以通过配置文件进行参数管理,也可以简单的通过命令行进行参数的设置。
1 通过values.yaml设置参数
A 参数文件
增加values.yaml文件:
replicaCount: 1 image: gcr.io/wh-host/hello imageVersion: 1.0.0
B 部署文件中引用参数
更改deployment文件:
apiVersion: apps/v1 kind: Deployment metadata: labels: app: my-app name: my-app spec: replicas: {{ .Values.replicaCount }} selector: matchLabels: app: my-app template: metadata: labels: app: my-app spec: containers: - image: {{ .Values.image }}:{{ .Values.imageVersion }} name: app
注意,这里参数中Values的V是大写的。
C 目录结构
此时目录结构如下:
$ tree . |-- Chart.yaml |-- templates | |-- deployment.yaml | `-- service.yaml `-- values.yaml 1 directory, 4 files
2 通过命令行设置参数
helm管理应用中,可以用指定参数的方式,设置参数:
helm install my-app . --set replicaCount=3
此时查看pod情况,为手工设置的3个:
$ kubectl get pod NAME READY STATUS RESTARTS AGE my-app-858dc86f8c-bs7lf 1/1 Running 0 10s my-app-858dc86f8c-cpl6q 1/1 Running 0 10s my-app-858dc86f8c-s2q2t 1/1 Running 0 10s
3 指定参数文件
采用指定参数文件的模式:
$ helm inspect values . replicaCount: 1 image: gcr.io/wh-host/hello imageVersion: 1.0.0 $ helm inspect values . > /tmp/values.yaml $ helm delete my-app release "my-app" uninstalled $ helm install my-app . --values /tmp/values.yaml
更新采用参数的方式:
helm upgrade my-app . --set replicaCount=2
4 参数文件的多级管理
参数文件为方便管理,可以采用多级参数的管理模式。具体方法如下。
更改values.yaml文件:
replicaCount: 1 image: gcr.io/wh-host/hello imageVersion: 1.0.0 service: type: LoadBalancer
更改deployment.yaml文件:
apiVersion: v1 kind: Service metadata: creationTimestamp: null labels: app: my-app app.kubernetes.io/managed-by: Helm name: my-app spec: ports: - port: 80 protocol: TCP targetPort: 80 selector: app: my-app type: {{ .Values.service.type }} status: loadBalancer: {}
更新配置:
$ helm upgrade my-app .
可以看到,Service开始创建LB,并生成External-IP:
$ kubectl get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.48.0.1 <none> 443/TCP 28h my-app LoadBalancer 10.48.9.34 35.223.27.242 80:32353/TCP 4m45s
五 总结
通过helm可以非常方便的管理Kubernetes的应用。