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

推荐文章

概述

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是补丁版本,遵循 语义化版本 术语

image.png

安装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 客户端中的仓库中进行查找。该命令基于本地数据进行搜索,无需连接互联网。
  1. 从 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...
...
  1. 使用 helm repo add 命令,添加gitlab仓库。
$ helm repo add bitnami https://charts.bitnami.com/bitnami
"bitnami" has been added to your repositories
  1. 使用 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 ...

  1. 一旦你找到你想安装的 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
...

  1. 使用 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
...

  1. 查看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
  1. 浏览器访问,验证nginx服务

查看nginx的svc

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

自定义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       <none>        443/TCP        115d
service/svc-nginx    NodePort    10.106.42.241   <none>        80:32755/TCP   5m14s

image.png

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

image.png

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!
image.png

卸载一个版本

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

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

推荐文章

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,445评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,889评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,047评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,760评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,745评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,638评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,011评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,669评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,923评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,655评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,740评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,406评论 4 320
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,995评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,961评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,023评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,483评论 2 342