From 484e68ce61721382b0092a58bb682cbeca1b6481 Mon Sep 17 00:00:00 2001 From: yangchuanhu Date: Mon, 8 Oct 2018 16:07:52 +0800 Subject: [PATCH] [add] Helm Article --- SUMMARY.md | 2 + docs/41.ingress config.md | 2 +- ...50\346\204\217\344\272\213\351\241\271.md" | 259 +++++++++ docs/49.Helm Hooks.md | 142 +++++ ...24\347\224\250\347\244\272\344\276\213.md" | 513 ++++++++++++++++++ docs/images/wordpress-ui.jpg | Bin 0 -> 87057 bytes mychart/templates/configmap.yaml | 10 +- 7 files changed, 922 insertions(+), 6 deletions(-) create mode 100644 "docs/48.Helm\346\250\241\346\235\277\344\271\213\345\205\266\344\273\226\346\263\250\346\204\217\344\272\213\351\241\271.md" create mode 100644 docs/49.Helm Hooks.md create mode 100644 "docs/50.Helm \351\203\250\347\275\262\345\272\224\347\224\250\347\244\272\344\276\213.md" create mode 100644 docs/images/wordpress-ui.jpg diff --git a/SUMMARY.md b/SUMMARY.md index e889894..77a3cf7 100644 --- a/SUMMARY.md +++ b/SUMMARY.md @@ -71,3 +71,5 @@ * [Helm 模板之模板函数与管道](docs/45.Helm模板之模板函数与管道.md) * [Helm 模板之控制流程](docs/46.Helm模板之控制流程.md) * [Helm 模板之命名模板](docs/47.Helm模板之命名模板.md) +* [Helm 模板之其他注意事项](docs/48.Helm模板之其他注意事项.md) +* [Helm Hooks](docs/49.Helm Hooks.md) diff --git a/docs/41.ingress config.md b/docs/41.ingress config.md index 94e7523..cfb3d8c 100644 --- a/docs/41.ingress config.md +++ b/docs/41.ingress config.md @@ -21,7 +21,7 @@ defaultEntryPoints = ["http", "https"] [entryPoints.http] address = ":80" [entryPoints.http.redirect] - entryPoint = "https + entryPoint = "https" [entryPoints.https] address = ":443" [entryPoints.https.tls] diff --git "a/docs/48.Helm\346\250\241\346\235\277\344\271\213\345\205\266\344\273\226\346\263\250\346\204\217\344\272\213\351\241\271.md" "b/docs/48.Helm\346\250\241\346\235\277\344\271\213\345\205\266\344\273\226\346\263\250\346\204\217\344\272\213\351\241\271.md" new file mode 100644 index 0000000..590a1ec --- /dev/null +++ "b/docs/48.Helm\346\250\241\346\235\277\344\271\213\345\205\266\344\273\226\346\263\250\346\204\217\344\272\213\351\241\271.md" @@ -0,0 +1,259 @@ +# 48. Helm模板之其他注意事项 +上节课我们学习了**命名模板**的使用,命名模板是 Helm 模板中非常重要的一个功能,在我们实际开发 Helm Chart 包的时候非常有用,到这里我们基本上就把 Helm 模板中经常使用到的一些知识点和大家介绍完了。但是仍然还是有一些在开发中值得我们注意的一些知识点,比如 NOTES.txt 文件的使用、子 Chart 的使用、全局值的使用,这节课我们就来和大家一起了解下这些知识点。 + +## NOTES.txt 文件 +我们前面在使用 helm install 命令的时候,Helm 都会为我们打印出一大堆介绍信息,这样当别的用户在使用我们的 chart 包的时候就可以根据这些注释信息快速了解我们的 chart 包的使用方法,这些信息就是编写在 NOTES.txt 文件之中的,这个文件是纯文本的,但是它和其他模板一样,具有所有可用的普通模板函数和对象。 + +现在我们在前面的示例中 templates 目录下面创建一个 NOTES.txt 文件: +```shell +Thank you for installing {{ .Chart.Name }}. + +Your release is named {{ .Release.Name }}. + +To learn more about the release, try: + + $ helm status {{ .Release.Name }} + $ helm get {{ .Release.Name }} +``` + +我们可以看到我们在 NOTES.txt 文件中也使用 Chart 和 Release 对象,现在我们在 mychart 包根目录下面执行安装命令查看是否能够得到上面的注释信息: +```shell +$ helm install . +Error: release nomadic-deer failed: ConfigMap in version "v1" cannot be handled as a ConfigMap: v1.ConfigMap: Data: ReadString: expects " or n, but found [, error found in #10 byte of ...|rselist":[{"0":"K8s"|..., bigger context ...|:{"app":"mychart","chart":"mychart","courselist":[{"0":"K8s"},{"1":"Python"},{"2":"Search"},{"3":"Go|... +``` + +我们可以看到出现了上面的错误信息,但是如果我们去执行 debug 命令来调试的话是没有任何问题的,是可以正常渲染的,但是为什么在正式安装的时候确出现了问题呢?这是因为我们在 debug 调试阶段只是检验模板是否可以正常渲染,并没有去检查对应的 kubernetes 资源对象对 yaml 文件的格式要求,所以我们说 debug 测试通过,并不代表 chart 就真正的是可用状态,比如我们这里是一个 ConfigMap 的资源对象,ConfigMap 对 data 区域的内容是有严格要求的,比如我们这里出现了下面这样的内容: +```yaml +web: true +courselist: +- 0: "K8s" +- 1: "Python" +- 2: "Search" +- 3: "Golang" +``` + +这的确是一个合法的 yaml 文件的格式,但是对 ConfigMap 就不合法了,需要把 true 变成字符串,下面的字典数组变成一个多行的字符串,这样就是一个合法的 ConfigMap了:(templates/config.yaml) +```yaml +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ .Release.Name }}-configmap + labels: +{{- include "mychart.labels" . | indent 4}} +data: + app: mychart + myvalue: {{ .Values.hello | default "Hello World" | quote }} + {{- $releaseName := .Release.Name }} + {{- with .Values.course }} + k8s: {{ .k8s | upper | quote }} + python: {{ .python | repeat 5 | quote }} + release: {{ $releaseName }} + {{- if eq .python "django" }} + web: "true" + {{- end }} + {{- end }} + courselist: | + {{- range $index, $course := .Values.courselist }} + {{ $course | title | quote }} + {{- end }} + {{- range $key, $val := .Values.course }} + {{ $key }}: {{ $val | upper | quote }} + {{- end }} +{{- include "mychart.labels" . | indent 2 }} +``` + +现在我们再来执行安装命令: +```shell +$ helm install . +NAME: nosy-pig +LAST DEPLOYED: Sat Sep 29 19:26:16 2018 +NAMESPACE: default +STATUS: DEPLOYED + +RESOURCES: +==> v1/ConfigMap +NAME DATA AGE +nosy-pig-configmap 11 0s + + +NOTES: +Thank you for installing mychart. + +Your release is named nosy-pig. + +To learn more about the release, try: + + $ helm status nosy-pig + $ helm get nosy-pig +``` + +现在已经安装成功了,而且下面的注释部分也被渲染出来了,我们可以看到 NOTES.txt 里面使用到的模板对象都被正确渲染了。 + +为我们创建的 chart 包提供一个清晰的 NOTES.txt 文件是非常有必要的,可以为用户提供有关如何使用新安装 chart 的详细信息,这是一种非常友好的方式方法。 + +## 子 chart 包 +我们到目前为止都只用了一个 chart,但是 chart 也可以有 子 chart 的依赖关系,它们也有自己的值和模板,在学习字 chart 之前,我们需要了解几点关于子 chart 的说明: + +* 子 chart 是**独立**的,所以子 chart 不能明确依赖于其父 chart +* 子 chart 无法访问其父 chart 的值 +* 父 chart 可以覆盖子 chart 的值 +* Helm 中有全局值的概念,可以被所有的 chart 访问 + + +### 创建子 chart +现在我们就来创建一个子 chart,还记得我们在创建 mychart 包的时候,在根目录下面有一个空文件夹 charts 目录吗?这就是我们的子 chart 所在的目录,在该目录下面添加一个新的 chart: +```shell +$ cd mychart/charts +$ helm create mysubchart +Creating mysubchart +$ rm -rf mysubchart/templates/*.* +$ tree .. +.. +├── charts +│   └── mysubchart +│   ├── charts +│   ├── Chart.yaml +│   ├── templates +│   └── values.yaml +├── Chart.yaml +├── templates +│   ├── configmap.yaml +│   ├── _helpers.tpl +│   └── NOTES.txt +└── values.yaml + +5 directories, 7 files +``` + +同样的,我们将子 chart 模板中的文件全部删除了,接下来,我们为子 chart 创建一个简单的模板和 values 文件了。 +```shell +$ cat > mysubchart/values.yaml < mysubchart/templates/configmap.yaml < v1/Service +NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE +mysql ClusterIP 10.97.198.88 3306/TCP 0s +wordpress NodePort 10.100.28.2 80:31306/TCP 0s + +==> v1beta1/Deployment +NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE +mysql-deploy 1 1 1 0 0s +wordpress-deploy 1 1 1 0 0s + +==> v1/Pod(related) +NAME READY STATUS RESTARTS AGE +mysql-deploy-67dfd986dd-86bdx 0/1 ContainerCreating 0 0s +wordpress-deploy-5df954b8c-t2h7t 0/1 Init:0/1 0 0s + + +NOTES: +1. Get the application URL by running these commands: + export POD_NAME=$(kubectl get pods --namespace blog -l "app=wordpress,release=viable-ant" -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 +``` + +我们在安装的时候指定了 namespace 参数,我们可以看到 RESOURCES 区域现在已经是我们指点的资源对象了,NOTES 区域的显示是默认的信息,可以暂时忽略,现在我们可以查看下 blog 这个 namespace 下面的资源对象: +```shell +$ kubectl get pods -n blog +NAME READY STATUS RESTARTS AGE +mysql-deploy-67dfd986dd-86bdx 1/1 Running 0 5m +wordpress-deploy-5df954b8c-t2h7t 1/1 Running 0 5m +$ kubectl get service -n blog +NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE +mysql ClusterIP 10.97.198.88 3306/TCP 5m +wordpress NodePort 10.100.28.2 80:31306/TCP 5m +``` + +隔一会儿时间等镜像下载完成、Pod 启动起来后就可以通过 NodeIP:31306 去访问下我们部署的服务是否能够正常访问。 + +![wordpress ui](./images/wordpress-ui.jpg) + + +## 定制数据 +尽管现在我们通过上面的方法可以直接使用 helm 来安装我们的应用了,但是完全不能定制化,比如我们希望资源的名称和 helm release 的名称产生关联,比如我希望可以通过参数化的形式去控制应用的资源大小,比如我还希望能够自己去控制数据库的数据持久化,因为在生产环境下面很大的可能是使用 PV/PVC 或者 StorageClass,而不是使用 hostPath。所以其实现在还远远不够。 + +### 名称 +首先,我们将资源的名称定义成一个命名模板,因为除了 Deployment 里面需要使用,Service 资源里面也可以使用,这样两个地方直接引用同一个命名模板就可以了,我们打开 templates/_helpers.tpl 文件,其实可以看到默认的 partial 文件中就已经有这样的名称的命名模板的定义了: +```yaml +{{/* vim: set filetype=mustache: */}} +{{/* +Expand the name of the chart. +*/}} +{{- define "wordpress.name" -}} +{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}} +{{- end -}} + +{{/* +Create a default fully qualified app name. +We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). +If release name contains chart name it will be used as a full name. +*/}} +{{- define "wordpress.fullname" -}} +{{- if .Values.fullnameOverride -}} +{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- $name := default .Chart.Name .Values.nameOverride -}} +{{- if contains $name .Release.Name -}} +{{- .Release.Name | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} +{{- end -}} +{{- end -}} +{{- end -}} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "wordpress.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} +{{- end -}} +``` + +其中`wordpress.fullname`这个命名模板就是我们需要的,但是我们需要仔细分析下这个命名模板的逻辑: + +* 首先是如果定义了值 fullnameOverride,则直接截取前63个字符(这是因为 kubernetes 的命名机制决定的),然后使用`-`进行连接 +* 如果没有定义值 fullnameOverride,那么就直接取值 nameOverride(默认是 chart 的名称): + * 如果值 nameOverride 包含了当前 release 的名称,则同样直接截取前63个字符,用`-`进行连接 + * 如果值 nameOverride 没包含当前 release 的名称,则将 release 的名称和值 nameOverride 用`-`进行拼接,然后截取前63个字符作为应用的名称 + +所以现在我们将 templates 目录下面的 deployment.yaml 和 service.yaml 文件中关于 wordpress 的 name 替换成命名模板: +```yaml +apiVersion: apps/v1beta1 +kind: Deployment +metadata: + name: {{ template "wordpress.fullname" . }} +...... + +apiVersion: v1 +kind: Service +metadata: + name: {{ template "wordpress.fullname" . }} +...... +``` + +然后将 values.yaml 文件中的内容全部清空,添加下面两个值定义: +```yaml +nameOverride: "" +fullnameOverride: "" +``` + +将 templates 目录下面的 ingress.yaml 和 NOTES.txt 文件删除,后面我们再手动添加,然后使用 debug 命令来查看模板是否能够按照我们的要求就行渲染: +```shell +$ helm install --dry-run --debug . +helm install --dry-run --debug . +[debug] Created tunnel using local port: '38888' + +...... + +--- +# Source: wordpress/templates/service.yaml +apiVersion: v1 +kind: Service +metadata: + name: mysql +...... +--- +# Source: wordpress/templates/service.yaml +apiVersion: v1 +kind: Service +metadata: + name: old-fox-wordpress +...... +--- +# Source: wordpress/templates/deployment.yaml +apiVersion: apps/v1beta1 +kind: Deployment +metadata: + name: mysql-deploy +...... +--- +# Source: wordpress/templates/deployment.yaml +apiVersion: apps/v1beta1 +kind: Deployment +metadata: + name: old-fox-wordpress + labels: + app: wordpress +...... +``` + +我们可以看到 Deployment 和 Service 的名称都是 old-fox-wordpress,这是因为我们没有定义 fullnameOverride 和 nameOverride 这两个值,所以最后渲染的时候就是使用的 release 的名称拼接上 chart 的名称,如果我们用 --set 参数来指定下值 fullnameOverride 呢: +```shell +$ helm install --dry-run --debug --set fullnameOverride=mywordpress . +[debug] Created tunnel using local port: '41110' + +...... + +--- +# Source: wordpress/templates/service.yaml +apiVersion: v1 +kind: Service +metadata: + name: mywordpress +...... +--- +# Source: wordpress/templates/deployment.yaml +apiVersion: apps/v1beta1 +kind: Deployment +metadata: + name: mywordpress + labels: + app: wordpress +...... +``` + +可以看到资源名称被我们指定的值覆盖了,一般情况下面我们还会为我们的资源添加上合适的 labels 标签,比如我们这里可以给 wordpress 的 Deployment 和 Service 都添加上下面的 labels 标签: +```yaml +apiVersion: apps/v1beta1 +kind: Deployment +metadata: + name: {{ template "wordpress.fullname" . }} + labels: + app: {{ .Chart.Name }} + chart: {{ template "wordpress.chart" . }} + release: {{ .Release.Name }} + +...... +apiVersion: v1 +kind: Service +metadata: + name: {{ template "wordpress.fullname" . }} + labels: + app: {{ .Chart.Name }} + chart: {{ template "wordpress.chart" . }} + release: {{ .Release.Name }} +``` + +然后使用 debug 模式查看下模板渲染结果: +```shell +$ helm install --dry-run --debug . +[debug] Created tunnel using local port: '40645' + +...... + +--- +# Source: wordpress/templates/service.yaml +apiVersion: v1 +kind: Service +metadata: + name: youngling-clam-wordpress + labels: + app: wordpress + chart: wordpress-0.1.0 + release: youngling-clam +...... +--- +# Source: wordpress/templates/deployment.yaml +apiVersion: apps/v1beta1 +kind: Deployment +metadata: + name: youngling-clam-wordpress + labels: + app: wordpress + chart: wordpress-0.1.0 + release: youngling-clam +...... +``` + +有的同学可能已经发现了,我们这个地方的应用是依赖于 mysql 的,那么为什么我们只是把 wordpress 相关的数据来做了定制呢?当然我们也可以在我们的这个 chart 中来定制 mysql,但是这却不是最好的方法,最好的方法是让我们去依赖一个独立的 mysql chart,这样可以将 wordpress 和 mysql 之间的耦合关系降低,后面我们再和大家来看看怎样解耦。 + +为了不影响对 wordpress 的操作,我们可以临时将 templates 目录下面的 mysql 的资源对象单独提取出来,比如我们这里统一放到一个叫 mysql.yaml 的资源文件中,现在我们的结构就是这样的了: +```shell +$ tree . +. +├── charts +├── Chart.yaml +├── templates +│   ├── deployment.yaml +│   ├── _helpers.tpl +│   ├── mysql.yaml +│   └── service.yaml +└── values.yaml + +2 directories, 6 files +``` + +### 镜像 +现在我们使用的镜像还是固定的`wordpress:latest`,为了方便其他人使用,我们在编写 chart 包的时候会提供一个定制参数值,可以自由指定使用的镜像,包括 tag 版本。我们可以先去添加 values.yaml 文件中的内容: +```yaml +nameOverride: "" +fullnameOverride: "" + +## 官方 WordPress 镜像 +## 引用:https://hub.docker.com/r/library/wordpress/tags/ +image: + registry: docker.io + repository: wordpress + tag: 4.9.8 + ## 指定一个 imagePullPolicy + ## 如果镜像 tag 是'latest',则默认是'Always',否则设置'IfNotPresent' + ## 引用: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images + ## + pullPolicy: IfNotPresent + ## 指定一组 imagePullSecretes[可选] + ## Secrets 必须在 namespace 下面手动创建 + ## 引用: https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/ + ## + # pullSecrets: + # - myRegistrKeySecretName +``` + +我们在 values.yaml 文件中添加了一个 image 的对象,里面包含仓库地址、镜像名称、镜像版本,这是因为一个标准的镜像就包含这3个部分,每一个部分都是可能被定制的,然后指定一个镜像拉取策略的参数 imagePullPolicy,还不算完,为什么呢?如果我们要使用的镜像是一个私有仓库的镜像怎么办?所以我们这里还预留了一个参数:pullSecrets,用来指定私有仓库地址的 Secrets,现在我们再去修改 templates/deployment.yaml 文件就简单很多了: +```yaml +apiVersion: apps/v1beta1 +kind: Deployment +metadata: + name: {{ template "wordpress.fullname" . }} + labels: + app: {{ .Chart.Name }} + chart: {{ template "wordpress.chart" . }} + release: {{ .Release.Name }} +spec: + strategy: + type: RollingUpdate + rollingUpdate: + maxSurge: 1 + maxUnavailable: 1 + template: + metadata: + labels: + app: {{ .Chart.Name }} + chart: {{ template "wordpress.chart" . }} + release: {{ .Release.Name }} + spec: + initContainers: + - name: init-db + image: busybox + imagePullPolicy: IfNotPresent + command: ['sh', '-c', 'until nslookup mysql;do echo waiting for mysql service; sleep 2; done;'] + {{- if .Values.image.pullSecrets }} + imagePullSecrets: + {{- range .Values.image.pullSecrets }} + - name: {{ . }} + {{- end }} + {{- end }} + containers: + - name: {{ template "wordpress.fullname" . }} + image: "{{ .Values.image.registry }}/{{ .Values.image.repository }}:{{ .Values.image.tag }}" + imagePullPolicy: {{ .Values.image.pullPolicy | quote }} +...... +``` + +我们首先判断是否存在值`pullSecrets`,如果存在,则将 Secrets 循环渲染出来,然后是容器的名称还是使用命名模板 wordpress.fullname 的定义,然后就是 image 的地址以及 imagePullPolicy,这样我们就完成了对镜像的定制,默认的值直接写入到 values.yaml 文件中,现在我们使用 debug 命令查看下模板渲染的结果: +```yaml +helm install --dry-run --debug . +[debug] Created tunnel using local port: '46735' + +...... + +--- +# Source: wordpress/templates/deployment.yaml +apiVersion: apps/v1beta1 +kind: Deployment +metadata: + name: eponymous-narwhal-wordpress + labels: + app: wordpress + chart: wordpress-0.1.0 + release: eponymous-narwhal +spec: + strategy: + type: RollingUpdate + rollingUpdate: + maxSurge: 1 + maxUnavailable: 1 + template: + metadata: + labels: + app: wordpress + chart: wordpress-0.1.0 + release: eponymous-narwhal + spec: + initContainers: + - name: init-db + image: busybox + imagePullPolicy: IfNotPresent + command: ['sh', '-c', 'until nslookup mysql;do echo waiting for mysql service; sleep 2; done;'] + containers: + - name: eponymous-narwhal-wordpress + image: "docker.io/wordpress:4.9.8" + imagePullPolicy: "IfNotPresent" +...... +``` + +假如现在我们的镜像地址是 youdianzhishi.com/wordpress:4.9,那么我们在安装的就可以覆盖 image 对象中的相关参数了: +```yaml +$ helm install --dry-run --debug --set image.registry=youdianzhishi.com --set image.tag=4.9 . +[debug] Created tunnel using local port: '36449' + +...... + +# Source: wordpress/templates/deployment.yaml +apiVersion: apps/v1beta1 +kind: Deployment +metadata: + name: peddling-prawn-wordpress + labels: + app: wordpress + chart: wordpress-0.1.0 + release: peddling-prawn +spec: + strategy: + type: RollingUpdate + rollingUpdate: + maxSurge: 1 + maxUnavailable: 1 + template: + metadata: + labels: + app: wordpress + chart: wordpress-0.1.0 + release: peddling-prawn + spec: + initContainers: + - name: init-db + image: busybox + imagePullPolicy: IfNotPresent + command: ['sh', '-c', 'until nslookup mysql;do echo waiting for mysql service; sleep 2; done;'] + containers: + - name: peddling-prawn-wordpress + image: "youdianzhishi.com/wordpress:4.9" + imagePullPolicy: "IfNotPresent" +...... +``` + +我们可以看到镜像地址是不是就被替换了,当然如果你需要覆盖的值比较多,最好还是通过指定一个 yaml 文件来覆盖默认的这些 values 值。 + + +### 健康检查、资源限制 +按照我们前面的资源文件声明,接下来我们就应该定制健康检查部分和资源限制部分,同样还是先添加模板值:(values.yaml) +```yaml +...... +## liveness 和 readliness probes 配置 +## 引用: https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-probes/#configure-probes) +livenessProbe: + initialDelaySeconds: 120 + periodSeconds: 10 + timeoutSeconds: 5 + failureThreshold: 6 + successThreshold: 1 +readinessProbe: + initialDelaySeconds: 30 + periodSeconds: 10 + timeoutSeconds: 5 + failureThreshold: 6 + successThreshold: 1 +``` + +我们在 values.yaml 文件中添加了 livenessProbe 和 readinessProbe 这两个对象,里面都是健康检测的相关属性,然后我们需要将这些值都嵌入到模板中去,按照以前的方法我们是不是一个属性一个属性的添加,但是这样太麻烦了,我们可以用一个函数`toYaml`将这两个对象中的属性一次性全部输出到模板中去: +```yaml +containers: +- name: {{ template "wordpress.fullname" . }} +image: "{{ .Values.image.registry }}/{{ .Values.image.repository }}:{{ .Values.image.tag }}" +imagePullPolicy: {{ .Values.image.pullPolicy | quote }} +ports: +- name: wdport + containerPort: 80 +livenessProbe: + tcpSocket: + port: 80 +{{ toYaml .Values.livenessProbe | indent 10 }} +readinessProbe: + tcpSocket: + port: 80 +{{ toYaml .Values.readinessProbe | indent 10 }} +``` + +可以看到我们这里使用的方法是`{{ toYaml .Values.livenessProbe | indent 10 }}`,至于为什么是保留10个空格呢?这个就需要大家对这些对象的层级关系要比较清楚才行。现在我们用 debug 来查看下模板渲染后的结果呢: +```shell +helm install --dry-run --debug . +[debug] Created tunnel using local port: '40467' + +...... + containers: + - name: mouthy-crocodile-wordpress + image: "docker.io/wordpress:4.9.8" + imagePullPolicy: "IfNotPresent" + ports: + - name: wdport + containerPort: 80 + livenessProbe: + tcpSocket: + port: 80 + failureThreshold: 6 + initialDelaySeconds: 120 + periodSeconds: 10 + successThreshold: 1 + timeoutSeconds: 5 + + readinessProbe: + tcpSocket: + port: 80 + failureThreshold: 6 + initialDelaySeconds: 30 + periodSeconds: 10 + successThreshold: 1 + timeoutSeconds: 5 +...... +``` + +可以看到符合我们的渲染结果的。然后就是我们的 resource 资源部分,因为并不是所有的应用资源消耗情况都是一样的,还需要结合自己的集群去进行定制 + +```yaml +## Configure resource requests and limits +## ref: http://kubernetes.io/docs/user-guide/compute-resources/ +## +resources: + requests: + memory: 512Mi + cpu: 300m +``` + +todo...... diff --git a/docs/images/wordpress-ui.jpg b/docs/images/wordpress-ui.jpg new file mode 100644 index 0000000000000000000000000000000000000000..758591e65ed8c99d574117632ae2db1c63991177 GIT binary patch literal 87057 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 literal 0 HcmV?d00001 diff --git a/mychart/templates/configmap.yaml b/mychart/templates/configmap.yaml index bb771b8..bcea774 100644 --- a/mychart/templates/configmap.yaml +++ b/mychart/templates/configmap.yaml @@ -13,13 +13,13 @@ data: python: {{ .python | repeat 5 | quote }} release: {{ $releaseName }} {{- if eq .python "django" }} - web: true + web: "true" {{- end }} {{- end }} - courselist: - {{- range $index, $course := .Values.courselist }} - - {{ $index }}: {{ $course | title | quote }} - {{- end }} + courselist: | + {{- range $index, $course := .Values.courselist }} + {{ $course | title | quote }} + {{- end }} {{- range $key, $val := .Values.course }} {{ $key }}: {{ $val | upper | quote }} {{- end }} -- GitLab