上QQ阅读APP看书,第一时间看更新
2.7.3 简单的Hooks示例
Hooks在编写方式上与资源文件相同。因为它们是模板文件,用户可以使用所有的模板功能,包括.Values、.Release、.Template。
如下例所示,这个文件存放在templates/post-install-job.yaml。
apiVersion: batch/v1 kind: Job metadata: name: "{{.Release.Name}}" labels: app.Kubernetes.io/managed-by: {{.Release.Service | quote }} app.Kubernetes.io/instance: {{.Release.Name | quote }} app.Kubernetes.io/version: {{ .chart.AppVersion }} helm.sh/chart: "{{.chart.Name}}-{{.chart.Version}}" annotations: # This is what defines this resource as a hook. Without this line, the # job is considered part of the release. "helm.sh/hook": post-install "helm.sh/hook-weight": "-5" "helm.sh/hook-delete-policy": hook-succeeded spec: template: metadata: name: "{{.Release.Name}}" labels: app.Kubernetes.io/managed-by: {{.Release.Service | quote }} app.Kubernetes.io/instance: {{.Release.Name | quote }} helm.sh/chart: "{{.chart.Name}}-{{.chart.Version}}" spec: restartPolicy: Never containers: - name: post-install-job image: "alpine:3.3" command: ["/bin/sleep","{{default "10" .Values.sleepyTime}}"]
本例的资源与普通的资源最主要的区别在于,它声明了它是一个post-install hook。
annotations: "helm.sh/hook":post-install
当然,一个资源可以被定义成多个Hooks,比如:
annotations: "helm.sh/hook": post-install,post-upgrade
父Chart没有办法关闭子Chart声明的Hooks,当子Chart声明Hooks时,Hooks也会被执行。
我们可以为Hooks定义权重,这有助于构建确定性的执行顺序。权重使用以下注释定义。
annotations: "helm.sh/hook-weight": "5"
hook权重可以是正数或负数,但必须表示为字符串。当Tiller启动特定类型的Hooks执行周期时,它会对这些Hooks进行升序排列。
我们还可以定义何时删除相应Hooks资源的策略,例如使用以下注释定义Hooks删除策略:
annotations: "helm.sh/hook-delete-policy": hook-succeeded
用户可以选择一个或多个已定义的注释值。
·"hook-succeeded":指定Tiller应在Hooks成功执行后删除对应资源。
·"hook-failed":指定如果Hooks在执行期间失败,Tiller将删除对应的资源。
·"before-hook-creation":指定Tiller在启动新Hooks之前删除对应的资源。
默认情况下,Tiller将等待60s,以便在超时之前删除对应的资源。用户可以使用helm.sh/hook-delete-timeout注释更改该行为,该值是Tiller应该等待Hooks完全删除的秒数,值为0表示Tiller不会等待。