K8s包管理工具helm

这篇具有很好参考价值的文章主要介绍了K8s包管理工具helm。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

什么是Helm

Helm官网
Helm 是 Kubernetes 的包管理器,使用chart来帮助您管理Kubernetes的应用,即使是最复杂的应用程序,helm都可以定义,安装和升级。

三大概念

Chart 代表着 Helm 包。它包含在 Kubernetes 集群内部运行应用程序,工具或服务所需的所有资源定义。你可以把它看作是 Homebrew formula,Apt dpkg,或 Yum RPM 在Kubernetes 中的等价物。

Repository(仓库) 是用来存放和共享 charts 的地方。它就像 Perl 的 CPAN 档案库网络 或是 Fedora 的 软件包仓库,只不过它是供 Kubernetes 包所使用的。

Release 是运行在 Kubernetes 集群中的 chart 的实例。一个 chart 通常可以在同一个集群中安装多次。每一次安装都会创建一个新的 release。以 MySQL chart为例,如果你想在你的集群中运行两个数据库,你可以安装该chart两次。每一个数据库都会拥有它自己的 release 和 release name。

在了解了上述这些概念以后,我们就可以这样来解释 Helm:

Helm 安装 charts 到 Kubernetes 集群中,每次安装都会创建一个新的 release。你可以在 Helm 的 chart repositories 中寻找新的 chart。

Helm的组件

Helm是一个可执行文件,执行时分成两个不同的部分:

Helm客户端 是终端用户的命令行客户端。负责以下内容:

本地chart开发
管理仓库
管理发布
与Helm库建立接口
    发送安装的chart
    发送升级或卸载现有发布的请求

Helm库 提供执行所有Helm操作的逻辑。与Kubernetes API服务交互并提供以下功能:

结合chart和配置来构建版本
将chart安装到Kubernetes中,并提供后续发布对象
与Kubernetes交互升级和卸载chart

Helm的安装

安装指南

搭建私有Chart仓库

chart仓库服务器就是一个简单的HTTP服务器,提供一个index.yaml 文件来描述一批chart, 并且提供每个chart的下载位置信息

  1. 使用docker启动一个nginx容器
[root@k8s-master01 docker]# docker run -d --name=private-repo --net=host  -v /home/helm/charts:/usr/share/nginx/html/charts -d nginx
7e0ad50ab123612eedf59e8ac1b8bd00ae5dc7921468deff77899d9f040cca5c
  1. 创建并打包一个helm应用
[root@k8s-master01 charts]# helm create zookeeper # 创建 
Creating zookeeper
[root@k8s-master01 charts]# helm package zookeeper # 打包成tgz待上传到chart仓库
Successfully packaged chart and saved it to: /home/helm/charts/zookeeper-0.1.0.tgz
[root@k8s-master01 charts]# ls
zookeeper  zookeeper-0.1.0.tgz

  1. 生成库的index文件
# 创建一个临时目录 用于生成index.yaml文件
[root@k8s-master01 charts]# mkdir repo
[root@k8s-master01 charts]# mv zookeeper-0.1.0.tgz  repo
[root@k8s-master01 charts]# helm repo index repo --url http://192.168.255.138/charts 

  1. 将生成的index.yaml文件及charts包复制到nginx的charts目录下面
[root@k8s-master01 repo]# ll
total 8
-rw-r--r-- 1 root root  432 Jan  3 23:20 index.yaml
-rw-r--r-- 1 root root 3960 Jan  3 23:16 zookeeper-0.1.0.tgz
[root@k8s-master01 repo]# mv index.yaml zookeeper-0.1.0.tgz  ../
[root@k8s-master01 charts]# ls
index.yaml  repo  zookeeper  zookeeper-0.1.0.tgz

  1. 添加私有仓库
[root@k8s-master01 charts]# helm repo add private-repo http://192.168.255.138/charts
[root@k8s-master01 charts]# helm repo list
NAME        	URL
bitnami     	https://charts.bitnami.com/bitnami
private-repo	http://192.168.255.138/charts
  1. 搜索测试私有chart仓库
[root@k8s-master01 charts]# helm search repo private-repo
NAME                  	CHART VERSION	APP VERSION	DESCRIPTION
private-repo/zookeeper	0.1.0        	1.16.0     	A Helm chart for Kubernetes

Helm的基础命令使用

快速入门指南
命令文档

基础使用

  1. 添加仓库
helm repo add bitnami https://charts.bitnami.com/bitnami
  1. 查看仓库
[root@k8s-master01 configmap-test]# helm repo list
NAME   	URL
bitnami	https://charts.bitnami.com/bitnami
  1. 搜索chart
[root@k8s-master01 configmap-test]# helm search repo zookeeper
NAME                    	CHART VERSION	APP VERSION	DESCRIPTION
bitnami/zookeeper       	12.4.1       	3.9.1      	Apache ZooKeeper provides a reliable, centraliz...
bitnami/dataplatform-bp2	12.0.5       	1.0.1      	DEPRECATED This Helm chart can be used for the ...
bitnami/kafka           	26.6.2       	3.6.1      	Apache Kafka is a distributed streaming platfor...
bitnami/schema-registry 	16.2.5       	7.5.2      	Confluent Schema Registry provides a RESTful in...
bitnami/solr            	8.3.4        	9.4.0      	Apache Solr is an extremely powerful, open sour...
  1. 拉取chart
[root@k8s-master01 configmap-test]# helm pull bitnami/zookeeper # 拉取成功后本地会多一个tgz的chart包
[root@k8s-master01 configmap-test]# ll
-rw-r--r-- 1 root root 45105 Jan  2 21:50 zookeeper-12.4.1.tgz

  1. 修改配置文件(测试使用、非标准操作)
修改values.yaml文件
修改点1:关闭持久化数据
## Enable persistence using Persistent Volume Claims
## ref: https://kubernetes.io/docs/user-guide/persistent-volumes/
##
persistence:
## @param persistence.enabled Enable ZooKeeper data persistence using PVC. If false, use emptyDir
##
enabled: false
  1. 创建名称空间
kubectl create ns helm-zookeeper
  1. 通过chart包来发布资源对象
helm install zookeeper-chart . -n helm-zookeeper # 所在路径要和values、templates同级

# 资源对象验证
[root@k8s-master01 zookeeper]# kubectl get all -n helm-zookeeper
NAME                    READY   STATUS    RESTARTS   AGE
pod/zookeeper-chart-0   1/1     Running   0          10m

NAME                               TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)                      AGE
service/zookeeper-chart            ClusterIP   10.10.74.141   <none>        2181/TCP,2888/TCP,3888/TCP   10m
service/zookeeper-chart-headless   ClusterIP   None           <none>        2181/TCP,2888/TCP,3888/TCP   10m

NAME                               READY   AGE
statefulset.apps/zookeeper-chart   1/1     10m

# 查看
[root@k8s-master01 zookeeper]# helm list -n helm-zookeeper
NAME           	NAMESPACE     	REVISION	UPDATED                                	STATUS  	CHART           	APP VERSION
zookeeper-chart	helm-zookeeper	1       	2024-01-02 22:10:18.410699786 +0800 CST	deployed	zookeeper-12.4.1	3.9.1

# zk服务验证
[root@k8s-master01 zookeeper]# kubectl exec -it zookeeper-chart-0  -n helm-zookeeper -- sh
$  /opt/bitnami/zookeeper/bin/zkServer.sh status
/opt/bitnami/java/bin/java
ZooKeeper JMX enabled by default
Using config: /opt/bitnami/zookeeper/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: standalone # Zookeeper的standalone模式表示Zookeeper服务以单机模式运行,没有集群功能

8.通过helm升级 现有资源对象

修改 values.yaml文件replicaCount 为3并且保存
## @param replicaCount Number of ZooKeeper nodes
##
replicaCount: 3

# 执行升级
[root@k8s-master01 zookeeper]# helm upgrade zookeeper-chart . -n helm-zookeeper
Release "zookeeper-chart" has been upgraded. Happy Helming!
NAME: zookeeper-chart
LAST DEPLOYED: Tue Jan  2 22:32:08 2024
NAMESPACE: helm-zookeeper
STATUS: deployed
REVISION: 2 # 这里版本会变
TEST SUITE: None
NOTES:
CHART NAME: zookeeper
CHART VERSION: 12.4.1
APP VERSION: 3.9.1

# 验证zk集群
[root@k8s-master01 zookeeper]# kubectl exec -it zookeeper-chart-0 -n helm-zookeeper -- sh
$ /opt/bitnami/zookeeper/bin/zkServer.sh status
/opt/bitnami/java/bin/java
ZooKeeper JMX enabled by default
Using config: /opt/bitnami/zookeeper/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: follower  # 备节点
$
You have new mail in /var/spool/mail/root
[root@k8s-master01 zookeeper]# kubectl exec -it zookeeper-chart-1 -n helm-zookeeper -- sh
$ /opt/bitnami/zookeeper/bin/zkServer.sh status
/opt/bitnami/java/bin/java
ZooKeeper JMX enabled by default
Using config: /opt/bitnami/zookeeper/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: follower # 备节点
$
[root@k8s-master01 zookeeper]# kubectl exec -it zookeeper-chart-2 -n helm-zookeeper -- sh
$ /opt/bitnami/zookeeper/bin/zkServer.sh status
/opt/bitnami/java/bin/java
ZooKeeper JMX enabled by default
Using config: /opt/bitnami/zookeeper/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: leader # 主节点
  1. 回滚版本
  • 查看发布历史 :helm history zookeeper-chart -n helm-zookeeper
[root@k8s-master01 zookeeper]# helm history zookeeper-chart -n helm-zookeeper
REVISION	UPDATED                 	STATUS    	CHART           	APP VERSION	DESCRIPTION
1       	Tue Jan  2 22:10:18 2024	superseded	zookeeper-12.4.1	3.9.1      	Install complete
2       	Tue Jan  2 22:32:08 2024	deployed  	zookeeper-12.4.1	3.9.1      	Upgrade complete

  • 回滚到版本1: helm rollback zookeeper-chart 1 -n helm-zookeeper
[root@k8s-master01 configmap-test]# helm rollback zookeeper-chart -n helm-zookeeper
Rollback was a success! Happy Helming!
[root@k8s-master01 configmap-test]# helm history zookeeper-chart -n helm-zookeeper
REVISION	UPDATED                 	STATUS    	CHART           	APP VERSION	DESCRIPTION
1       	Tue Jan  2 22:10:18 2024	superseded	zookeeper-12.4.1	3.9.1      	Install complete
2       	Tue Jan  2 22:32:08 2024	superseded	zookeeper-12.4.1	3.9.1      	Upgrade complete
3       	Tue Jan  2 23:23:16 2024	deployed  	zookeeper-12.4.1	3.9.1      	Rollback to 1

  • 再次查看pod发现又变更为1个pod了: kubectl get po -n helm-zookeeper
[root@k8s-master01 configmap-test]#  kubectl get po -n helm-zookeeper
NAME                READY   STATUS    RESTARTS   AGE
zookeeper-chart-0   1/1     Running   0          6m37s
  1. 卸载
    helm uninstall zookeeper-chart -n helm-zookeeper
 zhangzk@k8smaster:~/helm/zookeeper$ helm uninstall zookeeper-chart -n helm-zookeeper
 release "zookeeper-chart" uninstalled

其他命令

  1. 打包chart
helm package <chart-directory> # 该命令将chart打包成一个chart版本包文件。
# 如果给定路径,就会在该路径中查找chart(必须包含Chart.yaml文件)然后将目录打包。

chart版本包会用于Helm包仓库。
  1. Helm展示
  • helm show all <chart包的路径> # 现实chart的所有配置
  • helm show chart <chart包的路径> # 就是cat Chart.yaml
  • helm show values <chart包的路径> # 就是cat values.yaml
  • helm show crds <chart包的路径> # 显示chart的CRD
  1. 检查chart包正确性
[root@k8s-master01 helm]# helm lint zookeeper
==> Linting zookeeper

1 chart(s) linted, 0 chart(s) failed

创建Chart

helm create configmap-test
[root@k8s-master01 helm_test]# tree configmap-test/
configmap-test/
├── charts # 包含此chart依赖的其他chart
├── Chart.yaml # Chart信息的yaml文件
├── templates # 模板、根据实际情况择取文件
│   ├── deployment.yaml
│   ├── _helpers.tpl # 用于定义可重用的 Helm 模板函数和全局变量
│   ├── hpa.yaml
│   ├── ingress.yaml
│   ├── NOTES.txt # 描述信息
│   ├── serviceaccount.yaml
│   ├── service.yaml
│   └── tests
│       └── test-connection.yaml
└── values.yaml # chart 默认的配置值

3 directories, 10 files

[root@k8s-master01 configmap-test]# cat Chart.yaml 
apiVersion: v2 # chart的
name: configmap-test # chart名称
description: A Helm chart for Kubernetes # 描述信息
type: application
version: 0.1.0 # chart的版本
appVersion: "1.16.0" # chart内应用的版本

Helm的高阶使用

模板参考

Helm 内置变量

Release.Name: 实例的名称,helm install指定的名字
Release.Namespace: 应用实例的命名空间
Release.Revision: 此次修订的版本号,从1开始,每次升级回滚都会增加1
Release.IsInstall:如果当前对实例的操作是安装,则变量 为true
Release.IsUpgrade:如果对实例是更新或者回滚这个值为true
Chart.Name: 引用Chart.yaml文件中的字段

Helm 常用函数

函数用法文档

流程控制

if/else

{{- if not .Values.autoscaling.enabled }} # 如果不为true ,执行下面语句
  replicas: {{ .Values.replicaCount }}
  {{- end }}

with

# with相当于切换到某层级
image.address.with: {{ .Values.imageDefine.define.repository }}: {{ .Values.imageDefine.define.tag }}

# with写法
{{- with .Values.imageDefine.define }} 
image.address.with: {{ .repository }}: {{ . tag }}
{{- end }}

range 循环文章来源地址https://www.toymoban.com/news/detail-826626.html

到了这里,关于K8s包管理工具helm的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Kubernetes(k8s)容器编排Pod介绍和使用

    Pod是kubernetes中你可以创建和部署的最小也是最简的单位,一个Pod代表着集群中运行的一个进程。 Pod有两个必须知道的特点 通过yaml文件或者json描述Pod和其内容器的运行环境和期望状态,例如一个最简单的运行nginx应用的pod,定义如下 3.1.1 参数描述 下面简要分析一下上面的

    2024年02月08日
    浏览(84)
  • Kubernetes(K8s):容器化应用的航空母舰

    Kubernetes(K8s)是一个开源的容器编排系统,它的出现就像是为容器化应用提供了一艘强大的航空母舰。在这艘母舰上,你的应用容器就像是一架架战斗机,Kubernetes负责指挥它们起飞、飞行、降落,确保它们能在正确的时间、正确的地点执行任务。 Pod: Kubernetes的基本飞行编队

    2024年04月08日
    浏览(66)
  • kubernetes(k8s)为容器和 Pod 分配内存资源

    展示如何将内存请求(request)和内存限制(limit)分配给一个容器。 我们保障容器拥有它请求数量的内存,但不允许使用超过限制数量的内存。 创建新的命名空间 编辑yaml文件 配置文件的 args 部分提供了容器启动时的参数。 “–vm-bytes”, “150M” 参数告知容器尝试分配 15

    2024年02月15日
    浏览(58)
  • Kubernetes (K8s) 解读:微服务与容器编排的未来

    🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🐅🐾猫头虎建议程序员必备技术栈一览表📖: 🛠️ 全栈技术 Full Stack : 📚 MERN/MEAN/MEVN Stack | 🌐 Jamstack | 🌍 GraphQL | 🔁 RESTful API | ⚡ WebSockets | 🔄 CI/CD | 🌐 Git Version Control | 🔧 DevOps 🌐 前端技术 Frontend : 🖋️ HTML CSS |

    2024年02月09日
    浏览(42)
  • 【Kubernetes】k8s中容器之间、pod之间如何进行网络通信?

    首先来回顾一下Pod: Pod 是用于构建应用程序的最小可部署对象。单个 Pod 代表集群中正在运行的工作负载,并 封装一个或多个 Docker 容器、任何所需的存储以及唯一的 IP 地址 。 集群中每一个 Pod 都会获得自己的、 独一无二的 IP 地址。一个Pod里的一组容器共享相同的IP地址。

    2024年04月28日
    浏览(73)
  • kubernetes(k8s)大白学习02:容器和docker基础、使用、架构学习

    简单说:容器(container)就是计算机上的一个沙盒进程,它与计算机上的所有其它进程相隔离。 这种隔离是怎么做到的呢?它利用了内核提供的 namespace 和 cgroup 这 2 种技术。这些技术能力在 Linux 中已经存在了很长时间。而 Docker 或容器技术致力于将这些功能更易于使用和更

    2024年02月07日
    浏览(68)
  • yum部署kubernetes(k8s)集群、k8s常用资源管理

    目录 一、环境搭建 1、准备环境 1)计算机说明,建议系统版本7.4或者7.6 2)修改所有主机的计算机名设置host文件  2、安装master节点 1)安装etcd配置etcd 2)安装k8s-master节点 3)配置apiserver 4)配置controller和scheduler 5)启动k8s服务 3、安装k8s-master上的node 1)安装node 2)配置kube

    2024年02月13日
    浏览(64)
  • k8s容器集群管理

    k8s容器集群管理 k8s简介 容器技术的发展 使用kubeadm安装k8s kubectl Kubernetes 架构 k8s节点 节点与控制面之间的通信 控制器 k8s容器 Kubernetes 对象 Kubernetes 对象管理 Kubernetes 对象管理 指令式命令 Kubernetes 对象管理 指令式对象配置 k8s对象管理 声明式对象配置 使用 Kustomize 对 Kubern

    2024年02月10日
    浏览(34)
  • kubernetes/k8s配置资源管理

    配置资源管理 Secret Configmap*.1.2加入新特征 1.18 Secret:保存密码,token,敏感的k8s资源 这类数据可以存放在镜像当中,但是防止secret可以更方便的控制,减少暴漏风险。 保存加密的信息 Secret的类型: docker-registry:存储docker仓库认证信息,以及docker组件的认证信息(私有的) generic:是

    2024年01月17日
    浏览(52)
  • (kubernetes)k8s常用资源管理

    目录 k8s常用资源管理 1、创建一个pod 1)创建yuml文件 2)创建容器 3)查看所有pod创建运行状态 4)查看指定pod资源 5)查看pod运行的详细信息 6)验证运行的pod 2、pod管理 1)删除pod 2)查看删除pod无法找到 3)创建pod 4)发现最先创建的pod运行在k8s-master节点上,下载镜像速度太

    2024年02月13日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包