背景说明

values.yaml文件定义了全局变量,可以通过相关语法进行引用

{{ .Values.varname}} {{ .Release.Name}}

解决方案

命令参数

初始文件

  1. [root@cka-master helm]# tree chart-demo/
  2. chart-demo/
  3. ├── Chart.yaml
  4. ├── templates
  5. ├── Deployment.yaml
  6. └── Service.yaml
  7. └── values.yaml
  8. 1 directory, 4 files
  9. [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: {{ .Release.Name}}-demo
  5. labels:
  6. name: {{ .Release.Name}}-demo
  7. app: {{ .Release.Name}}-demo
  8. spec:
  9. containers:
  10. - name: {{ .Release.Name}}-demo
  11. image: {{ .Values.image}}

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

安装应用

  1. [root@cka-master chart-demo]# helm instll web-nginx --set image=nginx .
  2. Error: unknown command "instll" for "helm"
  3. Did you mean this?
  4. install
  5. Run 'helm --help' for usage.
  6. [root@cka-master chart-demo]# helm install web-nginx --set image=nginx .
  7. NAME: web-nginx
  8. LAST DEPLOYED: Tue Mar 15 19:08:34 2022
  9. NAMESPACE: default
  10. STATUS: deployed
  11. REVISION: 1
  12. TEST SUITE: None
  13. [root@cka-master chart-demo]# helm list
  14. NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
  15. web-nginx default 1 2022-03-15 19:08:34.774024913 +0800 CST deployed chart-demo-1.0.0
  16. [root@cka-master chart-demo]# kubectl get svc
  17. NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
  18. kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 43h
  19. web-nginx-svc ClusterIP 10.104.38.113 <none> 8000/TCP 21s
  20. [root@cka-master chart-demo]#

模板文件

初始文件

[root@cka-master helm]# tree chart-demo/
chart-demo/
├── Chart.yaml
├── templates
│   ├── Deployment.yaml
│   └── Service.yaml
└── values.yaml

1 directory, 4 files
[root@cka-master helm]#

Chart.yaml
apiVersion: v1
name: chart-demo
version: 1.0.0

Deployment.yaml
apiVersion: v1
kind: Pod
metadata:
name: {{ .Release.Name}}-demo
labels:
name: {{ .Release.Name}}-demo
app: {{ .Release.Name}}-demo
spec:
containers:
- name: {{ .Release.Name}}-demo
    image: {{ .Values.image}}

Service.yaml
apiVersion: v1
kind: Service
metadata:
name: {{ .Release.Name}}-svc
spec:
selector:
app: {{ .Release.Name}}-demo
type: ClusterIP
ports:
- protocol: TCP
port: 8000
    targetPort: 80

values.yaml
image: nginx

校验应用

[root@cka-master chart-demo]# helm lint .
==> Linting .
[INFO] Chart.yaml: icon is recommended

1 chart(s) linted, 0 chart(s) failed
[root@cka-master chart-demo]# 
[root@cka-master chart-demo]# helm install web-nginx  --dry-run --generate-name=false .
NAME: web-nginx
LAST DEPLOYED: Tue Mar 15 18:59:04 2022
NAMESPACE: default
STATUS: pending-install
REVISION: 1
TEST SUITE: None
HOOKS:
MANIFEST:
---
# Source: chart-demo/templates/Service.yaml
apiVersion: v1
kind: Service
metadata:
  name: web-nginx-svc
spec:
  selector:
    app: web-nginx-demo
  type: ClusterIP
  ports:
  - protocol: TCP
    port: 8000
    targetPort: 80
---
# Source: chart-demo/templates/Deployment.yaml
apiVersion: v1
kind: Pod
metadata:
  name: web-nginx-demo
  labels:
    name: web-nginx-demo
    app: web-nginx-demo
spec:
  containers:
  - name: web-nginx-demo
    image: nginx

[root@cka-master chart-demo]#

安装应用

[root@cka-master chart-demo]# helm install web-nginx ./
NAME: web-nginx
LAST DEPLOYED: Tue Mar 15 18:47:20 2022
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
[root@cka-master chart-demo]#

这里的web-nginx即为{{ .Release.Name}}

查看应用

[root@cka-master chart-demo]# helm list 
NAME         NAMESPACE    REVISION    UPDATED                                    STATUS      CHART               APP VERSION
web-nginx    default      1           2022-03-15 18:47:20.573872396 +0800 CST    deployed    chart-demo-1.0.0               
[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
web-nginx-svc   ClusterIP   10.100.27.27   <none>        8000/TCP   66s
[root@cka-master chart-demo]# kubectl get pod
NAME             READY   STATUS    RESTARTS   AGE
web-nginx-demo   1/1     Running   0          76s
[root@cka-master chart-demo]# curl 10.100.27.27:8000
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>
[root@cka-master chart-demo]# 
[root@cka-master chart-demo]# helm status web-nginx 
NAME: web-nginx
LAST DEPLOYED: Tue Mar 15 18:47:20 2022
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
[root@cka-master chart-demo]#

helm status查看Release的状态

分发应用

[root@cka-master chart-demo]# helm package . 
Successfully packaged chart and saved it to: /root/helm/chart-demo/chart-demo-1.0.0.tgz
[root@cka-master chart-demo]# ls
chart-demo-1.0.0.tgz  Chart.yaml  templates  values.yaml
[root@cka-master chart-demo]#