日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

利用Helm简化Kubernetes应用部署(2)

發布時間:2023/12/4 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 利用Helm简化Kubernetes应用部署(2) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

定義Charts?

使用Helm部署Demo?

Helm常用操作命令?

定義Charts

回到之前的“charts”目錄,我們依次進行解讀并進行簡單的修改。

  • Chart.yaml

配置示例:

apiVersion: v1 appVersion: "1.1" description: A demo Helm chart for Kubernetes name: k8sapp version: 0.1.1

如上述定義所示,Chart.yaml用于提供Charts相關的元數據定義,比如名稱、版本,屬于必備文件。主要字段如下所示:

字段

是否必填

說明

name

?

當前Chart名稱

version

?

版本號

apiVersion

?

chart API 版本,一直為“v1”

description


Chart描述

keywords


關鍵字列表

home


項目主頁URL

kubeVersion


依賴的Kubernetes版本

sources


源碼地址列表

maintainers


維護者列表,由name、email、url組成

engine


模板引擎名稱,默認為gotpl,即go模板

icon


圖標地址

appVersion


應用程序版本

deprecated


是否已廢棄

tillerVersion


依賴的Tiller版本,例如">2.0.0"

  • values.yaml和模板

values.yaml配置示例:

# 定義k8sapp的默認配置 fullnameOverride: k8sapp replicaCount: 1 #副本數 image: #鏡像配置 repository: ccr.ccs.tencentyun.com/magicodes/k8sapp tag: latest

?pullPolicy: Always #鏡像拉取策略,Always表示總是拉取最新鏡像,IfNotPresent表示如果本地存在則不拉取,Never則表示只使用本地鏡像

service: #Service配置 type: NodePort #NodePort服務類型,以便外部訪問 port: 80 secrets: {} ingress: enabled: false #不配置ingress #資源限制 resources: limits: cpu: 1 memory: 228Mi requests: cpu: 100m memory: 128Mi

如以上示例配置所示,我們在一個values.yaml配置了Deployment和Service的配置,整個配置簡單干凈,當然我們還能配置更多,比如ingress和secrets等等。那么我們的配置是怎么起作用的呢?這里的配置又是如何轉換為對應的Deployment、Service等配置的呢?我們來打開“templates”目錄下的deployment.yaml模板文件:

apiVersion: apps/v1beta2 kind: Deployment metadata: name: {{ template "k8sapp.fullname" . }} labels: app: {{ template "k8sapp.name" . }} chart: {{ template "k8sapp.chart" . }} draft: {{ default "draft-app" .Values.draft }} release: {{ .Release.Name }} heritage: {{ .Release.Service }} spec: replicas: {{ .Values.replicaCount }} selector: matchLabels: app: {{ template "k8sapp.name" . }} release: {{ .Release.Name }} template: metadata: labels: app: {{ template "k8sapp.name" . }} draft: {{ default "draft-app" .Values.draft }} release: {{ .Release.Name }} annotations: buildID: {{ .Values.buildID }} spec: containers: - name: {{ .Chart.Name }} image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}" imagePullPolicy: {{ .Values.image.pullPolicy }} ports: - name: http containerPort: 80 protocol: TCP env: {{- $root := . }} {{- range $ref, $values := .Values.secrets }} {{- range $key, $value := $values }} - name: {{ $ref }}_{{ $key }} valueFrom: secretKeyRef: name: {{ template "k8sapp.fullname" $root }}-{{ $ref | lower }} key: {{ $key }} {{- end }} {{- end }} resources: {{ toYaml .Values.resources | indent 12 }} {{- with .Values.imagePullSecrets }} imagePullSecrets: {{ toYaml . | indent 8 }} {{- end }}

如上所示,這是一個使用Go模板的Deployment模板文件,它通過讀取“Chart.yaml”和“values.yaml”中的配置進行轉換。同樣的,service.yaml、ingress.yaml也是如此,同時我們也可以基于其語法編寫更多的模板。這些模板在執行“helm install”命令時進行轉換。

值得注意的是,“.Values”對象可以訪問values.yaml中的任何配置,如果使用自定義的值則會覆蓋此值?!? Release”對象則為預定義的值,可用于任意模板,并且無法被覆蓋。其中,常用的預定義值如下所示:

名稱

說明

Release.Name

發布的資源實例名稱

Release.Time

Chart最后發布時間

Release.Namespace

命名空間

Release.Service

發布服務名稱,通常是“Tiller”

Release.IsUpgrade

當前操作是否升級

Release.IsInstall

當前操作是否為安裝

Release.Revision

修訂號,從1開始遞增

Chart

對應“Chart.yaml”

Files

可以訪問所有的非模板文件和非特殊文件

  • requirements.yaml

requirements.yaml用于管理依賴關系。例如:

dependencies: - name: apache version: 1.2.3 repository: http://example.com/charts - name: mysql version: 3.2.1 repository: http://another.example.com/charts

如上所示,常用的字段如下所示:

  • name表示Chart名稱;

  • version表示Chart版本;

  • repository表示Chart存儲庫地址,注意,我們還必須使用“helm repo add”命令在本地添加該存儲庫地址;

  • alias表示別名;

  • tags用于指定僅裝載匹配的Chart;

  • condition用于設置條件來裝載匹配的Chart;

  • import-values則用于導入子Chart的多個值。

如果要對依賴關系進行更好的控制,我們可以手工將被依賴的Charts復制到應用的Charts目錄下,以明確的表達這種依賴關系。例如WordPress依賴于Apache和MySQL,則其依賴關系以目錄的形式體現如下所示:

使用Helm部署Demo

好了,嘮嗑了這么多,也該來點實際的了。接下來我們基于以上的認知和Demo配置來進行部署,部署流程如下所示:

如上圖所示,我們來開始Helm的部署之旅。

1.準備Chart

Chart我們已經準備好了,具體看上一節的“values.yaml”示例。

2.推送Chart

接下來我們來推送到倉庫。這里為了簡單,我們直接使用騰訊云的Tencent Hub提供的免費的Helm倉庫。Tencent Hub的操作比較簡單,我們這里略過。接下來,我們將該倉庫添加到本地:

helm repo add {mycharts} https://hub.tencentyun.com/charts/mycharts --username {myname} --password {mypassword}

“helm repo add”命令用于將倉庫添加到本地倉庫列表,以上命令中的變量說明如下所示:

  • mycharts?替換為自己倉庫的命名空間 (用戶名或組織名)

  • myname?替換為 Tencent Hub 賬號用戶名

  • mypassword?替換為 Tencent Hub 賬號密碼

添加完成后,我們可以使用命令“helm repo list”列出本地倉庫列表:

接下來,我們需要將我們的Chart包推送到Tencent Hub的Helm倉庫,在推送之前,我們還需要安裝平臺的推送插件:

yum install git #如果本地已經安裝git,可以忽略此步驟

helm plugin install https://github.com/imroc/helm-push #安裝Tencent Hub推送插件

插件安裝完畢之后,我們就可以開始我們的操作了。首先,確保Chart文件在Helm客戶端所在的機器上已經準備就緒,如下圖中的“k8sapp”目錄:

然后就可以執行推送命令了:

helm push ./k8sapp xinlai

如上所示,“helm push”用于推送Chart,“./k8sapp”是目錄位置,“xinlai”是存儲庫的名稱。執行以上腳本會自動將目標目錄打包并推送:

接下來,我們可以在Tencent Hub管理界面上看到我們的包了:

不僅如此,我們還能查看詳情:

  • 拉取并執行部署

  • 如果是在云端的k8s集群進行Helm應用部署,操作非常簡單,云供應基本上都提供了封裝:

    創建完成后如下所示:

    如上圖所示,此Helm應用創建了Deployment資源和Service資源,其中Service的類型為NodePort,端口為“32160”,接下來我們可以通過節點端口訪問:

    如果是本地集群呢?我們可以通過以下腳本拉取Chart并執行部署:

    helm repo update && helm fetch xinlai/k8sapp helm install xinlai/k8sapp

    部署完成后如圖所示:

    注意:我們可以通過“--version”參數來部署指定版本的Helm應用:

    如圖所示,我們得到了Service的端口為“32705”,同樣的通過本地節點端口訪問如下所示:

    至此,通過Helm我們部署了一個簡單的“k8sapp”Demo應用。部署完成后,我們可以通過命令“helm list”來查看已部署的Release:

    Helm常用操作命令

    除了上面提到的一些Helm命令之外,一些常用的操作Demo如下所示:

    • 升級和更新

    helm upgrade zeroed-rodent xinlai/k8sapp --version 0.1.6

    #“zeroed-rodent”為Release名稱,“xinlai/k8sapp”為Chart地址。

    helm upgrade --set imageTag=20190731075922 zeroed-rodent xinlai/k8sapp

    #更新鏡像

    • 查看版本歷史

    helm history zeroed-rodent

    #查看Release歷史

    • 回滾

    helm rollback zeroed-rodent 1

    #回滾到版本1

    • 刪除

    helm delete zeroed-rodent

    #刪除Release

    • 下載Chart

    helm fetch xinlai/k8sapp

    #下載Chart

    • 基于本地Chart目錄部署

    helm install ./k8sapp

    #基于目錄“k8sapp”部署

    • 打包

    helm package ./k8sapp

    #會打包壓縮生成類似于“/k8sapp-0.1.5.tgz”的文件

    • 搜索

    helm search k8sapp

    #在所有倉庫里搜索Chart“k8sapp”

    • 啟動本地倉儲服務

    helm serve

    #默認地址為“127.0.0.1:8879”,可以使用“--address”參數綁定其他地址和端口

    往期內容

    Docker+ Kubernetes已成為云計算的主流(二十六)

    容器化之后如何節省云端成本?(二十七)

    了解Kubernetes主體架構(二十八)

    使用Minikube部署本地Kubernetes集群(二十九)

    使用kubectl管理k8s集群(三十)

    使用Kubeadm創建k8s集群之部署規劃(三十一)

    使用Kubeadm創建k8s集群之節點部署(三十二)

    集群故障處理之處理思路以及健康狀態檢查(三十三)

    集群故障處理之處理思路以及聽診三板斧(三十四)

    使用WebDeploy部署遠程IIS網站

    使用Kubectl部署應用

    通過Service訪問應用 (1)

    通過Service訪問應用 (2)

    使用Ingress來負載分發微服務

    利用Helm簡化Kubernetes應用部署(1)

    轉載是一種動力 分享是一種美德


    總結

    以上是生活随笔為你收集整理的利用Helm简化Kubernetes应用部署(2)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。