【kubernetes】Helm简单使用

Helm简单使用

简介

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

Repository(仓库) 是用来存放和共享 charts 的地方。它就像 Perl 的 CPAN 档案库网络 或是 Fedora 的 软件包仓库,只不过它是供 Kubernetes 包所使用的。

Release 是运行在 Kubernetes 集群中的 chart 的实例。一个 chart 通常可以在同一个集群中安装多次。每一次安装都会创建一个新的 release。以 MySQL chart为例,如果你想在你的集群中运行两个数据库,你可以安装该chart两次。每一个数据库都会拥有它自己的 release 和 release name。

在了解了上述这些概念以后,我们就可以这样来解释 Helm:

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

安装配置

安装helm3

1
sudo pacman -S helm

添加Azure charts仓库

1
2
helm repo add stable https://mirror.azure.cn/kubernetes/charts/
helm repo add incubator http://mirror.azure.cn/kubernetes/charts-incubator/

搜索

1
2
3
4
5
6
# 从 Artifact Hub 中查找并列出 helm charts
helm search hub
# 从你添加(使用 helm repo add)到本地 helm 客户端中的仓库中进行查找。该命令基于本地数据进行搜索,无需连接互联网
helm search repo

helm search repo wordpress

安装一个 helm 包

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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# 创建chart
$ helm create nginx

# 查看 chart 中的可配置选项
$ helm show values nginx

# 修改nginx/Chart.yaml中appVersion: "1.21"
$ helm package nginx
Successfully packaged chart and saved it to: /home/xinchen/nginx-0.1.0.tgz

# helm install nginx nginx.tar -n default
# helm install nginx https://example.com/charts/nginx.tar

# 尝试部署,并未真正部署
$ helm install nginx nginx/ --dry-run --debug -n default
$ helm install nginx nginx/ -n default

$ helm list
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
nginx default 1 2022-02-09 05:49:30.314746649 +0800 CST deployed nginx-0.1.0 1.21

# 查看状态
$ helm status nginx
NAME: nginx
LAST DEPLOYED: Wed Feb 9 05:24:00 2022
NAMESPACE: default
STATUS: deployed
REVISION: 1
NOTES:
1. Get the application URL by running these commands:
export POD_NAME=$(kubectl get pods --namespace default -l "app.kubernetes.io/name=nginx,app.kubernetes.io/instance=nginx" -o jsonpath="{.items[0].metadata.name}")
export CONTAINER_PORT=$(kubectl get pod --namespace default $POD_NAME -o jsonpath="{.spec.containers[0].ports[0].containerPort}")
echo "Visit http://127.0.0.1:8080 to use your application"
kubectl --namespace default port-forward $POD_NAME 8080:$CONTAINER_PORT

# 修改nginx/Chart.yaml中version: 0.2.0
$ helm package nginx
Successfully packaged chart and saved it to: /home/xinchen/nginx-0.2.0.tgz

# 升级
$ helm upgrade nginx nginx-0.2.0.tgz -n default --dry-run --debug # 尝试升级,并未真正升级
$ helm upgrade nginx nginx-0.2.0.tgz
$ helm list
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
nginx default 2 2022-02-09 05:58:19.435396187 +0800 CST deployed nginx-0.2.0 1.21

# 回滚 helm rollback [RELEASE] [REVISION]
# 回滚命令的第一个参数是发布的名称,第二是修订(版本)号,如果省略此参数,会回滚到上一个版本
# 要查看修订号,执行'helm history RELEASE'
$ helm rollback ngin
$ helm list
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
nginx default 3 2022-02-09 06:02:25.224998651 +0800 CST deployed nginx-0.1.0 1.21


# 卸载
# helm uninstall nginx --keep-history 保留历史记录
$ helm uninstall nginx
$ helm list --all

快速访问Pod小技巧

1
2
3
export POD_NAME=$(kubectl get pods --namespace default -l "app=nginx" -o jsonpath="{.items[0].metadata.name}")
export CONTAINER_PORT=$(kubectl get pod --namespace default $POD_NAME -o jsonpath="{.spec.containers[0].ports[0].containerPort}")
kubectl --namespace default port-forward --address 0.0.0.0 $POD_NAME 8080:$CONTAINER_PORT

参考文档

Helm官方文档

helm3 与helm2对比,官方文档