Chart.yaml 文件作用
- name: [必须] Chart的名称
- version: [必须] Chart的版本号,版本号必须符合 SemVer 2:http://semver.org/
- description: [可选] Chart的简要描述
- keywords: - [可选] 关键字列表,便于检索
- home: [可选] 项目地址
- sources: - [可选] 当前Chart的下载地址列表
charts依赖
可以在requirements.yaml里去配置它的依赖关系, 它支持两种方式表示依赖关系,可以使用requirements.yaml或者直接将依赖的Chart放置到charts目录中。
dependencies:
- name: mariadb
version: 7.x.x
repository: https://kubernetes-charts.storage.googleapis.com/
condition: mariadb.enabled
tags:
- wordpress-database
templates 目录
templates目录下的yaml文件,遵循Go template语法。使用过Hugo的静态网站生成工具的人应该对此很熟悉。
templates目录中存放了Kubernetes部署文件的模版,比如deployment.yaml,service.yaml等,它里面引用的变量来自values.yaml里
- 生成最终的yaml文件-文本对齐
{{ include "test" | indent 4}} - 生成最终的yaml文件-去除空行
{{- define "test" -}}模版内容{{- end -}} - 变量(默认值)的使用
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
上面的{{ .Values.image.repository }}
表示values.yaml文件里的image节点下的repository元素的内容
数据卷Volume、数据卷声明VolumeClaim
k8s应用(包括有状态跟无状态应用),需要使用数据卷的话,需要在存储卷中进行设置和声明,下面列出持久化数据卷的声明跟设置的模板:
数据卷设置:
apiVersion: v1
kind: PersistentVolume -这里说明是持久化数据卷
metadata:
finalizers:
- kubernetes.io/pv-protection
labels:
alicloud-pvname: {{ .Values.volumes.name }} -数据卷标签,eg:XXX-data
name: {{ .Values.volumes.name }} -数据卷名称,eg:XXX-data
spec:
accessModes:
- ReadWriteMany -权限
capacity:
storage: {{ .Values.volumes.storage }} -容量大小,eg:10Gi
flexVolume:
driver: alicloud/nas -数据卷类型是nas
options:
path: {{ .Values.volumes.path }} -数据卷路径,eg:/tmp
server: {{ .Values.volumes.server }} -数据卷服务商,eg:xxxxx.nas.aliyuncs.com
vers: '3'
persistentVolumeReclaimPolicy: Retain
storageClassName: nas
数据卷声明:
apiVersion: v1
kind: PersistentVolumeClaim -持久化数据卷声明
metadata:
annotations:
pv.kubernetes.io/bind-completed: 'yes'
pv.kubernetes.io/bound-by-controller: 'yes'
finalizers:
- kubernetes.io/pvc-protection
name: {{ .Values.volumes.name }}
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: {{ .Values.volumes.storage }} -容量,eg:10Gi
selector:
matchLabels:
alicloud-pvname: {{ .Values.volumes.name }}
storageClassName: nas
volumeName: {{ .Values.volumes.name }}
伸缩配置 HorizontalPodAutoscaler
应用弹性伸缩配置,这个可以配置最大、最小副本集跟伸缩条件的参数到values.yaml文件里面
kind: HorizontalPodAutoscaler
apiVersion: autoscaling/v1
metadata:
name: {{ include "admin.appname" . }}-hpa -admin.appname就是后面执行helm命令的时候倒数第二个参数,为什么前面是admin呢,admin就是你配置Chart.yaml的时候里面的name变量的值
spec:
scaleTargetRef:
kind: Deployment
name: {{ include "admin.appname" . }}
apiVersion: apps/v1beta2
minReplicas: 1 -最小副本集
maxReplicas: 10 -最大副本集
targetCPUUtilizationPercentage: 70 -伸缩条件
配置项ConfigMap
配置项设置,一般每个项目有都对应的环境参数,比如:数据库、redis等这些账号密码类的参数,这些可以抽离出来当成一个配置项处理
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ .Values.envConfigName }} -每个环境就配置一个配置项
data:
{{- range $k, $v := .Values.configDatas }} -这里是循环遍历configDatas这个变量
{{ $k | indent 2 }}.yml: >- -下面这两行配置一个key->value的配置项(即文件名->文件内容)
{{ $v | indent 4 }}
{{- end -}}
镜像密码配置Secret
将镜像的密码配置到保密字典中
apiVersion: v1
kind: Secret
metadata:
name: image-secret -name随意写
data:
.dockerconfigjson: {{ .Files.Get "image.pwd" | b64enc }} -内容
type: kubernetes.io/dockerconfigjson
TLs证书配置(后面配置ingress的时候要用到,不然无法用https)
apiVersion: v1
kind: Secret
metadata:
name: tls-secret
data:
tls.crt: {{ .Files.Get "XXXXX.com.pem" | b64enc }}
tls.key: {{ .Files.Get "XXXXX.com.key" | b64enc }}
type: Opaque
下次主要说一下几个重要的yaml文件的模板。