1

介绍

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/...

manshu
65 声望9 粉丝

clear is better than clever