【转帖】kubernetes实战篇之helm示例yaml文件文件详细介绍 kubernetes实战篇之helm示例yaml文件文件详细介绍

kubernetes实战篇之helm示例yaml文件文件详细介绍

 
https://www.cnblogs.com/tylerzhou/p/11141538.html
helm 就是新时代的应用部署器

必须进行学习才可以呢。

系列目录

前面完整示例里,我们主要讲解helm打包,部署,升级,回退等功能,关于这里面的文件只是简单介绍,这一节我们详细介绍一下这里面的文件,以方便我们参照创建自己的helm chart.

Helm Chart 结构

Chart 目录结构

mychart/
  Chart.yaml          # Yaml文件,用于描述Chart的基本信息,包括名称版本等
  LICENSE             # [可选] 协议
  README.md           # [可选] 当前Chart的介绍
  values.yaml         # Chart的默认配置文件
  requirements.yaml   # [可选] 用于存放当前Chart依赖的其它Chart的说明文件 charts/ # [可选]: 该目录中放置当前Chart依赖的其它Chart templates/ # [可选]: 部署文件模版目录,模版使用的值来自values.yaml和由Tiller提供的值 templates/NOTES.txt # [可选]: 放置Chart的使用指南

默认生成的chart如果没有修改是没有这么多的.

Chart.yaml 文件

name: [必须] Chart的名称
version: [必须] Chart的版本号,版本号必须符合 SemVer 2:http://semver.org/
description: [可选] Chart的简要描述
keywords:
  -  [可选] 关键字列表,便于检索
home: [可选] 项目地址
sources:
  - [可选] 当前Chart的下载地址列表
maintainers: # [可选]
  - name: [必须] 名字
    email: [可选] 邮箱
engine: gotpl # [可选] 模版引擎,默认值是gotpl
icon: [可选] 一个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部署文件的模版。
例如:

# db.yaml
apiVersion: v1
kind: ReplicationController metadata:  name: deis-database  namespace: deis  labels:  heritage: deis spec:  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 mongodb
mongodb
├── Chart.yaml #Chart本身的版本和配置信息
├── charts #依赖的chart
├── templates #配置模板目录
│   ├── NOTES.txt #helm提示信息
│   ├── _helpers.tpl #用于修改kubernetes objcet配置的模板 │ ├── deployment.yaml #kubernetes Deployment object │ └── service.yaml #kubernetes Serivce └── values.yaml #kubernetes object configuration 2 directories, 6 files

模板

扫描二维码关注公众号,回复: 9410337 查看本文章

Templates目录下是yaml文件的模板,遵循Go template语法。使用过Hugo的静态网站生成工具的人应该对此很熟悉。

我们查看下deployment.yaml文件的内容。

apiVersion: extensions/v1beta1
kind: Deployment
metadata:  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文件中定义的:

# Default values for mychart.
# This is a yaml-formatted file.
# Declare variables to be passed into your templates.
replicaCount: 1 image:  repository: nginx  tag: stable  pullPolicy: IfNotPresent service:  name: nginx  type: ClusterIP  externalPort: 80  internalPort: 80 resources:  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的时候自动生成的默认值

系列目录

前面完整示例里,我们主要讲解helm打包,部署,升级,回退等功能,关于这里面的文件只是简单介绍,这一节我们详细介绍一下这里面的文件,以方便我们参照创建自己的helm chart.

Helm Chart 结构

Chart 目录结构

mychart/
  Chart.yaml          # Yaml文件,用于描述Chart的基本信息,包括名称版本等
  LICENSE             # [可选] 协议
  README.md           # [可选] 当前Chart的介绍
  values.yaml         # Chart的默认配置文件
  requirements.yaml   # [可选] 用于存放当前Chart依赖的其它Chart的说明文件 charts/ # [可选]: 该目录中放置当前Chart依赖的其它Chart templates/ # [可选]: 部署文件模版目录,模版使用的值来自values.yaml和由Tiller提供的值 templates/NOTES.txt # [可选]: 放置Chart的使用指南

默认生成的chart如果没有修改是没有这么多的.

Chart.yaml 文件

name: [必须] Chart的名称
version: [必须] Chart的版本号,版本号必须符合 SemVer 2:http://semver.org/
description: [可选] Chart的简要描述
keywords:
  -  [可选] 关键字列表,便于检索
home: [可选] 项目地址
sources:
  - [可选] 当前Chart的下载地址列表
maintainers: # [可选]
  - name: [必须] 名字
    email: [可选] 邮箱
engine: gotpl # [可选] 模版引擎,默认值是gotpl
icon: [可选] 一个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部署文件的模版。
例如:

# db.yaml
apiVersion: v1
kind: ReplicationController metadata:  name: deis-database  namespace: deis  labels:  heritage: deis spec:  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 mongodb
mongodb
├── Chart.yaml #Chart本身的版本和配置信息
├── charts #依赖的chart
├── templates #配置模板目录
│   ├── NOTES.txt #helm提示信息
│   ├── _helpers.tpl #用于修改kubernetes objcet配置的模板 │ ├── deployment.yaml #kubernetes Deployment object │ └── service.yaml #kubernetes Serivce └── values.yaml #kubernetes object configuration 2 directories, 6 files

模板

Templates目录下是yaml文件的模板,遵循Go template语法。使用过Hugo的静态网站生成工具的人应该对此很熟悉。

我们查看下deployment.yaml文件的内容。

apiVersion: extensions/v1beta1
kind: Deployment
metadata:  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文件中定义的:

# Default values for mychart.
# This is a yaml-formatted file.
# Declare variables to be passed into your templates.
replicaCount: 1 image:  repository: nginx  tag: stable  pullPolicy: IfNotPresent service:  name: nginx  type: ClusterIP  externalPort: 80  internalPort: 80 resources:  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的时候自动生成的默认值

猜你喜欢

转载自www.cnblogs.com/jinanxiaolaohu/p/12355457.html