Helm 是查找、分享和使用软件构建 Kubernetes 的最优方式。

Helm 帮助管理 Kubernetes 应用—— Helm Chart,即使是最复杂的 Kubernetes 应用程序,都可以帮助定义,安装和升级。

概念

  1. chart 创建Kubernetes应用程序所必需的一组信息。

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

  2. config 包含了可以合并到打包的chart中的配置信息,用于创建一个可发布的对象。

  3. release 是一个与特定配置相结合的chart的运行实例。

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

三大概念

安装

1
brew install helm

列举chart仓库

1
2
3
helm repo list
NAME    URL
piaohua https://piaohua.github.io/helm-charts/

基于github搭建helm repository

配置仓库

微软仓库(http://mirror.azure.cn/kubernetes/charts/)

阿里云仓库(https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts )

推荐仓库(https://charts.bitnami.com/bitnami )

  1. 添加仓库
1
2
3
4
5
6
7
8
helm repo add bitnami https://charts.bitnami.com/bitnami
"bitnami" has been added to your repositories

helm repo list
NAME    URL
piaohua https://piaohua.github.io/helm-charts/
bitnami https://charts.bitnami.com/bitnami

  1. 在仓库中搜索chart
1
2
3
4
5
6
helm search repo nginx
NAME                                    CHART VERSION   APP VERSION     DESCRIPTION
bitnami/nginx                           16.0.6          1.25.5          NGINX Open Source is a web server that can be a...
bitnami/nginx-ingress-controller        11.1.1          1.10.1          NGINX Ingress Controller is an Ingress controll...
bitnami/nginx-intel                     2.1.15          0.4.9           DEPRECATED NGINX Open Source for Intel is a lig...

  1. 删除仓库
1
2
3
4
5
6
7
helm repo remove bitnami
"bitnami" has been removed from your repositories

helm repo list
NAME    URL
piaohua https://piaohua.github.io/helm-charts/

使用部署

  1. 从仓库中搜索可部署安装的nginx chart
1
2
3
4
5
6
helm search repo nginx
NAME                                    CHART VERSION   APP VERSION     DESCRIPTION
bitnami/nginx                           16.0.6          1.25.5          NGINX Open Source is a web server that can be a...
bitnami/nginx-ingress-controller        11.1.1          1.10.1          NGINX Ingress Controller is an Ingress controll...
bitnami/nginx-intel                     2.1.15          0.4.9           DEPRECATED NGINX Open Source for Intel is a lig...

  1. 选择 bitnami/nginx chart 安装
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
helm install nginx-test bitnami/nginx
NAME: nginx-test
LAST DEPLOYED: Sun May  5 22:12:35 2024
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
CHART NAME: nginx
CHART VERSION: 16.0.6
APP VERSION: 1.25.5

** Please be patient while the chart is being deployed **
NGINX can be accessed through the following DNS name from within your cluster:

    nginx-test.default.svc.cluster.local (port 80)

To access NGINX from outside the cluster, follow the steps below:

1. Get the NGINX URL by running these commands:

  NOTE: It may take a few minutes for the LoadBalancer IP to be available.
        Watch the status with: 'kubectl get svc --namespace default -w nginx-test'

    export SERVICE_PORT=$(kubectl get --namespace default -o jsonpath="{.spec.ports[0].port}" services nginx-test)
    export SERVICE_IP=$(kubectl get svc --namespace default nginx-test -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
    echo "http://${SERVICE_IP}:${SERVICE_PORT}"

WARNING: There are "resources" sections in the chart not set. Using "resourcesPreset" is not recommended for production. For production installations, please set the following values according to your workload needs:
  - cloneStaticSiteFromGit.gitSync.resources
  - resources
+info https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/

可以看到安装成功后的输出,默认80端口

  1. 根据提示可以使用如下命令监听服务状态
1
2
3
kubectl get svc --namespace default -w nginx-test
NAME         TYPE           CLUSTER-IP    EXTERNAL-IP   PORT(S)                      AGE
nginx-test   LoadBalancer   10.43.39.30   192.168.5.3   80:30195/TCP,443:30205/TCP   8m40s
  1. 安装成功后kubectl查看状态
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
kubectl get pods,rs,svc,deployment -n default
NAME                              READY   STATUS    RESTARTS   AGE
pod/nginx-test-54dc4fd9d4-skj25   1/1     Running   0          26m

NAME                                    DESIRED   CURRENT   READY   AGE
replicaset.apps/nginx-test-54dc4fd9d4   1         1         1       26m

NAME                 TYPE           CLUSTER-IP    EXTERNAL-IP   PORT(S)                      AGE
service/kubernetes   ClusterIP      10.43.0.1     <none>        443/TCP                      47m
service/nginx-test   LoadBalancer   10.43.39.30   192.168.5.3   80:30195/TCP,443:30205/TCP   26m

NAME                         READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/nginx-test   1/1     1            1           26m

可以看到nginx-test svc的类型为LoadBalancer, 且已经绑定宿主主机端口.

  1. 安装成功后helm查看Chart列表
1
2
3
helm list
NAME            NAMESPACE       REVISION        UPDATED                                 STATUS          CHART           APP VERSION
nginx-test      default         1               2024-05-05 22:12:35.906912 +0800 CST    deployed        nginx-16.0.6    1.25.5
  1. 安装成功后helm查看Chart状态
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
helm status nginx-test
NAME: nginx-test
LAST DEPLOYED: Sun May  5 22:12:35 2024
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
CHART NAME: nginx
CHART VERSION: 16.0.6
APP VERSION: 1.25.5

** Please be patient while the chart is being deployed **
NGINX can be accessed through the following DNS name from within your cluster:

    nginx-test.default.svc.cluster.local (port 80)

To access NGINX from outside the cluster, follow the steps below:

1. Get the NGINX URL by running these commands:

  NOTE: It may take a few minutes for the LoadBalancer IP to be available.
        Watch the status with: 'kubectl get svc --namespace default -w nginx-test'

    export SERVICE_PORT=$(kubectl get --namespace default -o jsonpath="{.spec.ports[0].port}" services nginx-test)
    export SERVICE_IP=$(kubectl get svc --namespace default nginx-test -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
    echo "http://${SERVICE_IP}:${SERVICE_PORT}"

WARNING: There are "resources" sections in the chart not set. Using "resourcesPreset" is not recommended for production. For production installations, please set the following values according to your workload needs:
  - cloneStaticSiteFromGit.gitSync.resources
  - resources
+info https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/

输出状态结果和安装成功结果一样

  1. 访问nginx服务
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
curl -I http://localhost:80
HTTP/1.1 200 OK
Server: nginx
Date: Sun, 05 May 2024 14:16:49 GMT
Content-Type: text/html
Content-Length: 615
Last-Modified: Tue, 16 Apr 2024 18:30:46 GMT
Connection: keep-alive
ETag: "661ec3d6-267"
X-Frame-Options: SAMEORIGIN
Accept-Ranges: bytes

或者在浏览器中打开: http://localhost

  1. 查看dokcer镜像和容器列表
1
2
3
4
5
6
7
8
docker images -a
REPOSITORY                         TAG                   IMAGE ID       CREATED         SIZE
bitnami/nginx                      1.25.5-debian-12-r0   23b46c97c65f   2 weeks ago     184MB
rancher/klipper-lb                 v0.4.4                af74bd845c4a   11 months ago   12MB
rancher/local-path-provisioner     v0.0.24               b29384aeb4b1   13 months ago   40.1MB
rancher/mirrored-metrics-server    v0.6.3                817bbe3f2e51   13 months ago   68.9MB
rancher/mirrored-coredns-coredns   1.10.1                ead0a4a53df8   15 months ago   53.6MB
rancher/mirrored-pause             3.6                   6270bb605e12   2 years ago     683kB

可以看到安装后,多出来前面两个镜像。

容器列表

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
docker ps
CONTAINER ID   IMAGE                              COMMAND                   CREATED          STATUS                      PORTS     NAMES
46e3c9462277   23b46c97c65f                       "/opt/bitnami/script…"   10 minutes ago   Up 10 minutes                         k8s_nginx_nginx-test-54dc4fd9d4-skj25_default_7498f914-6b7c-4795-950a-58ed2e4e8f43_0
6f28efe9598c   af74bd845c4a                       "entry"                   11 minutes ago   Up 11 minutes                         k8s_lb-tcp-443_svclb-nginx-test-2c41a801-gh9lw_kube-system_c72ae284-6301-49d7-bdfe-918fd0245591_0
a3ea4e95f7ee   rancher/klipper-lb                 "entry"                   11 minutes ago   Up 11 minutes                         k8s_lb-tcp-80_svclb-nginx-test-2c41a801-gh9lw_kube-system_c72ae284-6301-49d7-bdfe-918fd0245591_0
0141a5471677   rancher/mirrored-pause:3.6         "/pause"                  11 minutes ago   Up 11 minutes                         k8s_POD_svclb-nginx-test-2c41a801-gh9lw_kube-system_c72ae284-6301-49d7-bdfe-918fd0245591_0
439c4ae9bc63   rancher/mirrored-pause:3.6         "/pause"                  11 minutes ago   Up 11 minutes                         k8s_POD_nginx-test-54dc4fd9d4-skj25_default_7498f914-6b7c-4795-950a-58ed2e4e8f43_0
785c59542d32   rancher/mirrored-metrics-server    "/metrics-server --c…"   30 minutes ago   Up 30 minutes                         k8s_metrics-server_metrics-server-67c658944b-kqjgk_kube-system_86610a87-3816-4da6-9a68-7e49e8588a7c_0
4c4551704157   rancher/mirrored-coredns-coredns   "/coredns -conf /etc…"   31 minutes ago   Up 31 minutes                         k8s_coredns_coredns-6799fbcd5-pp8sr_kube-system_ed8eaa59-eaa6-4dd4-a3be-1cae57bd5fd0_0
01f1e74d85fb   rancher/local-path-provisioner     "local-path-provisio…"   31 minutes ago   Up 31 minutes                         k8s_local-path-provisioner_local-path-provisioner-84db5d44d9-7qlrp_kube-system_1906322a-f01a-4174-a728-c622d958b212_0
e71408df6a74   rancher/mirrored-pause:3.6         "/pause"                  31 minutes ago   Up 31 minutes                         k8s_POD_metrics-server-67c658944b-kqjgk_kube-system_86610a87-3816-4da6-9a68-7e49e8588a7c_0
6a3c855075bf   rancher/mirrored-pause:3.6         "/pause"                  31 minutes ago   Up 31 minutes                         k8s_POD_local-path-provisioner-84db5d44d9-7qlrp_kube-system_1906322a-f01a-4174-a728-c622d958b212_0
32a27eaf5489   rancher/mirrored-pause:3.6         "/pause"                  31 minutes ago   Up 31 minutes                         k8s_POD_coredns-6799fbcd5-pp8sr_kube-system_ed8eaa59-eaa6-4dd4-a3be-1cae57bd5fd0_0

部署nginx后,容器多出来前面5个。

卸载

1
helm uninstall nginx-test

卸载后,对应的pod,svc都会一起删除

自定义部署

1
2
3
4
5
6
7
8
# 生成values.yaml文件
helm inspect values bitnami/nginx > values.yaml

# 编辑配置自定义
vim values.yaml
 
# 使用配置文件安装部署
helm install mywebserver bitnami/nginx -f values.yaml

参考