前面完整示例里,我们主要讲解helm打包,部署,升级,回退等功能,关于这里面的文件只是简单介绍,这一节我们详细介绍一下这里面的文件,以方便我们参照创建自己的helm chart.
Helm Chart 结构
Chart 目录结构
mychart/ Chart.yaml LICENSE README.md values.yaml requirements.yaml charts/ templates/ templates/NOTES.txt
默认生成的chart如果没有修改是没有这么多的.
Chart.yaml 文件
name: [必须] Chart的名称version: [必须] Chart的版本号,版本号必须符合 SemVer 2:http://semver.org/description: [可选] Chart的简要描述keywords: - [可选] 关键字列表,便于检索home: [可选] 项目地址sources: - [可选] 当前Chart的下载地址列表maintainers: - name: [必须] 名字 email: [可选] 邮箱engine: gotplicon: [可选] 一个SVG或PNG格式的图片地址
requirements.yaml 和 charts目录
requirements.yaml 文件内容:
dependencies: - name: example version: 1.2.3 repository: http://example.com/charts - name: Chart名称 version: Chart版本 repository: 该Chart所在的仓库地址
Chart支持两种方式表示依赖关系,可以使用requirements.yaml或者直接将依赖的Chart放置到charts目录中。
templates 目录
templates目录中存放了Kubernetes部署文件的模版。
例如:
apiVersion: v1kind: ReplicationControllermetadata: name: deis-database namespace: deis labels: heritage: deisspec: replicas: 1 selector: app: deis-database template: metadata: labels: app: deis-database spec: serviceAccount: deis-database containers: - name: deis-database image: {{.Values.imageRegistry}}/postgres:{{.Values.dockerTag}} imagePullPolicy: {{.Values.pullPolicy}} ports: - containerPort: 5432 env: - name: DATABASE_STORAGE value: {{default "minio" .Values.storage}}
模版语法扩展了 golang/text/template的语法:
# 这种方式定义的模版,会去除test模版尾部所有的空行{{- define "test"}}模版内容{{- end}} # 去除test模版头部的第一个空行{{- template "test" }}
用于yaml文件前置空格的语法:
# 这种方式定义的模版,会去除test模版头部和尾部所有的空行{{- define "test" -}}模版内容{{- end -}} # 可以在test模版每一行的头部增加4个空格,用于yaml文件的对齐{{ include "test" | indent 4}}
创建自己的chart
我们创建一个名为mongodb的chart,看一看chart的文件结构
$ helm create mongodb$ tree mongodbmongodb├── Chart.yaml├── charts├── templates│ ├── NOTES.txt│ ├── _helpers.tpl│ ├── deployment.yaml│ └── service.yaml└── values.yaml 2 directories, 6 files
模板
Templates目录下是yaml文件的模板,遵循Go template语法。使用过Hugo的静态网站生成工具的人应该对此很熟悉。
我们查看下deployment.yaml文件的内容。
apiVersion: extensions/v1beta1kind: Deploymentmetadata: name: {{ template "fullname" . }} labels: chart: "{{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}"spec: replicas: {{ .Values.replicaCount }} template: metadata: labels: app: {{ template "fullname" . }} spec: containers: - name: {{ .Chart.Name }} image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}" imagePullPolicy: {{ .Values.image.pullPolicy }} ports: - containerPort: {{ .Values.service.internalPort }} livenessProbe: httpGet: path: / port: {{ .Values.service.internalPort }} readinessProbe: httpGet: path: / port: {{ .Values.service.internalPort }} resources:{{ toyaml .Values.resources | indent 12 }}
这是该应用的Deployment的yaml配置文件,其中的双大括号包扩起来的部分是Go template,其中的Values是在values.yaml文件中定义的:
replicaCount: 1image: repository: nginx tag: stable pullPolicy: IfNotPresentservice: name: nginx type: ClusterIP externalPort: 80 internalPort: 80resources: limits: cpu: 100m memory: 128Mi requests: cpu: 100m memory: 128Mi
比如在Deployment.yaml中定义的容器镜像image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"其中的:
.Values.image.repository就是nginx
.Values.image.tag就是stable
以上两个变量值是在create chart的时候自动生成的默认值
原文地址:https://www.cnblogs.com/tylerzhou/p/11141538.html
.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com