当前位置: 首页 > news >正文

k8s中Helm工具实践

k8s中Helm工具实践

1)安装redis-cluster

先搭建一个NFS的SC(只需要SC,不需要pvc),具体步骤此文档不再提供,请参考前面相关章节。

下载redis-cluster的chart包

helm pull bitnami/redis-cluster --untar #会下载一个目录下来

修改values.yaml

cd redis-cluster
vi values.yaml # 定义sc和密码storageClass: "nfs-client"redis:password: "tanglinux.com"

安装

helm install redis-cluster . ##注意,这是在chart的目录里,该目录下有values.yaml,后面的. 表示使用当前目录下的values.yaml

查看状态

helm status redis-cluster

测试

To get your password run:export REDIS_PASSWORD=$(kubectl get secret --namespace "default" redis-cluster -o jsonpath="{.data.redis-password}" | base64 -d)You have deployed a Redis® Cluster accessible only from within you Kubernetes Cluster.INFO: The Job to create the cluster will be created.To connect to your Redis® cluster:1. Run a Redis® pod that you can use as a client:
kubectl run --namespace default redis-cluster-client --rm --tty -i --restart='Never' \
--env REDIS_PASSWORD=$REDIS_PASSWORD \
--image docker.io/bitnami/redis-cluster:7.0.5-debian-11-r19 -- bash2. Connect using the Redis® CLI:redis-cli -c -h redis-cluster -a $REDIS_PASSWORD

2)应用的升级和回滚

安装好的应用,如果再次修改values.yaml(比如修改密码为tanglinux.com1),则需要做升级处理

helm upgrade redis-cluster . ##注意,这是在chart的目录里,该目录下有values.yaml

查看升级历史

helm history redis-cluster

回滚

helm rollback redis-cluster 1

自定义chart-内置对象

1)Helm chart包目录结构

创建自定义chart模板

helm create my-template

查看目录结构

tree my-template

image-20231221215808232

说明:

* Chart.yaml:用于描述这个chart的基本信息,包括名字、描述信息、版本信息等。
* values.yaml:用于存储templates目录中模板文件中用到的变量信息,也就是说template中的模板文件引用的是values.yaml中的变量。
* templates:用于存放部署使用的yaml文件模板,这里面的yaml都是通过各种判断、流程控制、引用变量去调用values中设置的变量信息,最后完成部署。* deployment.yaml:deployment资源yaml文件。* ingress.yaml:ingress资源文件。* NOTES.txt:用于接收chart的帮助信息,helm install部署完成后展示给用户,也可以时候helm status列出信息。* _helpers.tpl:放置模板助手的地方,可以在整个chart中重复使用。

**2)**helm chart模板

Helm最核心的就是模板,即模板化的K8s清单文件(如,deployment, service等),模板经过渲染后会被提交到K8s中,本质上就是Go语言的template模板,模板文件位于template/目录中。

将K8s清单文件中可能经常变动的字段,通过指定一个变量,在安装的过程中该变量将被值value动态替换掉,这个过程就是模板的渲染。

变量的值定义在values.yaml文件中,该文件中定义了变量的缺省值,但可以在helm install命令中配置新的值来覆盖缺省值。

以下为模板内置对象

Release对象

Release 对象描述了版本发布自身的一些信息。

Release.NameRelease名字
Release.NamespaceRelease所在命名空间
Release.IsUpgrade如果当前操作是升级或回滚,则将其设置为true
Release.IsInstall如果当前操作是安装,则设置为true
Release.Revision此Release 的修订版本号
Release.Service渲染此模板的服务,一般都是“Helm”

Values对象

Values 对象描述的是 values.yaml 文件中的内容,默认为空。使用 Value 对象可以获取到 values.yaml 文件中已定义的任何数值。

Values对象的值有4个来源:

  • chart包中的values.yaml文件;
  • 父chart包的values.yaml文件;
  • 通过helm install或者helm upgrade的-f 或者 --values参数传入的自定义的yaml文件(比如,helm install -f abc.yaml )
  • 通过–set传递单个参数(比如,helm install --set image=nginx:1.23.2)

优先级:–set > -f > 父chart里的values.yaml > chart里的values.yaml

Value 键值对获取方式
name: aaronValues.name
info: name: aaronValues.info.name

Chart对象

Chart 对象用于获取 chart.yaml 文件中的内容

Chart.Name获取Chart的名称
Chart.Version获取Chart的版本
Chart.apiVersion获取Chart的API版本
Chart.description获取Chart的描述
Chart.type获取Chart的类型
Chart.keywords获取Chart的一组关键字

Capabilities对象

Capabilities 对象提供了关于 Kubernetes 集群相关的信息。

Capabilities.APIVersions返回 Kubernetes 集群 API 版本信息集合
Capabilities.APIVersions.Has $version用于检测指定的版本或资源在 Kubernetes 集群中是否可用,例如 batch/v1 或 apps/v1/Deployment
Capabilities.KubeVersion用于获取 Kubernetes 的版本号
Capabilities.KubeVersion.Version用于获取 Kubernetes 的版本号
Capabilities.KubeVersion.MajorKubernetes 的主版本号
Capabilities.KubeVersion.MinorKubernetes 的小版本号

Template对象

Template 对象用于获取当前模板的信息

Template.Name用于获取当前模板的名称和路径(例如:mychart/templates/mytemplate.yaml)
Template.BasePath用于获取当前模板的路径(例如:mychart/templates)

Files对象

Files对象在chart中提供访问所有非特殊文件的对象。你不能使它访问template对象,只能访问其它文件。

Files.Get通过文件名获取文件的方法
Files.GetBytes用字节数组代替字符串获取文件内容的方法,常用于图片类的文件
Files.Glob用给定的shell glob模式匹配文件名返回文件列表的方法
Files.Lines逐行读取文件内容的方法
Files.AsSecrets使用Base64编码字符串返回文件体的方法
Files.AsConfig使用YAML格式返回文件体的方法

Chart的values

Values.yaml是Helm最重要的一个配置文件,所以我们再来研究一下它。

首先,挪走自带的values.yaml

mv values.yaml values.yaml.bak 

然后,写一个自定义的值

cat > values.yaml <<EOF
myname: tang
EOF

调用上面自定义变量的方法为:

{{ .Values.myname}}

在configmap.yaml里调用

cp -r templates/ templates.bak ##先备份一下template目录
rm -rf templates/*  ##删除掉所有模板文件cat > templates/configmap.yaml << EOF
apiVersion: v1
kind: ConfigMap
metadata:name: {{ .Release.Name }}-configmap
data:myvalue: "Hello World"myname: {{ .Values.myname }}
EOF

查看渲染效果

helm template testrelease . ## 当前目录是在测试的chart里面,假定release名字为testrelease

image-20231221220104955

但是,这个myname值是会被–set参数覆盖的,例如:

helm template testrelease . --set myname=tang

image-20231221220139455

继续修改values.yaml内容

cat > values.yaml <<EOF
myname: tang
service:type: ClusterIPport: 80
EOF

要调用上面的type,需要引用{{ Vlues.service.type}}

定义service.yaml

cat > templates/service.yaml <<EOF
apiVersion: v1
kind: Service
metadata:name: testserivcelabels:app: myapp
spec:type: {{ .Values.service.type }}ports:- port: {{ .Values.service.port }}targetPort: httpprotocol: TCPname: http
EOF

查看渲染效果:

helm template testrelease .

image-20231221220245988

Chart模板里的函数

函数列表: https://helm.sh/zh/docs/chart_template_guide/function_list/

相关文章:

  • (Mac上)使用Python进行matplotlib 画图时,中文显示不出来
  • HackTheBox - Medium - Linux - Format
  • Could not resolve com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.28.
  • java8 reduce操作
  • PHP函数定义和分类
  • springMVC-与spring整合
  • Kafka日志
  • 编写一个Java程序,其中包含三个线程: 厨师(Chef)、服务员(Waiter)和顾客(Customer)
  • docker安装的php 在cli中使用
  • 构建数字化金融生态系统:云原生的创新方法
  • pycharm修改项目文件夹名称
  • PostGreSQL:货币类型
  • hiveserver负载均衡配置
  • cpp_05_类_string类
  • Vue3 性能优化
  • 0基础学习移动端适配
  • 11111111
  • ES6系统学习----从Apollo Client看解构赋值
  • JavaScript设计模式系列一:工厂模式
  • mysql innodb 索引使用指南
  • nodejs调试方法
  • October CMS - 快速入门 9 Images And Galleries
  • Webpack入门之遇到的那些坑,系列示例Demo
  • 飞驰在Mesos的涡轮引擎上
  • 浏览器缓存机制分析
  • 如何选择开源的机器学习框架?
  • 微信支付JSAPI,实测!终极方案
  • 验证码识别技术——15分钟带你突破各种复杂不定长验证码
  • 云大使推广中的常见热门问题
  • [地铁译]使用SSD缓存应用数据——Moneta项目: 低成本优化的下一代EVCache ...
  • FaaS 的简单实践
  • !!【OpenCV学习】计算两幅图像的重叠区域
  • #HarmonyOS:基础语法
  • (13)[Xamarin.Android] 不同分辨率下的图片使用概论
  • (cljs/run-at (JSVM. :browser) 搭建刚好可用的开发环境!)
  • (Note)C++中的继承方式
  • (zz)子曾经曰过:先有司,赦小过,举贤才
  • (附源码)springboot码头作业管理系统 毕业设计 341654
  • (附源码)计算机毕业设计大学生兼职系统
  • (免费领源码)Java#Springboot#mysql农产品销售管理系统47627-计算机毕业设计项目选题推荐
  • (转)chrome浏览器收藏夹(书签)的导出与导入
  • .bat文件调用java类的main方法
  • .net core webapi 大文件上传到wwwroot文件夹
  • .NET Core 项目指定SDK版本
  • .NET core 自定义过滤器 Filter 实现webapi RestFul 统一接口数据返回格式
  • .NET处理HTTP请求
  • .NET与 java通用的3DES加密解密方法
  • .Net转Java自学之路—基础巩固篇十三(集合)
  • /run/containerd/containerd.sock connect: connection refused
  • @DataRedisTest测试redis从未如此丝滑
  • @Resource和@Autowired的区别
  • [ Linux ] Linux信号概述 信号的产生
  • [ 网络基础篇 ] MAP 迈普交换机常用命令详解
  • [145] 二叉树的后序遍历 js
  • [202209]mysql8.0 双主集群搭建 亲测可用