介绍
Kubernetes作为一个应用部署和运行平台,但并没有抽象出应用这一层的概念,用户在部署应用时,需要考虑到多个k8s对象(Deployment、Service、ConfigMap、pvc等),有比较高的应用部署门槛。
helm在此基础上整合和屏蔽k8s复杂的应用对象,抽象出应用部署chart包的概念,再加管理chart包的repo仓库,用户可以像使用yum一样,在k8s平台上部署和管理应用。
和helm v2的区别
去除tiller
v2 版本的tiller需要拥有较高的权限,带来了一定的安全风险,并且tiller的使用,增加了局限性,如release的命名必须唯一。tiller的功能现在完全可以通过k8s apiserver来完成,没有必要增加tiller组件
改进的upgrade策略
v2版本指对比old manifest和new manifest,可能会导致用户手动对应用的更新(live state)被忽略,如:kubectl scale --replicas=0 deployment/myapp
。新的更新策略会考虑old manifest,live state和new manifest,更符合用户的使用用途。
release name局限到namespaces内
v2版本,release name 存储在tiller的namespace中,导致release虽然在不通的ns中,release name 都不能重复。v3中,release name 存储在应用的ns中,因此 helm list只会展示当前ns中的release。
使用secret存储release info
v2版本采用configmap存储release info,v3 改用secret,有利于更好的对chart信息的保护
合并requirements.yaml 到 Chart.yaml
支持docker registry
XDG 基础目录
v2版本信息存储在~/.helm中,helm 3支持这几个环境定义配置、数据、环境的目录
- $XDG_CACHE_HOME
- $XDG_CONFIG_HOME
- $XDG_DATA_HOME
下面这几个环境变量对plugin也适用
- $HELM_PATH_CACHE for the cache path
- $HELM_PATH_CONFIG for the config path
- $HELM_PATH_DATA for the data path
install
[root@master01 msxu]# wget https://get.helm.sh/helm-v3.2.1-linux-amd64.tar.gz && tar xzvf helm-v3.2.1-linux-amd64.tar.gz
[root@master01 msxu]# cp helm-v3.2.1/helm /usr/local/bin
案例
repo
// 公共repo
[root@master01 msxu]# helm repo add apphub https://apphub.aliyuncs.com
// harbor仓库,此处container为harbor仓库中的项目
[root@master01 msxu]# helm repo add container https://hub.personal.com/chartrepo/container
[root@master01 msxu]# helm repo list
NAME URL
stable https://apphub.aliyuncs.com
container https://hub.personal.com/chartrepo/container
创建应用
[root@master01 .helm]# helm search guestbook
NAME CHART VERSION APP VERSION DESCRIPTION
stable/guestbook 0.2.0 A Helm chart to deploy Guestbook three tier web...
stable/guestbook-kruise 0.3.0 A Helm chart to deploy Guestbook three tier web...
[root@master01 .helm]#
[root@master01 .helm]# helm install guestbook stable/guestbook
NAME: guestbook
LAST DEPLOYED: 2020-05-07 16:25:39.643044595 +0800 CST m=+0.979151956
NAMESPACE: default
STATUS: deployed
[root@master01 .helm]#
[root@master01 .helm]# helm list
NAME NAMESPACE REVISION UPDATED STATUS CHART
guestbook default 1 2020-05-07 16:25:39.643044595 +0800 CST deployed guestbook-0.2.0
[root@master01 msxu]# helm uninstall guestbook
release "guestbook" uninstalled
更新
[root@master01 msxu]# helm upgrade guestbook stable/guestbook --set service.type=NodePort
Release "guestbook" has been upgraded. Happy Helming!
NAME: guestbook
LAST DEPLOYED: 2020-05-07 17:15:38.261101388 +0800 CST
NAMESPACE: default
STATUS: deployed
[root@master01 msxu]# helm history guestbook
REVISION UPDATED STATUS CHART APP VERSION DESCRIPTION
1 2020-05-07 16:25:39.643044595 +0800 CST superseded guestbook-0.2.0 Install complete
2 2020-05-07 17:15:38.261101388 +0800 CST deployed guestbook-0.2.0 Upgrade complete
# helm3中应用版本信息默认放在和应用相同的ns下,并记录在secret中
[root@master01 msxu]# kubectl get secret
NAME TYPE DATA AGE
sh.helm.release.v1.guestbook.v1 helm.sh/release.v1 1 2d22h
回滚
[root@master01 msxu]#
[root@master01 msxu]# helm rollback guestbook 1
Rollback was a success! Happy Helming!
[root@master01 msxu]# helm list
NAME NAMESPACE REVISION UPDATED STATUS CHART
guestbook default 3 2020-05-07 17:19:05.366400699 +0800 CST deployed guestbook-0.2.0
[root@master01 msxu]# helm history guestbook
REVISION UPDATED STATUS CHART APP VERSION DESCRIPTION
1 2020-05-07 16:25:39.643044595 +0800 CST superseded guestbook-0.2.0 Install complete
2 2020-05-07 17:15:38.261101388 +0800 CST superseded guestbook-0.2.0 Upgrade complete
3 2020-05-07 17:19:05.366400699 +0800 CST deployed guestbook-0.2.0 Rollback to 1
下载chart包,本地部署
[root@master01 msxu]# helm pull stable/guestbook
[root@master01 msxu]# tar xzvf guestbook-0.2.0.tgz
[root@master01 msxu]# ls
Chart.yaml README.md templates values.yaml
[root@master01 guestbook]# tree
.
├── Chart.yaml
├── README.md
├── templates
│ ├── guestbook-deployment.yaml
│ ├── guestbook-service.yaml
│ ├── _helpers.tpl
│ ├── NOTES.txt
│ ├── redis-master-deployment.yaml
│ ├── redis-master-service.yaml
│ ├── redis-slave-deployment.yaml
│ └── redis-slave-service.yaml
└── values.yaml
1 directory, 11 files
[root@master01 msxu]# helm install guestbook guestbook //本地包部署
NAME: guestbook
LAST DEPLOYED: 2020-05-07 21:33:19.896874783 +0800 CST m=+0.097981276
NAMESPACE: default
STATUS: deployed
chart包管理
# 本地创建一个 Chart
helm create <Chart 名称>
// 安装helm-push插件,可能会卡
[root@master01 msxu]# helm plugin install https://github.com/chartmuseum/helm-push.git
# 推送 Chart 目录
helm push <Chart 名称> <本地仓库名称>
# 或者推送 Chart 压缩包
helm push <Chart 名称>-<Chart 版本>.tgz <本地仓库名称>
# 从线上 Chart 仓库更新本地 Chart 索引
helm repo update
# 拉取 Chart
helm fetch <本地仓库名称>/<Chart 名称> --version <Chart 版本>
# 或者直接安装 Chart
helm install -f values.yaml <本地仓库名称>/<Chart 名称> --version <Chart 版本>
helm镜像
docker.io/alpine/helm:3.2.0
// 查看、添加repo
[root@master01 ~]# docker run -v /root/.kube/:/root/.kube/ docker.io/alpine/helm:3.2.0 --kubeconfig /root/.kube/config repo list
Error: no repositories to show
[root@master01 ~]# docker run -v /root/.kube/:/root/.kube/ docker.io/alpine/helm:3.2.0 --kubeconfig /root/.kube/config repo add apphub https://apphub.aliyuncs.com
"apphub" has been added to your repositories
// 安装、查看应用
[root@master01 ~]# docker run -v /root/.kube/:/root/.kube/ -v /home/msxu:/home/msxu docker.io/alpine/helm:3.2.0 --kubeconfig /root/.kube/config install guestbook /home/msxu/guestbook-0.2.0.tgz
NAME: guestbook
LAST DEPLOYED: Fri May 8 09:25:56 2020
NAMESPACE: default
STATUS: deployed
REVISION: 1
[root@master01 ~]# docker run -v /root/.kube/:/root/.kube/ -v /home/msxu:/home/msxu docker.io/alpine/helm:3.2.0 --kubeconfig /root/.kube/config list
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
guestbook default 1 2020-05-08 09:25:56.924441076 +0000 UTC deployed guestbook-0.2.0
参考: https://www.infoq.cn/article/...
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。