部署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 value := .Values.course }} {{ key }}: {{ value | quote }} {{- end }} #将value赋值course列表,进行遍历
annotations: "helm.sh/resource-policy": keep #删除realease后保留的资源