helm

598 阅读2分钟

部署helm

chart 是创建一个应用的信息集合,包括各种 Kubernetes 对象的配置模板、参数定义、依赖关系、文档说明等。chart 是应用部署的自包含逻辑单元。可以将 chart 想象成 apt、yum 中的软件安装包

release 是 chart 的运行实例,代表了一个正在运行的应用。当 chart 被安装到 Kubernetes 集群,就生成一个 release。chart 能够多次安装到同一个集群,每次安装都是一个 release。

wget https://storage.googleapis.com/kubernetes-helm/helm-v2.13.1-linux-amd64.tar.gz tar -zxvf helm-v2.13.1-linux-amd64.tar.gz cd linux-amd64/ cp helm /usr/local/bin/ 

部署tiller

apiVersion: v1 
kind: ServiceAccount 
metadata: 
  name: tiller 
  namespace: kube-system 
--- 
apiVersion: rbac.authorization.k8s.io/v1beta1 
kind: ClusterRoleBinding 
metadata: 
  name: tiller 
roleRef: apiGroup: rbac.authorization.k8s.io 
  kind: ClusterRole 
  name: cluster-admin 
subjects: 
  - kind: ServiceAccount 
    name: tiller 
    namespace: kube-system 

使用阿里云的镜像初始化helm

helm init --service-account tiller --skip-refresh --tiller-image=registry.cn-hangzhou.aliyuncs.com/google_containers/tiller:v2.13.1

移除谷歌仓库

helm repo remove stable

添加阿里云仓库

helm repo add stable https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts

使用Helm部署 dashboard

helm install stable/kubernetes-dashboard
helm fetch stable/kubernetes-dashboard #将chart下载到本地
helm install . \ #cd到本地的安装目录下
-n kubernetes-dashboard \ #release的名称
--namespace kube-system \ 
-f kubernetes-dashboard.yaml #变量文件

chart

  • NOTES.txt:chart 的 “帮助文本”。这会在用户运行 helm install 时显示给用户。

  • deployment.yaml:创建 Kubernetes deployment 的基本 manifest

  • service.yaml:为 deployment 创建 service 的基本 manifest

  • ingress.yaml: 创建 ingress 对象的资源清单文件

  • _helpers.tpl:放置模板助手的地方,可以在整个 chart 中重复使用

查看变量渲染后的template文件

helm get manifest traefik -n traefik-v2

内置变量

  • Release:这个对象描述了 release 本身。它里面有几个对象:

  • Release.Name:release 名称

  • Release.Time:release 的时间

  • Release.Namespace:release 的 namespace(如果清单未覆盖)

  • Release.Service:release 服务的名称(始终是 Tiller)。

  • Release.Revision:此 release 的修订版本号,从1开始累加。

  • Release.IsUpgrade:如果当前操作是升级或回滚,则将其设置为 true。

  • Release.IsInstall:如果当前操作是安装,则设置为 true。

values

  • chart 包中的 values.yaml 文件

  • 父 chart 包的 values.yaml 文件

  • 通过 helm install -f 参数传入的自定义的 yaml 文件

    {{ .Values.hello | default "Hello World" }} #values.yaml文件中hello值不存在则采用default定义的变量

    {{ if eq .Values.course.python "django" }}web: true{{ end }} {{ else if OTHER PIPELINE }} {{ else }} #值等于django,则添加web字段 #{{- 删除多余的空行,-}}删除换行符

    {{- with .Values.course}}xxx{{-end}} #指定value.yaml的位置,范围内的不需要写.Values.courese,此时无法访问父范围的其他对象

    courselist: {{- range .Values.courselist }}

    • {{ . | title | quote }} {{- end }} #遍历Values.courselist,title函数将首字母变成大写,quote函数加上双引号,lower转换为小写

    {{- range key,key, value := .Values.course }} {{ key }}: {{ value | quote }} {{- end }} #将key,key,value赋值course列表,进行遍历

    annotations: "helm.sh/resource-policy": keep #删除realease后保留的资源