上QQ阅读APP看书,第一时间看更新
3.5.3 其他文件
其余除了几个特殊的文件,剩下的都是Wordpress需要的资源文件,这里不一一介绍,挑选一个比较重要的deployment.yaml来了解。
[root@iZ8vb0qditk1qw27yu4k5nZ templates]# ll total 44 -rw-r--r-- 1 root root 7765 Aug 22 19:30 deployment.yaml -rw-r--r-- 1 root root 437 Aug 22 19:30 externaldb-secrets.yaml -rw-r--r-- 1 root root 3968 Aug 22 19:30 _helpers.tpl -rw-r--r-- 1 root root 911 Aug 22 19:30 ingress.yaml -rw-r--r-- 1 root root 2442 Aug 22 19:30 NOTES.txt -rw-r--r-- 1 root root 752 Aug 22 19:30 pvc.yaml -rw-r--r-- 1 root root 611 Aug 22 19:30 secrets.yaml -rw-r--r-- 1 root root 1464 Aug 22 19:30 svc.yaml drwxr-xr-x 2 root root 4096 Aug 22 19:30 tests -rw-r--r-- 1 root root 438 Aug 22 19:30 tls-secrets.yaml
Wordpress的主程序如下所示。
apiVersion: apps/v1 kind: Deployment metadata: name:{{template "wordpress.fullname".}} labels: app:"{{template "wordpress.fullname".}}" Chart:"{{template "wordpress.Chart".}}" release:{{.Release.Name | quote}} heritage:{{.Release.Service | quote}}
首先是通用的Deployment开头字段,这里使用了3.5.1节介绍的wordpress.fullname函数,将生成的名字作为Wordpress的名称,接下来几个是标准的标签,都是使用上面在_helpers.tpl文件内定义好的函数。
spec: selector: matchLabels: app: "{{ template "wordpress.fullname" . }}" release: {{ .Release.Name | quote }} {{- if .Values.updateStrategy }} strategy: {{ toYaml .Values.updateStrategy | nindent 4 }} {{- end }}
然后是spec字段,这里同样需要使用和上面一致的标签。然后判断是否需要设置更新策略,这里的更新策略比较复杂,首先更新策略是一段yaml文本,如下所示。
strategy: type: RollingUpdate rollingUpdate: maxSurge: 1 maxUnavailable: 0
由于values.yaml文件内设置的值必须是文本格式,所以再嵌入Deployment文件中时,使用了toYaml函数,这个函数可以将文本变更为yaml格式,然后使用nindent函数恢复原来的空行和空格,并将这些yaml信息完整匹配到Deployment信息中。
containers: - name: wordpress image: {{ template "wordpress.image" . }} imagePullPolicy: {{ .Values.image.pullPolicy | quote }} env: - name: ALLOW_EMPTY_PASSWORD value: {{ ternary "yes" "no" .Values.allowEmptyPassword | quote }} - name: MARIADB_HOST {{- if .Values.mariadb.enabled }} value: {{ template "mariadb.fullname" . }} {{- else }} value: {{ .Values.externalDatabase.host | quote }} {{- end }}
下面的信息是关于容器的字段,template"wordpress.image"调用定义的函数拼接出对应的全量镜像地址。环境变量字段使用了函数ternary,这个函数的格式为ternary"foo""bar"true。根据最后的判断条件返回结果,如果最后的判断条件是true,则返回第一个结果;如果最后的判断条件是false,则返回第二个结果。
在这个例子中,如果.Values.allowEmptyPassword设置为true,则这个字段会被yes填充;如果.Values.allowEmptyPassword设置为false,则这个字段会被no填充。后面的环境变量就是使用其他的预定义函数来生成对应的标签名。下面的部分基本使用了我们介绍的这些功能,这里不再赘述。