helm
是k8s集群上的包管理工具,相似centos上的yum
,ubuntu上的apt-get
。node
对于应用发布者而言,能够经过
helm
打包应用,管理应用依赖关系,管理应用版本并发布应用到软件仓库。linux
对于使用者而言,使用
helm
后不用须要了解kubernetes的yaml
语法并编写应用部署文件,能够经过helm
下载并在kubernetes上安装须要的应用。nginx
除此之外,
helm
还提供了kubernetes上的软件部署,删除,升级,回滚应用的强大功能。git
helm
: kubernetes的应用打包工具,也是命令行工具的名称。程序员
tiller
: helm的服务端,部署在kubernetes集群中,用于处理helm的相关命令。github
chart
: helm的打包格式,内部包含了一组相关的kubernetes资源。web
repoistory
: helm的软件仓库,repository本质上是一个web服务器,该服务器保存了chart软件包以供下载,并有提供一个该repository的chart包的清单文件以供查询。在使用时,helm能够对接多个不一样的Repository。docker
release
: 使用helm install命令在kubernetes集群中安装的Chart称为Release。json
在资源管理方面名, helm
和docker
管理方式相似。ubuntu
helm
至关于docker
的客户端
tiller
至关于docker
的服务端
chart
至关于docker
的镜像资源
repoistory
至关于docker
的远程仓库
release
至关于运行的容器
访问地址:github.com/helm/helm/r…,选择安装版本。
由于当前在Mac上安装,因此下载的MacOS amd64
,在linux平台安装方式一致。
wget https://get.helm.sh/helm-v2.14.3-darwin-amd64.tar.gz
tar -zxvf helm-v2.14.3-darwin-amd64.tar.gz
mv darwin-amd64/helm /usr/local/bin
复制代码
# 初始化tiller服务端环境
helm init --upgrade --tiller-image cnych/tiller:v2.14.3
复制代码
helm init
会拉取sapcc/tiller
,可是域名https://gcr.io
你可能没法访问,可使用cnych/tiller
代替。
helm
的版本须要和镜像的版本相同,若是cnych/tiller
的标签中没有和helm
对应的版本,就只能下载sapcc/tiller
对应的版本,而且docker tag sapcc/tiller:vxx cnych/tiller:vxx
。
# 使用阿里云镜像安装并把默认仓库设置为阿里云上的镜像仓库
$ helm init --upgrade --tiller-image registry.cn-hangzhou.aliyuncs.com/google_containers/tiller:v2.14.3 --stable-repo-url https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
复制代码
检查安装状况
# 验证 tiller 是否安装成功
kubectl -n kube-system get pods|grep tiller
# 查看当前Client和Server的版本
helm version
# 卸载已经部署的Tiller
helm reset
复制代码
经过一个完整的示例来学习如何使用helm
建立、打包、分发、安装、升级及回退kubernetes应用。
helm create mychart
复制代码
执行tree
命令
├── Chart.yaml
├── charts
├── templates
│ ├── NOTES.txt
│ ├── _helpers.tpl
│ ├── deployment.yaml
│ ├── ingress.yaml
│ ├── service.yaml
│ └── tests
│ └── test-connection.yaml
└── values.yaml
3 directories, 8 file
复制代码
Chart.yaml
用于描述这个Chart
的相关信息,包括名字、描述信息以及版本等。
values.yaml
用于存储templates
目录中模板文件中用到变量的值。
NOTES.txt
用于介绍Chart
部署后的一些信息,例如:如何使用这个Chart
、列出缺省的设置等。
templates
目录下是yaml
文件的模板,该模板文件遵循Go template
语法。
templates目录下yaml文件模板的值默认都是在values.yaml
里定义的,好比在deployment.yaml
中定义的容器镜像image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
其中的.Values.image.repository
的值就是在values.yaml
里定义的nginx
,.Values.image.tag
的值就是stable
。
若是你须要了解更多关于Go模板的相关信息,能够查看Hugo (gohugo.io) 的一个关于Go模板的介绍 (gohugo.io/templates/g…)。
执行 cat mychart/Chart.yaml
apiVersion: v1
appVersion: "1.0"
description: A Helm chart for kubernetes
name: mychart
version: 0.1.0
复制代码
执行 cat mychart/values.yaml
# Default values for mychart.
# This is a YAML-formatted file.
# Declare variables to be passed into your templates.
replicaCount: 1
image:
repository: nginx
tag: stable
pullPolicy: IfNotPresent
service:
type: ClusterIP
port: 80
ingress:
enabled: false
annotations: {}
# kubernetes.io/ingress.class: nginx
# kubernetes.io/tls-acme: "true"
path: /
hosts:
- chart-example.local
tls: []
# - secretName: chart-example-tls
# hosts:
# - chart-example.local
resources: {}
# We usually recommend not to specify default resources and to leave this as a conscious
# choice for the user. This also increases chances charts run on environments with little
# resources, such as Minikube. If you do want to specify resources, uncomment the following
# lines, adjust them as necessary, and remove the curly braces after 'resources:'.
# limits:
# cpu: 100m
# memory: 128Mi
# requests:
# cpu: 100m
# memory: 128Mi
nodeSelector: {}
tolerations: []
affinity: {}
复制代码
执行 helm lint mychart/
,若是文件格式错误,能够根据提示进行修改。
==> Linting .
[INFO] Chart.yaml: icon is recommended
1 chart(s) linted, no failures
复制代码
在mychart
目录中执行 helm package . --debug
Successfully packaged chart and saved it to: /home/k8s/mychart-0.1.0.tgz
[debug] Successfully saved /home/k8s/mychart-0.1.0.tgz to /home/k8s/.helm/repository/local
复制代码
# 启动,默认端口为8879
helm serve &
# 加入仓库列表中
helm repo add local http://127.0.0.1:8879
# 查看当前的仓库状况
helm repo list
复制代码
查看chart:helm search mychart
NAME CHART VERSION APP VERSION DESCRIPTION
local/mychart 0.1.0 1.0 A Helm chart for kubernetes
复制代码
将chart部署到k8s集群中。
helm install local/mychart --name mike-test
复制代码
涉及到镜像下载,须要等待一下子。
NAME: mike-test
LAST DEPLOYED: Thu Aug 15 15:18:05 2019
NAMESPACE: default
STATUS: DEPLOYED
RESOURCES:
==> v1/Deployment
NAME READY UP-TO-DATE AVAILABLE AGE
mike-test-mychart 0/1 1 0 0s
==> v1/Pod(related)
NAME READY STATUS RESTARTS AGE
mike-test-mychart-799d666684-k8c49 0/1 ContainerCreating 0 0s
==> v1/Service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
mike-test-mychart ClusterIP 10.111.129.121 <none> 80/TCP 0s
NOTES:
1. Get the application URL by running these commands:
export POD_NAME=$(kubectl get pods --namespace default -l "app.kubernetes.io/name=mychart,app.kubernetes.io/instance=mike-test" -o jsonpath="{.items[0].metadata.name}")
echo "Visit http://127.0.0.1:8080 to use your application"
kubectl port-forward $POD_NAME 8080:80
复制代码
执行👆的NOTES的脚本便可在本地访问Nginx。
使用helm ls
查看当前已经部署的chart
的状况.
NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
mike-test 1 Thu Aug 15 15:18:05 2019 DEPLOYED mychart-0.1.0 1.0 default
复制代码
升级和回退状况可经过REVISION
来判断。
修改Chart.yaml
,将版本号从0.0.1
修改成1.0.0
, 而后使用helm package
命令打包并发布到本地仓库。
查看当前chart
的版本。
$ mychart helm search mychart -l
NAME CHART VERSION APP VERSION DESCRIPTION
local/mychart 1.0.0 1.0 A Helm chart for kubernetes
local/mychart 0.1.0 1.0 A Helm chart for kubernetes
复制代码
部署新版本的chart
$ helm upgrade mike-test local/mychart
Release "mike-test" has been upgraded.
LAST DEPLOYED: Thu Aug 15 15:33:02 2019
NAMESPACE: default
STATUS: DEPLOYED
RESOURCES:
==> v1/Deployment
NAME READY UP-TO-DATE AVAILABLE AGE
testapi-mychart 0/1 1 0 0s
==> v1/Pod(related)
NAME READY STATUS RESTARTS AGE
testapi-mychart-57449f4fbc-sv79v 0/1 ContainerCreating 0 0s
==> v1/Service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
testapi-mychart ClusterIP 10.100.150.75 <none> 80/TCP 0s
NOTES:
1. Get the application URL by running these commands:
export POD_NAME=$(kubectl get pods --namespace default -l "app.kubernetes.io/name=mychart,app.kubernetes.io/instance=testapi" -o jsonpath="{.items[0].metadata.name}")
echo "Visit http://127.0.0.1:8080 to use your application"
kubectl port-forward $POD_NAME 8080:80
复制代码
使用helm
查看,REVISION
变动为2,CHART
变动成为mychart-1.0.0
,版本发生改变。
$ helm ls
NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
mike-test 2 Thu Aug 15 15:34:41 2019 DEPLOYED mychart-1.0.0 1.0 default
复制代码
查看Release
变更状况
$ helm history mike-test
REVISION UPDATED STATUS CHART DESCRIPTION
1 Thu Aug 15 15:18:05 2019 SUPERSEDED mychart-0.1.0 Install complete
2 Thu Aug 15 15:34:41 2019 DEPLOYED mychart-1.0.0 Upgrade complete
复制代码
使用helm rollback testapi 1
回退到指定的版本
$ helm rollback mike-test 1
$ helm history mike-test
REVISION UPDATED STATUS CHART DESCRIPTION
1 Thu Aug 15 15:18:05 2019 SUPERSEDED mychart-0.1.0 Install complete
2 Thu Aug 15 15:34:41 2019 SUPERSEDED mychart-1.0.0 Upgrade complete
3 Thu Aug 15 15:40:14 2019 DEPLOYED mychart-0.1.0 Rollback to 1
$ helm list
NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
mike-test 3 Thu Aug 15 15:40:14 2019 DEPLOYED mychart-0.1.0(版本已变动) 1.0 default
复制代码
helm
做为k8s
应用的包管理以及部署工具,提供了应用打包,发布,部署,版本管理(升级,回滚)等功能。 helm
以软件的包的形式来管理k8s
集群,对用户比较友好。
一个探讨技术,金融,赚钱
的小圈子,为你提供最有味道
的内容,日日更新!