安装 Helm3 管理 Kubernetes 应用

安装 Helm3 管理 Kubernetes 应用

文章目录

  !版权声明:本博客内容均为原创,每篇博文作为知识积累,写博不易,转载请注明出处。


系统环境:

  • Helm 版本:v3.5.0
  • Kubernetes 版本:v1.18.2

参考地址:

一、Helm 介绍

Helm 是一款能够帮助你管理 Kubernetes 应用的程序,它可以让你创建自己的应用模板(chart),然后模板来创建配置很多可自定义参数,每次我们只需要设定很少或者不设置参数(使用默认参数)就可以将应用部署到 Kubernetes 中,后期就可以通过 Helm 来进行升级、回滚、删除等等操作的管理。

Helm 的 Charts 类似于应用商店,里面存有很多公司提供不同应用的模板,例如常部署的 Redis、Mysql、Nginx 等等,可以让我们很方便的采用别人的模板,然后进行一定的配置,就能在我们的 Kubernetes 集群中创建对应的应用。

Helm 还经常与 CI\CD 配置使用,在这个过程中用于维护应用程序的安装、升级、回滚等操作。

如上,现在学习如何安装、使用 Helm,已经是学习如何使用 Kubernetes 的重要部分了,下面将记录一下这个安装过程。

二、下载并安装 Helm 客户端

访问 Helm Github 下载页面 https://github.com/helm/helm/releases 找到最新的客户端,里面有不同系统下的包,这里我们选择 Linux amd64,然后在 Linux 系统中使用 Wget 命令进行下载。

1#下载Helm客户端
2$ wget https://get.helm.sh/helm-v3.5.0-linux-amd64.tar.gz

接下来解压下载的包,然后将客户端放置到 /usr/local/bin/ 目录下:

1#解压 Helm
2$ tar -zxvf helm-v3.5.0-linux-amd64.tar.gz
3
4#复制客户端执行文件到 bin 目录下,方便在系统下能执行 helm 命令
5$ cp linux-amd64/helm /usr/local/bin/

注意:helm 客户端需要下载到安装了 kubectl 并且能执行能正常通过 kubectl 操作 kubernetes 的服务器上,否则 helm 将不可用。

三、添加 Chart 仓库

在 Helm 中默认是不会添加 Chart 仓库,所以这里我们需要手动添加,下面是添加一些常用的 Charts 库,命令如下:

1$ helm repo add  elastic    https://helm.elastic.co
2$ helm repo add  gitlab     https://charts.gitlab.io
3$ helm repo add  harbor     https://helm.goharbor.io
4$ helm repo add  bitnami    https://charts.bitnami.com/bitnami
5$ helm repo add  incubator  https://kubernetes-charts-incubator.storage.googleapis.com
6$ helm repo add  stable     https://kubernetes-charts.storage.googleapis.com

增加完仓库后,需要执行更新命令,将仓库中的信息进行同步:

1$ helm repo update

注意:如果有的仓库不能正常解析,请更换 DNS 地址,在测试过程中,发现有的能正常解析,有的不能。如果还不行,就直接将域名和对应的地址写死在 Host 文件中。

四、Helm 的基本操作

# 安装应用

通过 Helm 在 Repo 中查询可安装的 Nginx 包:

1$ helm search repo nginx
2
3NAME                                    CHART VERSION   APP VERSION     DESCRIPTION
4bitnami/nginx                           5.3.1           1.17.10         Chart for the nginx server
5bitnami/nginx-ingress-controller        5.3.21          0.32.0          Chart for the nginx Ingress controller
6bitnami/kong                            1.1.4           2.0.4           Kong is a scalable, open source API layer (aka ...

安装测试:

  • -n:指定安装的 Namespace
1$ helm install nginx bitnami/nginx -n mydlqcloud 

查看应用状态

1$ helm status nginx -n mydlqcloud

# 自定义参数安装应用

Helm 中支持使用自定义 yaml 文件和 --set 命令参数对要安装的应用进行参数配置,使用如下:

## 查看应用 chart 可配置参数

首先使用 helm show values {仓库名称}/{应用名称} 来查看对应应用的可配置参数:

 1$ helm show values bitnami/nginx
 2
 3image:
 4  registry: docker.io
 5  repository: bitnami/nginx
 6  tag: 1.17.10-debian-10-r33
 7resources:
 8  limits: 
 9     cpu: 100m
10     memory: 128Mi
11  requests: 
12     cpu: 100m
13     memory: 128Mi
14  ......(太长,略)

## 方式一:使用自定义 values.yaml 文件安装应用

使用自定义配置文件来配置安装应用的参数:

(1)、创建自定义配置文件 values.yaml

 1$ cat > values.yaml << EOF
 2
 3image:
 4  registry: docker.io
 5  repository: bitnami/nginx
 6resources:
 7  limits: 
 8     cpu: 1000m
 9     memory: 1024Mi
10  requests: 
11     cpu: 1000m
12     memory: 1024Mi
13
14EOF

(2)、使用自定义配置文件运行应用

1$ helm install -f values.yaml bitnami/nginx

## 方式二:使用 --set 配置参数进行安装

--set 参数是在使用 helm 命令时候添加的参数,可以在执行 helm 安装与更新应用时使用,多个参数间用","隔开,使用如下:

如果配置文件和 --set 同时使用,则 --set 设置的参数会覆盖配置文件中的参数配置。

1$ helm install --set 'registry.registry=docker.io,registry.repository=bitnami/nginx' bitnami/nginx

对于 --set 写配置参数,Helm 官方对于不同的配置类型给出了不同的写法,如下:

yaml 文件写法set 的写法
name: value--set name=value
a: b
c: d
--set a=b,c=d
outer:
  inner: value
--set outer.inner=value
name:
  - a
  - b
  - c
--set name={a, b, c}
servers:
  - port: 80
--set servers[0].port=80
servers:
  - port: 80
    host: example
--set servers[0].port=80,servers[0].host=example
name: "value1,value2"--set name=value1\,value2
nodeSelector:
  kubernetes.io/role: master
--set nodeSelector."kubernetes\.io/role"=master

# 卸载应用

卸载应用,并保留安装记录

1$ helm uninstall nginx -n mydlqcloud --keep-history

查看全部应用(包含安装和卸载的应用)

1$ helm list -n mydlqcloud --all

卸载应用,不保留安装记录

1$ helm delete nginx -n mydlqcloud

# 升级应用

创建新的配置参数文件 values.yaml:

1$ cat > values.yaml << EOF
2
3service.type: NodePort
4service.nodePorts.http: 30002
5
6EOF

应用更新:

1$ helm upgrade -f values.yaml nginx bitnami/nginx -n mydlqcloud

查看新配置是否生效:

1$ helm get values nginx -n mydlqcloud
2
3USER-SUPPLIED VALUES:
4service.nodePorts.http: 30002
5service.type: NodePort

# 应用回滚

如果升级过程发生错误,进行回滚,首先查看应用的历史版本:

1$ helm history nginx -n mydlqcloud
2
3REVISION        UPDATED                         STATUS          CHART           APP VERSION     DESCRIPTION     
41               Fri May  8 06:46:56 2020        superseded      nginx-5.3.1     1.17.3          Install complete
52               Fri May  8 06:46:56 2020        deployed        nginx-5.3.1     1.17.3          Upgrade complete

知道 REVISION 号后就可以进行回滚操作:

1$ helm rollback nginx 1 -n mydlqcloud
2
3Rollback was a success! Happy Helming!

# 渲染模板

如果想查看通过指定的参数渲染的 Kubernetes 部署资源模板,可以通过下面命令:

1$ helm template bitnami/nginx -n mydlqcloud 

可以看到渲染的模板如下:

 1---
 2# Source: nginx/templates/svc.yaml
 3apiVersion: v1
 4kind: Service
 5metadata:
 6  name: RELEASE-NAME-nginx
 7  labels:
 8    app.kubernetes.io/name: nginx
 9    helm.sh/chart: nginx-5.3.1
10    app.kubernetes.io/instance: RELEASE-NAME
11    app.kubernetes.io/managed-by: Helm
12spec:
13  type: LoadBalancer
14  externalTrafficPolicy: "Cluster"
15  ports:
16    - name: http
17      port: 80
18      targetPort: http
19  selector:
20    app.kubernetes.io/name: nginx
21    app.kubernetes.io/instance: RELEASE-NAME
22---
23# Source: nginx/templates/deployment.yaml
24apiVersion: apps/v1
25kind: Deployment
26metadata:
27  name: RELEASE-NAME-nginx
28  labels:
29    app.kubernetes.io/name: nginx
30    helm.sh/chart: nginx-5.3.1
31    app.kubernetes.io/instance: RELEASE-NAME
32    app.kubernetes.io/managed-by: Helm
33spec:
34  selector:
35    matchLabels:
36      app.kubernetes.io/name: nginx
37      app.kubernetes.io/instance: RELEASE-NAME
38  replicas: 1
39  template:
40    metadata:
41      labels:
42        app.kubernetes.io/name: nginx
43        helm.sh/chart: nginx-5.3.1
44        app.kubernetes.io/instance: RELEASE-NAME
45        app.kubernetes.io/managed-by: Helm
46    spec:
47      containers:
48        - name: nginx
49          image: docker.io/bitnami/nginx:1.17.3-debian-10-r63
50          imagePullPolicy: "IfNotPresent"
51          ports:
52            - name: http
53              containerPort: 8080

---END---


  !版权声明:本博客内容均为原创,每篇博文作为知识积累,写博不易,转载请注明出处。