Kubernetes集群包管理解决方案helm

目录

一、引入helm原因

二、helm是什么

三、helm作用及核心概念

四、helm安装

五、helm基础使用

5.1 添加及删除仓库

5.1.1 查看仓库

5.1.2 添加新的仓库地址

5.1.3 更新仓库

5.1.5删除仓库

5.2 查看charts

5.3 部署应用 MySQL

5.4 查看chart资源

5.5 删除Release

5.6 定制参数部署应用

5.7 升级和回滚

5.8 更多安装方式

六、Chart包开发

6.1 Chart 目录结构

6.2 创建可配置的Chart

6.2.1 配置 Chart.yaml 内容

6.2.2 新增values.yaml文件

6.3.3 配置deploy引用values的值

6.3.5将Chart包进行打包


一、引入helm原因

实际生产中,维护大量的yaml文件极为不便,所以,我们需要将这些YAML文件作为一个整体管理,并高效复用,所以才有了helm。

二、helm是什么

官方的定义是:Helm是一个为K8s进行包管理的工具。Helm将yaml作为一个整体管理并实现了这些yaml的高效复用,就像Linux中的yum或apt-get,它使我们能够在K8s中方便快捷的安装、管理、卸载K8s应用。

三、helm作用及核心概念

Helm 定义了一套 Chart 格式来描述一个应用。打个比方,一个安卓程序打包成 APK 格式,就可以安装到任意一台运行安卓系统的手机上,如果我们把 kubernetes 集群比做安卓系统,kubernetes 集群内应用比做安卓程序,那么 Chart 就可以比做 APK。这就意味着,kubernetes 集群应用只要打包成 Chart,就可以通过 Helm 部署到任意一个 kubernetes 集群中。

很多有状态应用例如redis、mysql之类的官方都提供helm来安装。

Helm中有三个重要概念,分别为Chart、Repository和Release。

  • Chart代表中Helm包。它包含在K8s集群内部运行应用程序,工具或服务所需的所有资源定义,为所有项目资源清单yaml文件的集合,采用TAR格式,可以类比成yum中的RPM。

  • Repository就是用来存放和共享Chart的地方,可以类比成YUM仓库。

  • Release是运行在K8s集群中的Chart的实例,一个Chart可以在同一个集群中安装多次。Chart就像流水线中初始化好的模板,Release就是这个“模板”所生产出来的各个产品。

四、helm安装

其实github上搜也有,也可按照下面方式安装:

[root@k8s-master01 ~]# wget https://get.helm.sh/helm-v3.9.2-linux-amd64.tar.gz

[root@k8s-master01 ~]# tar xf helm-v3.9.2-linux-amd64.tar.gz

[root@k8s-master01 ~]# cd linux-amd64/
[root@k8s-master01 linux-amd64]# ls
helm  LICENSE  README.md

[root@k8s-master01 linux-amd64]# mv helm /usr/bin

[root@k8s-master01 linux-amd64]# helm version
version.BuildInfo{Version:"v3.9.2", GitCommit:"1addefbfe665c350f4daf868a9adc5600cc064fd", GitTreeState:"clean", GoVersion:"go1.17.12"}

五、helm基础使用

5.1 添加及删除仓库

5.1.1 查看仓库

 helm repo list

[root@master ~]# helm repo list
NAME    URL
stable  http://mirror.azure.cn/kubernetes/charts/  

5.1.2 添加新的仓库地址

微软源: helm repo add stable http://mirror.azure.cn/kubernetes/charts/

bitnami源: helm repo add bitnami https://charts.bitnami.com/bitnami

prometheus源: helm repo add prometheus-community https://prometheus-community.github.io/helm-charts

5.1.3 更新仓库

helm repo update

5.1.5删除仓库

helm repo remove stable       #remove 仓库名

5.2 查看charts

使用helm search repo 关键字可以查看相关charts

[root@k8s-master01 ~]# helm search repo stable
NAME                                    CHART VERSION   APP VERSION             DESCRIPTION
stable/acs-engine-autoscaler            2.2.2           2.1.1                   DEPRECATED Scales worker nodes within agent pools
stable/aerospike                        0.3.5           v4.5.0.5                DEPRECATED A Helm chart for Aerospike in Kubern...
stable/airflow                          7.13.3          1.10.12                 DEPRECATED - please use: https://github.com/air...
stable/ambassador                       5.3.2           0.86.1                  DEPRECATED A Helm chart for Datawire Ambassador
stable/anchore-engine                   1.7.0           0.7.3                   Anchore container analysis and policy evaluatio...
stable/apm-server                       2.1.7           7.0.0                   DEPRECATED The server receives data from the El...
stable/ark                              4.2.2           0.10.2                  DEPRECATED A Helm chart for ark
stable/artifactory                      7.3.2           6.1.0                   DEPRECATED Universal Repository Manager support...
stable/artifactory-ha                   0.4.2           6.2.0                   DEPRECATED 

。。。

5.3 部署应用 MySQL

前提条件:k8s集群中存在storageclass:nfs-client

[root@k8s-master01 ~]# helm search repo mysql
NAME                                    CHART VERSION   APP VERSION     DESCRIPTION
stable/mysql                            1.6.9           5.7.30          DEPRECATED - Fast

[root@k8s-master01 ~]# helm install stable/mysql --generate-name  --set persistence.storageClass=nfs-client --set mysqlRootPassword=test123

5.4 查看chart资源

[root@k8s-master01 ~]# kubectl get all -l release=mysql-1658996042
NAME                                    READY   STATUS    RESTARTS   AGE
pod/mysql-1658996042-755f5f64f6-j5s67   1/1     Running   0          72m

NAME                       TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)    AGE
service/mysql-1658996042   ClusterIP   10.96.2.136   <none>        3306/TCP   72m

NAME                               READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/mysql-1658996042   1/1     1            1           72m

NAME                                          DESIRED   CURRENT   READY   AGE
replicaset.apps/mysql-1658996042-755f5f64f6   1         1         1       72m

我们也可以 helm show chart 命令来了解 MySQL 这个 chart 包的一些特性:

[root@k8s-master01 ~]# helm show chart stable/mysql
apiVersion: v1
appVersion: 5.7.30
deprecated: true
description: DEPRECATED - Fast, reliable, scalable, and easy to use open-source relational
  database system.
home: https://www.mysql.com/
icon: https://www.mysql.com/common/logos/logo-mysql-170x115.png
keywords:
- mysql
- database
- sql
name: mysql
sources:
- https://github.com/kubernetes/charts
- https://github.com/docker-library/mysql
version: 1.6.9

如果想要了解更多信息,可以用 helm show all 命令:

[root@k8s-master01 ~]# helm show all stable/mysql

5.5 删除Release

如果需要删除这个 release,也很简单,只需要使用 helm uninstallhelm delete 命令即可:

[root@k8s-master01 ~]# helm uninstall mysql-1605195227
release "mysql-1605195227" uninstalled

uninstall 命令会从 Kubernetes 中删除 release,也会删除与 release 相关的所有 Kubernetes 资源以及 release 历史记录。

在删除的时候使用 --keep-history 参数,则会保留 release 的历史记录,该 release 的状态就是 UNINSTALLED

5.6 定制参数部署应用

上面我们都是直接使用的 helm install 命令安装的 chart 包,这种情况下只会使用 chart 的默认配置选项,但是更多的时候,是各种各样的需求,所以我们希望根据自己的需求来定制 chart 包的配置参数。

我们可以使用 helm show values 命令来查看一个 chart 包的所有可配置的参数选项:

[root@k8s-master01 ~]# helm show values stable/mysql

1,准备参数文件

[root@k8s-master01 ~]# vim mysql-config.yml
mysqlDatabase: helm
persistence:
  enabled: true  # 没有存储卷情况下,改为false
  storageClass: nfs-client

2, 使用-f mysql-config.yml安装应用并覆盖参数

helm install mysql -f mysql-config.yml stable/mysql

3, 查看覆盖的参数

[root@master ~]# helm get values mysql
USER-SUPPLIED VALUES:
mysqlDatabase: helm
persistence:
  enabled: true
  storageClass: nfs-client

5.7 升级和回滚

helm upgrade,helm rollback

当新版本的 chart 包发布的时候,或者当你要更改 release 的配置的时候,你可以使用 helm upgrade 命令来操作。升级需要一个现有的 release,并根据提供的信息对其进行升级。因为 Kubernetes charts 可能很大而且很复杂,Helm 会尝试以最小的侵入性进行升级,它只会更新自上一版本以来发生的变化:

1, 升级前查看版本

[root@k8s-master01 helmdir]#  kubectl get deployment mysql -o wide
NAME    READY   UP-TO-DATE   AVAILABLE   AGE   CONTAINERS   IMAGES         SELECTOR
mysql   1/1     1            1           54m   mysql        mysql:5.7.30   

images版本为5.7.30

2,修改配置并升级

[root@k8s-master01 helmdir]# vim mysql-config.yml
mysqlDatabase: kubemsb
persistence:
  enabled: true
  storageClass: nfs-client

升级并且加一个--set imageTag=5.7.31参数设置为5.7.31版本

[root@k8s-master01 ~]# helm upgrade mysql -f mysql-config.yml --set imageTag=5.7.31 stable/mysql

3, 升级后确认版本

[root@k8s-master01 helmdir]# kubectl get deployment mysql -o wide
NAME    READY   UP-TO-DATE   AVAILABLE   AGE   CONTAINERS   IMAGES         SELECTOR
mysql   1/1     1            1           58m   mysql        mysql:5.7.31   app=mysql,release=mysql

4, 回滚

[root@k8s-master01 helmdir]# helm history mysql
REVISION        UPDATED                         STATUS          CHART           APP VERSION     DESCRIPTION
1               Fri Jul 29 14:07:17 2022        superseded      mysql-1.6.9     5.7.30          Install complete
2               Fri Jul 29 15:04:20 2022        deployed        mysql-1.6.9     5.7.30          Upgrade complete

[root@k8s-master01 helmdir]# helm rollback mysql 1
Rollback was a success! Happy Helming!

5.8 更多安装方式

和yum命令类似

  • chart 仓库

  • 本地 chart 压缩包

[root@k8s-master01 helmdir]# helm pull stable/mysql

[root@k8s-master01 helmdir]# ls mysql-1.6.9.tgz
mysql-1.6.9.tgz

[root@k8s-master01 helmdir]# helm install mysql2 mysql-1.6.9.tgz

六、Chart包开发

6.1 Chart 目录结构

[root@k8s-master01 helmdir]# helm create foo

[root@k8s-master01 helmdir]# tree foo
foo
├── charts
├── Chart.yaml
├── templates
│   ├── deployment.yaml
│   ├── _helpers.tpl
│   ├── hpa.yaml
│   ├── ingress.yaml
│   ├── NOTES.txt
│   ├── serviceaccount.yaml
│   ├── service.yaml
│   └── tests
│       └── test-connection.yaml
└── values.yaml

[root@master ~]# helm pull stable/mysql

[root@master ~]# tar xf mysql-1.6.8.tgz

[root@master ~]# ls mysql
Chart.yaml  README.md  templates  values.yaml

[root@master ~]# ls -l mysql/templates/ 
total 48
-rwxr-xr-x 1 root root  292 Jan  1  1970 configurationFiles-configmap.yaml
-rwxr-xr-x 1 root root 8930 Jan  1  1970 deployment.yaml
-rwxr-xr-x 1 root root 1290 Jan  1  1970 _helpers.tpl
-rwxr-xr-x 1 root root  295 Jan  1  1970 initializationFiles-configmap.yaml
-rwxr-xr-x 1 root root 2036 Jan  1  1970 NOTES.txt
-rwxr-xr-x 1 root root  868 Jan  1  1970 pvc.yaml
-rwxr-xr-x 1 root root 1475 Jan  1  1970 secrets.yaml
-rwxr-xr-x 1 root root  328 Jan  1  1970 serviceaccount.yaml
-rwxr-xr-x 1 root root  800 Jan  1  1970 servicemonitor.yaml
-rwxr-xr-x 1 root root 1231 Jan  1  1970 svc.yaml
drwxr-xr-x 2 root root   50 Nov 13 18:43 tests

文件说明
Chart.yaml用于描述Chart的基本信息; helm show chart stable/mysql命令查看的内容就是此文件内容
values.yamlChart的默认配置文件; helm show values stable/mysql命令查看的内容就是此文件内容
README.md[可选] 当前Chart的介绍
LICENS[可选] 协议
requirements.yaml[可选] 用于存放当前Chart依赖的其它Chart的说明文件
charts/[可选]: 该目录中放置当前Chart依赖的其它Chart
templates/[可选]: 部署文件模版目录

6.2 创建可配置的Chart

6.2.1 配置 Chart.yaml 内容

[root@k8s-master01 nginx]# pwd
/helm/nginx

vim Char.yaml

apiVersion: v2
name: helm-nginx-new
description: A Helm chart for Kubernetes
type: application
version: 0.1.0
appVersion: "0.1.0"

6.2.2 新增values.yaml文件

vim values.yaml
image:
  repository: nginx
  tag: '1.15-alpine'
replicas: 2

6.3.3 配置deploy引用values的值

[root@k8s-master01 nginx]# vim templates/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: helm-nginx
spec:
  replicas: {{ .Values.replicas }}
  selector:
    matchLabels:
      app: helm-nginx
  template:
    metadata:
      labels:
        app: helm-nginx
    spec:
      containers:
      - name: helm-nginx
        image: {{ .Values.image.repository }}:{{ .Values.image.tag }}  
        imagePullPolicy: IfNotPresent

模板变量就是{{  }}

.Values.image.repository 就是上级目录values文件里的image变量

[root@k8s-master01 nginx]# helm install helm-nginx-new /helm/nginx

6.3.5将Chart包进行打包

将chart打包成一个压缩文件,便于存储与分享。

[root@k8s-master01 nginx]# helm package .
Successfully packaged chart and saved it to: /helm/nginx/helm-nginx-1.0.0.tgz

  • 27
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值