k8s~helm裏的yaml的介紹

Chart.yaml 文件做用

  1. name: [必須] Chart的名稱
  2. version: [必須] Chart的版本號,版本號必須符合 SemVer 2:http://semver.org/
  3. description: [可選] Chart的簡要描述
  4. keywords: - [可選] 關鍵字列表,便於檢索
  5. home: [可選] 項目地址
  6. sources: - [可選] 當前Chart的下載地址列表

charts依賴

能夠在requirements.yaml裏去配置它的依賴關係, 它支持兩種方式表示依賴關係,能夠使用requirements.yaml或者直接將依賴的Chart放置到charts目錄中。redis

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裏docker

  • 生成最終的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應用(包括有狀態跟無狀態應用),須要使用數據卷的話,須要在存儲卷中進行設置和聲明,下面列出持久化數據卷的聲明跟設置的模板:json

數據卷設置:api

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

數據卷聲明:app

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文件裏面wordpress

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

將鏡像的密碼配置到保密字典中flex

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文件的模板。

相關文章
相關標籤/搜索