Helm 入門指南

來源:互聯網
上載者:User

標籤:.com   dep   abi   ade   從零開始   目錄   存在   編寫   發布   

Helm 為Kubernetes的軟體包管理工具,Helm有兩部分組成:Helm用戶端、Tiller服務端,Helm三個主要組件:Chart、倉庫、Release;

Chart:為Kubernetes中應用程式所需要的資源的定義。
倉庫:為儲存Helm chart的倉庫,可從倉庫中下載chart直接使用
Release: Kubernetes中啟動並執行chart執行個體,每個chart可多次安裝,每次安裝都是一個新版本;

Helm 常見指令:

  helm search 在倉庫中尋找chart

  helm inspect stable/mongodb 可查看該chart的介紹資訊;
  helm install stable/mongodb 可直接下載該chart並安裝該chart;

版本升級:
  helm upgrade releaseName .

  helm rollback releaseName 1 復原到版本1

  從零開始通過helm發布Kubernetes項目:

一、結構介紹

初始化項目:

helm create nginx  

  執行完後建立名為nginx的chart,現在查看nginx目錄中的檔案:

charts:目錄用於存放所依賴的子chart
chart.yaml:為當前chart的說明檔案,也可在模板中訪問該檔案;
templates:目錄為nginx項目的模板目錄,通常會使用values.yaml配置內容進行填充,板引擎渲染此目錄的檔案後Tiller將渲染得到的結果 提交給Kubernetes建立響應的對象;
values.yaml:為值檔案,定義模板中需要使用的值,在templates的模板檔案中將訪問改值;

  在templates目錄中有可以看到deployment.yaml、ingress.yaml、service.yaml檔案這些為定義Kubernetes deployment、ingress、service對象的模板檔案;
NOTES.txt:為安裝chart成功後的說明檔案
**_helpers.tpl:**模板助手檔案,定義的值可在模板中使用;

二、通過helm在Kubernetes中部署Nginx

1、helm 初步使用

  現在刪除template目錄中的所有檔案、清空values.yaml檔案中所有內容

  部署nginx需要一個deployment控制器與對外提供服務的service,現在我們分別手動建立這個兩個檔案並編寫相關內容;

deployment.yaml :

 apiVersion: apps/v1 kind: Deployment metadata:   name: nginx-deployment   labels:     app: nginx spec:   replicas: 3   selector:     matchLabels:       app: nginx   template:     metadata:       labels:         app: nginx     spec:       containers:       - name: nginx         image: nginx:1.7.9         ports:         - containerPort: 80      

service.yaml

 apiVersion: v1 kind: Service metadata:  name: nginx-service spec:  selector:    app: nginx  type: NodePort  ports:  - port: 80    nodePort: 30078

  此時我們在上級目錄執行:helm install nginx 已經可以將nginx部署到Kubernetes中;

  但如果只是這樣使用Helm,那它存在的意義也不大,既然說template目錄是模板目錄當然它裡面的模板檔案也不能只是這麼使用,要讓模板檔案體現出它的模型性質;下面我們將使用Helm的模板等功能,讓模板檔案體現出他的模板性質;

2、helm 模板
  目前為止deployment.yaml與service.yaml雖然是放在模板目錄下但是完全沒有體現出他的模板性質,現在我們開始這兩個檔案的模板化;

模板文法基礎:

  內建對象:helm中有這麼這個常用內建對象:Release、Values、Chart、Files、Capabilities、Template;

Release:此對象描述當前release,內建有:Release.Name release名稱、Release.Time 發布時間等等等對面;
Values:此對象為從values.yaml檔案與使用者提供的檔案中傳遞到模板的對值對象;
Chart:此對象為chart.yaml檔案所提供的資料對象;
Files:提供了對chart非特殊檔案的訪問;
Capabilities:這提供了Kubernetes叢集資訊的訪問;
Template:正在執行的當前模板資訊

  下面我們通過helm內建對象Values來實現deployment.yaml、service.yaml檔案的模板化,Values對象的取值範圍:
1、當前chart的values.yaml檔案;
2、如當前為子chart,則來自父chart的values.yaml檔案;
3、在helm install或helm update執行是通過-f參數傳遞的檔案;
4、通過helm install 時通過 –set設定的值;

  如values.yaml檔案中存在replicaCount: 1對象,則在模板檔案中通過{{ .Values.replicaCount }}即可訪問到values.yaml檔案定義的對象值1;

  通過**_helpers.tpl**可定義命名模板,下面定義模板deploy.name

 {{- define "deploy.name" -}} demo-deploy-nginx {{- end }}

  其中:{{ - 表示刪除左側的空格 - }} 刪除右側的空格
  此時可在模板檔案中通過{{ template "deploy.name" . }} 引用該命名模板;

實現模板化:

  提取需要模板化的資料,這裡提取出deployment對象的name、labels、replicas、matchLabels、template的labels、template spec的name、image;service對象的name、selector labels、type、port、nodePort等配置;
  我們再從提取出來的配置中挑選出name類與labels類配置定義為命名模板存放在_helpers.tpl檔案中,其他的配置項定義在Values.yaml檔案中;

**_helpers.tpl**檔案內容如下:存放了deploy名稱、service名稱、deploy的lables、deploy中pod的lables;

{{- define "deploy.name" -}} demo-deploy-nginx{{- end }}{{- define "service.name" -}}demo-service-nginx{{- end }}{{- define "labels" -}}demo: nginx{{- end}}{{- define "deploy.labels" -}}deploy: nginx{{- end}}

values.yaml 檔案,此檔案定義了副本數、鏡像名稱與版本、service類型、連接埠等:

# 定義模板預設值replicaCount: 1image:  repository: nginx  tag: 1.7.9service:  type: NodePort  port: 80  nodePort: 30078

  值檔案定義好了此時需要在模板deployment、service檔案中引用上述兩個檔案所定義的值,下面開始重構deployment.yaml與service.yaml檔案:

service.yaml檔案:

apiVersion: v1kind: Servicemetadata:  name: {{ template "service.name" . }}spec:  selector:  {{ template "labels" . }} type: {{ .Values.service.type }} ports:  - port: {{ .Values.service.port }}   nodePort: {{ .Values.service.nodePort }}

deployment.yaml

apiVersion: apps/v1kind: Deploymentmetadata:   name: {{ template "deploy.name" . }}  labels:     {{ template "deploy.labels" .}}spec:  replicas: {{ .Values.replicaCount }}  selector:   matchLabels:      {{ template "labels" . }} template:     metadata:      labels:        {{ template "labels" . }}    spec:      containers:      - name: {{ .Chart.Name}}        image: {{ .Values.image.repository }}:{{ .Values.image.tag }}        ports:        - containerPort: 80

  模板檔案編寫好後可以再重新使用Helm install部署nginx試試,執行前先執行helm delete running-chipmunk卸載掉之前安裝的;

參考資料: https://docs.helm.sh/

文章首發地址:Solinx
http://www.solinx.co/archives/1247

Helm 入門指南

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.