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 -- bash

2. 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: ClusterIP
  port: 80
EOF

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

定义service.yaml

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

查看渲染效果:

helm template testrelease .

image-20231221220245988

Chart模板里的函数

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/261857.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java可变参数(学习推荐版,通俗易懂)

定义 可变参数本质还是一个数组 示例代码 注意事项 1.形参列表中&#xff0c;可变参数只能有一个 2.可变参数必须放在形参列表的最后面 注意是最后面。 name也可以为int类型

做题总结 202. 快乐数

202. 快乐数 思路分析代码实现-Java代码优化 思路分析 本人没有思路 在看题的时候&#xff0c;我不知道如果 不是快乐数怎么处理。我感觉是会死循环&#xff0c;一直加下去。没有考虑到会有重复数字出现。 为什么不会进行死循环&#xff1f;&#xff08;为什么会有重复数字出…

DevOps系列文章 : 使用dpkg命令打deb包

创建一个打包的目录&#xff0c;类似rpmbuild&#xff0c;这里创建了目录deb_build mkdir deb_build目标 我有一个hello的二进制文件hello和源码hello.c, 准备安装到/opt/helloworld目录中 步骤 在deb_build目录创建一个文件夹用于存放我的安装文件 mkdir helloworld在he…

SAP 特殊采购类30简介---标准委外

前面我们已经测试了很多的特殊采购类,今天我们测试一个在SAP系统中非常基本的功能—采购外协,通常采购外协和工序外协经常会被放在一起讨论方案,同时每个PP模块顾问和MM模块顾问所必需的。这个功能技术上讲不是很难,需要理解这个外协的意思。采购外协有时也会被称为标准外协…

[MySQL]用基本的mysql语句写的{商店的数据}和{学生成绩}

文章目录 前言一、题目二、创建2.写入table 三.查看表单结构四.插入数据1.俩种方法2.指定插入 五.查询1.全部和指定查询2.别名查询3.去重4.排序5.条件查询&#xff08;where) 六.修改七.删除八.在table中插入一列总结&#xff1a; 前言 提示&#xff1a;以下是本篇文章正文内容…

Temporary failure in name resolution

报错&#xff1a; 1.打开resolv.conf文件 sudo vim /etc/resolv.conf 2. 确保resolv.conf文件至少包含一个名称服务器。列出名称服务器的行应如下所示&#xff1a; 3. 保存文件并退出。 4. 接下来&#xff0c;重新启动DNS 解析器服务。运行以下命令&#xff1a; sudo syste…

探索未来交通!空客、宝马开启新一轮“量子计算挑战赛”

12月6日&#xff0c;空中客车公司和宝马集团共同发起了一项名为 “量子交通探索”的全球量子计算挑战赛&#xff0c;以应对航空和汽车领域最紧迫的挑战——这些挑战对于传统计算机而言仍然是难以克服的。 这项挑战是首创性的&#xff0c;它将两个全球行业领导者聚集在一起&…

Pytest+Requests+Allure实现接口自动化测试

一、整体结构 框架组成&#xff1a;pytestrequestsallure设计模式&#xff1a; 关键字驱动项目结构&#xff1a; 工具层&#xff1a;api_keyword/参数层&#xff1a;params/用例层&#xff1a;case/数据驱动&#xff1a;data_driver/数据层&#xff1a;data/逻辑层&#xff1a…

windows VMWare 安装虚拟机-保姆级教程,涵盖网络配置

1、虚拟机是什么 虚拟机&#xff08;Virtual Machine&#xff0c;简称 VM&#xff09;是一种运行在物理计算机上的软件实体&#xff0c;它模拟了一台完整的计算机系统。虚拟机可以在一台物理计算机上同时运行多个操作系统和应用程序&#xff0c;每个虚拟机都被分配了独立的计算…

C#攻克反爬虫之代理IP爬取

目录 前言 一、什么是代理IP 二、代理IP的获取 1. 免费代理IP网站 2. 第三方API 三、C#实现代理IP爬取 1. 安装HtmlAgilityPack和HttpClient 2. 获取代理IP 3. 使用代理IP发送请求 四、常见问题及解决方案 1. 代理IP的可用性 2. 频繁更换代理IP 总结 前言 随着互…

坚持提升这个能力,让你越来越强大

哈喽&#xff0c;你好啊&#xff01;我是雷工。 今天在读《张一鸣管理日志》时&#xff0c;看到这么一句话&#xff1a; “产品创新要从根本上解决问题&#xff0c;而不是想办法绕过问题&#xff0c;解决的问题很可能就是将来的核心竞争力。” 这让我想起了亚马逊公司&#x…

还在用QQ拼音输入法吗?赶快卸载吧~!

最近总觉得我的C盘在莫名其妙的减少。之前的电脑C盘只有240G&#xff0c;所以我很在意C盘空间。但是&#xff0c;我发现买了新电脑&#xff0c;C盘空间也在莫名其妙减少。 随挨个文件夹检查。最后发现&#xff0c;QQ拼音的 dict 文件夹很大&#xff0c;居然有 30G多G。 30多~…

图片曝光修正方法(直方图均衡和CNN)

图像过曝或曝光不足时需要曝光处理&#xff0c; 这里以曝光不足举例。 直方图均衡法&#xff1a; 通过RGB通道的直方图均衡达到处理曝光不足的效果。 代码&#xff1a; underexpose cv2.imread("exposure_test.jpg") #underexpose cv2.cvtColor(underexpose, cv2…

leetcode 1314. 矩阵区域和(优质解法)

代码&#xff1a; class Solution {public int[][] matrixBlockSum(int[][] mat, int k) {int mmat.length;int nmat[0].length;int[][]answernew int[m][n]; //要返回的结果矩阵int[][]sumnew int[m1][n1]; //前缀和数组//初始化前缀和数组for(int i1;i<m;i){for(int…

Java泛型-13

泛型的好处 public class Demo01 {public static void main(String[] args) {Person<String> person new Person<String>("韩曙平");} }class Person<E>{ //创建时才定义数据类型 编译时就可以进行约束E str;public Person(E str){this.str str…

Github项目推荐:在线rename

项目地址 GitHub - JasonGrass/rename: 在线文件批量重命名 项目简介 一个开源的在线重命名文件工具。利用了新的浏览器API获取文件句柄&#xff0c;在不上传文件的情况下对文件进行重命名。可以作为前端文件操作api学习范例。 项目截图

PropTypes 在 React 中的使用心得

在 React 开发中&#xff0c;PropTypes 是一个非常有用的库&#xff0c;用于对组件的属性进行类型检查。它可以帮助我们在开发过程中捕获潜在的错误&#xff0c;提高代码的可靠性和可维护性。本文将介绍 PropTypes 的基本用法和一些使用心得。 一、什么是 PropTypes PropTypes…

Android 权限申请

在Android中&#xff0c;从Android 6.0&#xff08;API级别23&#xff09;开始&#xff0c;应用在运行时需要动态申请权限。以下是一些步骤来动态申请权限&#xff1a; 在应用的清单文件&#xff08;AndroidManifest.xml&#xff09;中声明需要的权限。例如&#xff0c;如果应…

Elasticsearch:生成 AI 中的微调与 RAG

在自然语言处理 (NLP) 领域&#xff0c;出现了两种卓越的技术&#xff0c;每种技术都有其独特的功能&#xff1a;微调大型语言模型 (LLM) 和 RAG&#xff08;检索增强生成&#xff09;。 这些方法极大地影响了我们利用语言模型的方式&#xff0c;使它们更加通用和有效。 在本文…