【kubernetes】新版helm3的三大概念+快速指南+自定义charts模板

网友投稿 609 2022-05-30

@[toc]

推荐文章

【Drone+Gitlab】一条龙服务,直接起飞 — 从介绍->部署->配置->写.drone.yml流水线+常见的报错解决

【容器】docker-comopse安装+案例练习

【GitLab】使用Docker和Docker-Compose部署-个人、私有代码仓库

【kubevirt】VirtualMachineInstanceReplicaSet(vmis)-扩缩容-弹性伸缩

【openstack】cloudkitty组件,入门级安装(快速)

【openstack】Designate组件,入门级安装(快速)

【Istio是什么?】 还不知道你就out了,一文40分钟快速理解

【Istio实际操作篇】Istio入门10分钟快速安装

【代理是什么?】nginx快速入门+反向代理hexo个人博客

【还不会搭建博客吗?】centos7系统部署hexo博客新手入门-进阶,看这一篇就够了

【没接触过kubevirt?】15分钟快速入门kubevirt

概述

Helm 是 Kubernetes 的包管理器

Helm的三大概念

chart:代表helm包,包含在 Kubernetes 集群内部运行应用程序,工具或服务所需的所有资源定义。

Repository(仓库):用来存放和共享 charts 的地方。

Release :运行在 Kubernetes 集群中的 chart 的实例,一个 chart 通常可以在同一个集群中安装多次,每一次安装都会创建一个新的 release。

简单来说!!

其实我们可以对比yum来理解

chart看作linux中rpm包,repository看作repo仓库,release就是我们的yum install安装启动后的软件。

还不理解吗??

还可以,这样

chart看作docker镜像,release看作docker镜像运行的容器,而Repository看作我们的docker Hub镜像仓库。

环境准备

一个 Kubernetes 集群

支持的版本

Helm的版本用 x.y.z 描述,x是主版本,y是次版本,z是补丁版本,遵循 语义化版本 术语

安装Helm

helm官方下载地址

两种方式安装Helm,按需选择。这里使用二进制安装。

方式1:使用二进制版本安装

tar -zxf helm-v3.7.0-linux-amd64.tar.gz cp linux-amd64/helm /usr/local/bin/helm 或者 mv linux-amd64/helm /usr/local/bin/helm helm version

方式二:使用脚本安装

这是官方提供的脚本,自动拉取最新的Helm版本并安装在本地。

$ curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 $ chmod 700 get_helm.sh $ ./get_helm.sh

Helm的基本操作(快速指南)

下列所有操作以nginx为例

Helm 自带一个强大的搜索命令,可以从两种来源中进行搜索:

helm search hub 从 Artifact Hub 中查找并列出 helm charts。 Artifact Hub中存放了大量不同的仓库。

helm search repo 从你添加(使用 helm repo add)到本地 helm 客户端中的仓库中进行查找。该命令基于本地数据进行搜索,无需连接互联网。

从 Artifact Hub 中搜索所有的 nginx charts。

$ helm search hub nginx URL CHART VERSION APP VERSION DESCRIPTION https://artifacthub.io/packages/helm/wiremind/n... 2.1.1 An NGINX HTTP server https://artifacthub.io/packages/helm/zrepo-test... 5.1.5 1.16.1 Chart for the nginx server https://artifacthub.io/packages/helm/mirantis/n... 0.1.0 1.16.0 A NGINX Docker Community based Helm chart for K... ...

使用 helm repo add 命令,添加gitlab仓库。

$ helm repo add bitnami https://charts.bitnami.com/bitnami "bitnami" has been added to your repositories

使用 helm search repo 命令,你可以从你所添加的仓库中查找chart的名字。

$ helm search repo nginx NAME CHART VERSION APP VERSION DESCRIPTION bitnami/nginx 10.2.1 1.21.6 NGINX Open Source is a web server that can be a... bitnami/nginx-ingress-controller 9.1.27 1.2.0 NGINX Ingress Controller is an Ingress controll... bitnami/nginx-intel 1.0.5 0.4.7 NGINX Open Source for Intel is a lightweight se... bitnami/kong 5.0.2 2.7.0 Kong is a scalable, open source API layer (aka ...

一旦你找到你想安装的 helm 包,便可以通过使用helm install命令来安装它。

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

$ helm install my-nginx bitnami/nginx --version 10.2.1 NAME: my-nginx LAST DEPLOYED: Fri May 6 11:06:07 2022 NAMESPACE: default STATUS: deployed REVISION: 1 TEST SUITE: None NOTES: CHART NAME: nginx CHART VERSION: 10.2.1 APP VERSION: 1.21.6 ...

使用 helm status来追踪 release 的状态、信息。

$ helm status my-nginx NAME: my-nginx LAST DEPLOYED: Fri May 6 11:06:07 2022 NAMESPACE: default STATUS: deployed REVISION: 1 TEST SUITE: None NOTES: CHART NAME: nginx CHART VERSION: 10.2.1 APP VERSION: 1.21.6 ...

查看helm安装,releases的列表

[root@master helm]# helm list NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION my-nginx default 1 2022-05-06 11:06:07.215433713 +0800 CST deployed nginx-10.2.1 1.21.6

浏览器访问,验证nginx服务

查看nginx的svc

[root@master ~]# kubectl get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1 443/TCP 115d my-nginx LoadBalancer 10.102.231.181 80:30769/TCP 25m

自定义Charts模板

上述nginx安装只是使用仓库chart的默认配置。不利于个性化需求和生成环境的使用。我们也可以修改chart默认配置,也可以自己创建Charts模板。

1. 创建一个chart模板

# helm create testnginx Creating testnginx

2. Helm chart的目录结构如下:

# tree testnginx/ testnginx/ ├── charts ├── Chart.yaml ├── templates │ ├── deployment.yaml │ ├── _helpers.tpl │ ├── hpa.yaml │ ├── ingress.yaml │ ├── NOTES.txt │ ├── serviceaccount.yaml │ ├── service.yaml │ └── tests │ └── test-connection.yaml └── values.yaml

templates/目录是我们资源清单的yaml文件。

values.yaml文件内容,定义一些template目录下yaml文件所引用的字段

Chart.yaml文件是该chart的描述信息。charts/目录 可以 包含其他的chart(称之为 子chart)。

3. templates/ 目录下,会注意到一些文件:

NOTES.txt: chart的"帮助文本"。这会在你的用户执行helm install时展示给他们。

_helpers.tpl: 放置可以通过chart复用的模板辅助对象

我们删除templates/目录下的文件:

# rm -rf testnginx/templates/*

修改values.yaml文件

# cat values.yaml name: app-nginx image: repository: 192.168.200.11/library/nginx

创建deploy.yaml文件,并引用values.yaml文件的字段,之后只要我们修改values.yaml文件,就可以达到改变templates/deploy.yaml文件的效果。

# cat templates/deploy.yaml kind: Deployment apiVersion: apps/v1 metadata: name: {{ .Values.name }} spec: replicas: 1 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: web-nginx image: {{ .Values.image.repository }} ports: - name: http containerPort: 80 --- kind: Service apiVersion: v1 metadata: name: svc-nginx spec: ports: - name: http port: 80 targetPort: 80 selector: app: nginx type: NodePort

使用helm install创建release

# helm install test-nginx testnginx/ NAME: test-nginx LAST DEPLOYED: Fri May 6 14:52:43 2022 NAMESPACE: default STATUS: deployed REVISION: 1 TEST SUITE: None

检查服务

# helm list NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION test-nginx default 1 2022-05-06 14:52:43.081379354 +0800 CST deployed testnginx-0.1.0 1.16.0 # kubectl get deploy,pod NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/app-nginx 1/1 1 1 5m14s NAME READY STATUS RESTARTS AGE pod/app-nginx-57fbfbd5c5-g2sjq 1/1 Running 0 5m14s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/kubernetes ClusterIP 10.96.0.1 443/TCP 115d service/svc-nginx NodePort 10.106.42.241 80:32755/TCP 5m14s

4. helm upgrade升级 release

当我们想给我们的服务升级版本时,就需要使用到helm upgrade 命令非常简便快捷

修改values.yaml文件切换版本

# cat testnginx/values.yaml name: app-nginx image: #repository: 192.168.200.11/library/nginx repository: 192.168.200.11/library/nginx-2

# helm upgrade test-nginx testnginx/ Release "test-nginx" has been upgraded. Happy Helming! NAME: test-nginx LAST DEPLOYED: Fri May 6 15:26:08 2022 NAMESPACE: default STATUS: deployed REVISION: 2 TEST SUITE: None

5. helm rollback回滚

假如在一次发布过程中,发生了不符合预期的事情,就需要使用helm rollback 命令回滚到之前的发布版本。

查看test-nginx历史版本:

[root@master helm]# helm history test-nginx REVISION UPDATED STATUS CHART APP VERSION DESCRIPTION 1 Fri May 6 15:28:12 2022 superseded testnginx-0.1.0 1.16.0 Install complete 2 Fri May 6 15:28:56 2022 superseded testnginx-0.1.0 1.16.0 Upgrade complete

回滚到版本1:

# helm rollback test-nginx 1 Rollback was a success! Happy Helming!

卸载一个版本

新版helm3卸载后不会保留历史版本,如果您在执行 helm uninstall 的时候提供 --keep-history 选项, Helm将会保存版本历史。

【kubernetes】新版helm3的三大概念+快速指南+自定义charts模板

# helm uninstall test-nginx release "test-nginx" uninstalled

推荐文章

【Drone+Gitlab】一条龙服务,直接起飞 — 从介绍->部署->配置->写.drone.yml流水线+常见的报错解决

【容器】docker-comopse安装+案例练习

【GitLab】使用Docker和Docker-Compose部署-个人、私有代码仓库

【kubevirt】VirtualMachineInstanceReplicaSet(vmis)-扩缩容-弹性伸缩

【openstack】cloudkitty组件,入门级安装(快速)

【openstack】Designate组件,入门级安装(快速)

【Istio是什么?】 还不知道你就out了,一文40分钟快速理解

【Istio实际操作篇】Istio入门10分钟快速安装

【代理是什么?】nginx快速入门+反向代理hexo个人博客

【还不会搭建博客吗?】centos7系统部署hexo博客新手入门-进阶,看这一篇就够了

【没接触过kubevirt?】15分钟快速入门kubevirt

------------------------------------------------------------------------------------------END------------------------------------------------------------------------------------------

Docker Kubernetes Linux 云计算

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:【精选】深入浅出带你了解微服务架构如何运作?
下一篇:读薄「Linux 内核设计与实现」(2) - 进程管理和调度
相关文章