运维开发实践 - 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.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相关推荐
- 运维开发实践 - Docker - 容器实现原理
1.Docker容器是什么 按照Docker官网,容器是运行在宿主机上的一个进程,但与宿主机上的其他进程相隔离: 2.容器实现原理 这种隔离机制使用了内核中的namespace和cgroups功能: ...
- 运维开发笔记整理-前后端分离
运维开发笔记整理-前后端分离 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.为什么要进行前后端分离 1>.pc, app, pad多端适应 2>.SPA开发式的流 ...
- 智能化运维最佳实践-自动化
伴随着互联网以及大数据时代的到来,IT信息系统已经成为最重要的数据载体和信息来源, IT系统在企业内部的重要性日益突出:但是随着企业信息化程度的提高.IT环境规模的扩大和IT环境复杂度的增加.行业内服 ...
- java开源运维平台_推荐一个:开源自动化运维开发平台(IT Automatic Develop Platform)...
ELVES IT Automatic Develop Platform Elves为光宇游戏运维团队开源的一套自动化运维开发平台(IT Automatic Develop Platform),面向开发 ...
- python运维系统开发_Python系统运维开发实战
课程主题: Python 高级运维开发实战 课程讲师: Alex 老师, triaquae python 开源运维管理软件创始人,知名 IT 公司运维开发架构师 课程安排: 每周六一天全天(早 9:0 ...
- 运维开发团队技能与效率提速利器:运维+低代码
10月,由嘉为科技携手腾讯蓝鲸智云联合主办的智慧生长·研运未来暨2021年研运治理实践大会在北京成功召开. 在20日下午进行的智能化运维分论坛上,来自嘉为蓝鲸的研发总经理周宗沛同与会嘉宾探讨了低代码与 ...
- 【直播】美团点评技术沙龙Online003: 美团点评数据库运维自动化实践与发展
美团点评技术团队 [美团点评技术沙龙Online]是美团点评技术团队推出的线上分享课程,每月2-3期,采用目前最火热的线上直播形式,邀请美团点评技术专家,面向互联网技术从业人员,分享一线实战经验,搭建 ...
- 招商基金招聘运维开发岗(地点:深圳)
想找钱多事少离家近的工作, 关注我们吧! 招商基金管理有限公司招聘运维开发岗(薪酬面议,地点:深圳) gogo姐说:基金公司,稳定又高薪,机会难得哦,大家尽快投简历来! 一.岗位名称:运维开发岗 岗位 ...
- 技术沙龙|京东云DevOps自动化运维技术实践
自动化测试体系不完善.缺少自助式的持续交付平台.系统间耦合度高服务拆分难度大.成熟的DevOps工程师稀缺,缺少敏捷文化--这些都是DevOps 在落地过程中,或多或少会碰到的问题,DevOps发展任 ...
最新文章
- 深度学习Dropout技术分析
- ogre3d环境配置与简单程序示例
- Spring Boot教程(一)注解配置与EhCache使用
- 高性能服务器 - window篇
- 第1章-什么是深度学习(笔记)
- LeetCode 1887. 使数组元素相等的减少操作次数(map)
- [轉]Windows下Subversion配置管理员指南
- 图书管理分类统计c语言,C语言实现图书管理系统
- LTE下行物理层传输机制(6)-下行资源分配方式(Resource Allocation Type)
- Latex 之 双栏 末页对齐 -- 导言区加入 \usepackage{flushend}
- Recommended Django Project Layout
- android 测网速方案,Android_检测当前网速
- python excel条件格式_Python操作Excel学习笔记(28):条件格式
- 计算机特殊社会环境,计算机应用职业生涯规划书
- 基础-07-八大疑问词
- 面试题,互联网产品的盈利模式有哪些?
- java生成唯一订单号
- python画出的图_Python 画出来六维图
- 10年工作经验的程序猿年薪10万 多吗?
- vue2.6.11版本源码运行报错问题处理