kubernetes实战篇之helm示例yaml文件文件详细介绍
Posted tylerzhou
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了kubernetes实战篇之helm示例yaml文件文件详细介绍相关的知识,希望对你有一定的参考价值。
前面完整示例里,我们主要讲解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的时候自动生成的默认值
以上是关于kubernetes实战篇之helm示例yaml文件文件详细介绍的主要内容,如果未能解决你的问题,请参考以下文章
云原生(三十八) | Kubernetes篇之Jenkins入门和安装
Kubernetes yaml 文件不能用作 helm 模板