系列目錄html
前面完整示例裏,咱們主要講解helm打包,部署,升級,回退等功能,關於這裏面的文件只是簡單介紹,這一節咱們詳細介紹一下這裏面的文件,以方便咱們參照建立本身的helm chart.nginx
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若是沒有修改是沒有這麼多的.golang
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 文件內容:mongodb
dependencies: - name: example version: 1.2.3 repository: http://example.com/charts - name: Chart名稱 version: Chart版本 repository: 該Chart所在的倉庫地址
Chart支持兩種方式表示依賴關係,能夠使用requirements.yaml或者直接將依賴的Chart放置到charts目錄中。docker
templates目錄中存放了Kubernetes部署文件的模版。
例如:json
# 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的語法:api
# 這種方式定義的模版,會去除test模版尾部全部的空行 {{- define "test"}} 模版內容 {{- end}} # 去除test模版頭部的第一個空行 {{- template "test" }}
用於yaml文件前置空格的語法:bash
# 這種方式定義的模版,會去除test模版頭部和尾部全部的空行 {{- define "test" -}} 模版內容 {{- end -}} # 能夠在test模版每一行的頭部增長4個空格,用於yaml文件的對齊 {{ include "test" | indent 4}}
咱們建立一個名爲mongodb的chart,看一看chart的文件結構app
$ 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的時候自動生成的默認值