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.tgzhelm 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.comingresses:- ingress:name: ing-liyuan01path: /liyuan01backend:name: liyuan01-svcport: 8001- ingress:name: ing-liyuan02path: /liyuan02backend:name: liyuan02-svc port: 8002- ingress:name: ing-liyuan03path: /liyuan03backend: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: ImplementationSpecificbackend: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: /$1app: 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.comhttp:paths:- path: /liyuanpathType: ImplementationSpecificbackend:service:name: liyuan-svcport: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: ingressNameTest02labels:{{- include "app.owner" . | nindent 4}}
spec:rules:- host: liyuan.comhttp:paths:- path: /liyuanpathType: ImplementationSpecificbackend:service:name: liyuan-svcport:number: 80
---
{{- end}}

Reference
Helm Docs

运维开发实践 - helm相关推荐

  1. 运维开发实践 - Docker - 容器实现原理

    1.Docker容器是什么 按照Docker官网,容器是运行在宿主机上的一个进程,但与宿主机上的其他进程相隔离: 2.容器实现原理 这种隔离机制使用了内核中的namespace和cgroups功能: ...

  2. 运维开发笔记整理-前后端分离

    运维开发笔记整理-前后端分离 作者:尹正杰  版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.为什么要进行前后端分离 1>.pc, app, pad多端适应 2>.SPA开发式的流 ...

  3. 智能化运维最佳实践-自动化

    伴随着互联网以及大数据时代的到来,IT信息系统已经成为最重要的数据载体和信息来源, IT系统在企业内部的重要性日益突出:但是随着企业信息化程度的提高.IT环境规模的扩大和IT环境复杂度的增加.行业内服 ...

  4. java开源运维平台_推荐一个:开源自动化运维开发平台(IT Automatic Develop Platform)...

    ELVES IT Automatic Develop Platform Elves为光宇游戏运维团队开源的一套自动化运维开发平台(IT Automatic Develop Platform),面向开发 ...

  5. python运维系统开发_Python系统运维开发实战

    课程主题: Python 高级运维开发实战 课程讲师: Alex 老师, triaquae python 开源运维管理软件创始人,知名 IT 公司运维开发架构师 课程安排: 每周六一天全天(早 9:0 ...

  6. 运维开发团队技能与效率提速利器:运维+低代码

    10月,由嘉为科技携手腾讯蓝鲸智云联合主办的智慧生长·研运未来暨2021年研运治理实践大会在北京成功召开. 在20日下午进行的智能化运维分论坛上,来自嘉为蓝鲸的研发总经理周宗沛同与会嘉宾探讨了低代码与 ...

  7. 【直播】美团点评技术沙龙Online003: 美团点评数据库运维自动化实践与发展

    美团点评技术团队 [美团点评技术沙龙Online]是美团点评技术团队推出的线上分享课程,每月2-3期,采用目前最火热的线上直播形式,邀请美团点评技术专家,面向互联网技术从业人员,分享一线实战经验,搭建 ...

  8. 招商基金招聘运维开发岗(地点:深圳)

    想找钱多事少离家近的工作, 关注我们吧! 招商基金管理有限公司招聘运维开发岗(薪酬面议,地点:深圳) gogo姐说:基金公司,稳定又高薪,机会难得哦,大家尽快投简历来! 一.岗位名称:运维开发岗 岗位 ...

  9. 技术沙龙|京东云DevOps自动化运维技术实践

    自动化测试体系不完善.缺少自助式的持续交付平台.系统间耦合度高服务拆分难度大.成熟的DevOps工程师稀缺,缺少敏捷文化--这些都是DevOps 在落地过程中,或多或少会碰到的问题,DevOps发展任 ...

最新文章

  1. 深度学习Dropout技术分析
  2. ogre3d环境配置与简单程序示例
  3. Spring Boot教程(一)注解配置与EhCache使用
  4. 高性能服务器 - window篇
  5. 第1章-什么是深度学习(笔记)
  6. LeetCode 1887. 使数组元素相等的减少操作次数(map)
  7. [轉]Windows下Subversion配置管理员指南
  8. 图书管理分类统计c语言,C语言实现图书管理系统
  9. LTE下行物理层传输机制(6)-下行资源分配方式(Resource Allocation Type)
  10. Latex 之 双栏 末页对齐 -- 导言区加入 \usepackage{flushend}
  11. Recommended Django Project Layout
  12. android 测网速方案,Android_检测当前网速
  13. python excel条件格式_Python操作Excel学习笔记(28):条件格式
  14. 计算机特殊社会环境,计算机应用职业生涯规划书
  15. 基础-07-八大疑问词
  16. 面试题,互联网产品的盈利模式有哪些?
  17. java生成唯一订单号
  18. python画出的图_Python 画出来六维图
  19. 10年工作经验的程序猿年薪10万 多吗?
  20. vue2.6.11版本源码运行报错问题处理

热门文章

  1. ‘gbk‘ codec can‘t decode byte
  2. 【程序源代码】微信支付接口源码
  3. 福布斯反击胡润榜 撒手锏祭出严介和
  4. smart计算机英语作文,介绍smart cars英语作文【精选】
  5. Linux上搭建高可用nacos集群详细步骤
  6. 法拉第效应维尔德常数_法拉第旋光效应实验讲义.doc
  7. 团贷网Android客户端架构演进之路(上)
  8. openjudge开餐馆
  9. order by 1 是什么意思
  10. 程序员如何提高10%的效率2