运维开发实践 - helm

1. helm介绍

helm 是一个用于管理部署在kubernetes上的应用的工具
使用要求:一个Kubernetes集群

在这里插入图片描述

2.下载安装

Helm Github Download
在这里插入图片描述
Helm Huawei Source
在这里插入图片描述
按照自己的操作系统版本下载相应的helm压缩包
并将helm添加到环境变量中;

# 检查是否安装成功
helm version

在这里插入图片描述

3.创建一个example

helm create example-nginx && cd example-nginx 
# 开启ingress 和 hpa 配置
sed -i 's/enabled: false/enabled: true/g' values.yaml

以下即为helm生成的example-nginx的配置文件,

原理:将变量书写在values.yaml配置文件中,在使用helm install时会将这些变量替换到templates下所有的yaml文件中并应用至Kubernetes.
在这里插入图片描述
values.yaml
在这里插入图片描述
templates/deployment.yaml
在这里插入图片描述


# 安装当前应用到Kubernetes
helm upgrade --install example-nginx .

# 查看安装的example-nginx 服务
helm list

# 查看当前helm部署的Pod和Service
kubectl get po,svc,ing | grep example

Note: 若你发现你的ingress的ingressclass字段值为空,请先安装一个ingress-nginx控制器
请参考运维开发实践 - Kubernetes - 从外部访问k8s服务第二章节
并 reinstall 上述 example-nginx Chart

在这里插入图片描述

# 访问该应用
curl http://192.168.31.175:30001 -H "Host: chart-example.local"

在这里插入图片描述

4. Helm基本命令

可自行按顺序执行以下命令(已测试过)

# (0) 该目录用于测试使用
mkdir -p ~/helm_test && cd ~/helm_test

# (1)搜索应用
helm search repo nginx

# (2)!!以下命令3选1!!,我们可以任意安装上述搜索出来的应用
# i.直接安装
helm install example-nginx bitnami/nginx
# ii.升级example-nginx应用,若该应用不存在则直接安装
helm upgrade --install example-nginx bitnami/nginx
# iii.或者我们创建自定义应用
helm create example-nginx && helm upgrade --install example-nginx ~/helm_test/example-nginx

#(3)查看example-nginx应用的状态
helm status example-nginx

#(4) 查看安装的应用
helm list

#(5) 导出example-nginx应用的变量配置(values.yaml)
helm show values example-nginx > ~/helm_test/values.yaml
# 修改该values.yaml变量配置文件并开启ingress 和 hpa 配置
sed -i 's/host: chart-example.local/host: liyuan-nginx.com/g' ~/helm_test/values.yaml
sed -i 's/enabled: false/enabled: true/g' ~/helm_test/values.yaml

# (6) 应用该配置
helm upgrade --install -f values.yaml example-nginx ~/helm_test/example-nginx
# 查看ingress host是否被修改
kubectl get ing

#(7) 查看example-nginx应用部署的历史版本
helm history example-nginx

#(8)回滚应用到某个指定版本
helm rollback example-nginx 1
# 查看回滚是否生效
kubectl get ing

# (9) 将example-ngnix应用打包
helm package ~/helm_test/example-nginx

# (10)安装该应用包
helm install example-nginx2 ~/helm_test/example-nginx-0.1.0.tgz

helm list
#(10) 卸载应用
helm uninstall example-nginx
helm uninstall example-nginx2

5. helm templates模板语法

通过helm create example-nginx && cd example-nginx创建的应用默认包含 deployment*1, hpa*1, ingress*1, serviceaccount*1, service*1, 但通常来说默认的应用配置往往无法满足我们的业务需求,我们需要对其进行定制化…
在这里插入图片描述

helm create example-nginx3 && helm upgrade --install example-nginx3 ./example-nginx3
# 获取变量替换后的yaml文件
helm template example-nginx3 > tmp.yaml

# 我们可以看出该文件是example-nginx3 应用的是templates目录下所有文件从values.yaml中进行变量替换的值
vim tmp.yaml

如果现有的模板文件满足你的需求,直接修改value.yaml即可;
反之,需要你直接修改模板文件

Note: .Values 代表values.yaml

5.1.for循环

# ~/helm_test/example-nginx/values.yaml 添加如下声明
...
host: liyuan.com

ingresses:
  - ingress:
      name: ing-liyuan01
      path: /liyuan01
      backend:
        name: liyuan01-svc
        port: 8001
  - ingress:
      name: ing-liyuan02
      path: /liyuan02
      backend:
      	name: liyuan02-svc 
      	port: 8002
  - ingress:
      name: ing-liyuan03
      path: /liyuan03
      backend:
      	name: liyuan03-svc 
      	port: 8003
...

“.” 代表当前正在被遍历的元素
"$"代表values.yaml的root值

# !/helm_test/example-nginx/templates/test.yaml
{{- if .Values.ingresses}}
{{- range $ing:=.Values.ingresses}}
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: {{ .ingress.name }}
spec:
  rules:
  # 此处 $ 代表 values.yaml的root
  # quote 表示打上引号
  - host: {{ $.Values.host | quote}}
    http:
      paths:
      - path: {{ .ingress.path }}
        pathType: ImplementationSpecific
        backend:
          service:
            name: {{ .ingress.backend.name }}
            port:
              number: {{ .ingress.backend.port }}
---
# 该end匹配 range 的结束
{{- end}}
# 该end匹配 if 的结束
{{- end}}
# 渲染该文件
#如下图可以看到我们在values.yaml中定义的3个ing都被渲染了
helm template example-nginx .

在这里插入图片描述

5.2. with toYaml直接使用我们声明的值

定义直接包含某段代码

# ~/helm_test/example-nginx/values.yaml
...
annotation_test:
  nginx.ingress.kubernetes.io/rewrite-target: /$1
  app: nginx-app-liyuan
...

使用我们声明的值

# ~/helm_test/example-nginx/template/test01.yaml
{{- if .Values.annotation_test}}
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingressName
  {{- with .Values.annotation_test}}
  annotations:
    {{- toYaml . | nindent 4}}
  {{- end}}
spec:
  rules:
  - host: liyuan.com
    http:
      paths:
      - path: /liyuan
        pathType: ImplementationSpecific
        backend:
          service:
            name: liyuan-svc
            port:
              number: 80
{{- end}}

声明的annotation的值被直接渲染到了指定位置;
在这里插入图片描述

5.3. include使用我们在.tpl定义的值

在此处定义我们的值

# /root/helm_test/example-nginx/templates/_helpers.tpl
...
{{- define "app.owner" -}}
{{- printf "app.owner: liyuan"}}
{{- end}}
...

在此处使用我们的值

# /root/helm_test/example-nginx/templates/test02.yaml
{{- if .Values.annotation_test}}
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingressNameTest02
  labels:
    {{- include "app.owner" . | nindent 4}}
spec:
  rules:
  - host: liyuan.com
    http:
      paths:
      - path: /liyuan
        pathType: ImplementationSpecific
        backend:
          service:
            name: liyuan-svc
            port:
              number: 80
---
{{- end}}

在这里插入图片描述

Reference
Helm Docs

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值