華為云云原生鉆石集訓營 第十一課:Kubernetes應用管理深度剖析
學完本課程后,您將能夠:
1.了解幾種主流K8S應用管理生態的使用場景。
2.了解Helm chart模板機制
3.了解Operator機制
目錄:
1. K8S應用模板的使用場景介紹
2. Helm chart模板機制詳解
3. Operator機制詳解
前言:
在云原生的理念被越來越多的人所熟知,Kubernetes慢慢成為容器編排平臺的事實標準以后,如何更好地在容器集群上運行和管理應用,特別是復雜應用如何完成多資源間的編排、打包發布、標準化交付等,是大家尤為關心的問題。Helm通過模板-參數的形式來支持對應用的多種資源進行編排,成為k8s領域最熱門的應用包管理工具
Helm能夠很好地幫我們實現k8s應用打包和標準化交付,而對于實例運行態的生命周期管理,則通過資源的基礎生命周期動作來驅動。然而,對于一些復雜應用的生命周期管理,基本的資源操作無法很好地勝任,可能需要根據應用自身特點,在一些關鍵生命周期節點上補充額外的動作。對此,CoreOS首先倡導了Operator的理念,即將特定于應用程序的操作知識編碼到軟件中,利用功能強大的Kubernetes抽象來正確地運行
1. K8S應用模板的使用場景介紹
Helm 能給我們帶來什么?
完整的應用通常不只是簡單的deployment,StatefulSet等負載資源,通常還包括配套的service, PV/PVC, configmap等一系列資源。我們在進行實例下發、升級、更新換代等一系列生命周期操作時,這些資源都需要統籌考慮.
Helm可以幫助開發者完成應用打包發布、版本管理、應用的創建刪除、升級更新等生命周期管理操作
什么是Operator?
以分布式系統為代表的有狀態應用,并不像Web應用一樣“開箱即用”,這些系統需要特定應用領域的知識才能正確擴展,升級和重新配置,同時防止數據丟失或不可用
Operator其實并不是一個工具,而是為了解決一個問題而存在的一個思路,將特定于應用程序的操作知識編碼到軟件中,利用功能強大的Kubernetes抽象來正確地運行和管理應用程序
Helm Vs Operator
對比:
Helm是一種標準化的普適性工具,目標是把你的K8S資源模板化,方便共享,進而在不同的配置中重用;
Operator本質上是針對特定的場景去做有狀態服務,或者說針對擁有復雜應用的應用場景去簡化其運維管理的工具,Operator與特定應用是一對一的關系;
關系:
Helm與Operator并不是完全獨立的,很多Operator能做的事情,如應用集群初始化配置、監控更新等通過一些init Container,以及Helm的Hook機制等,最終也能夠達到同等效果。只不過這些配置可能顯得極為復雜且不易維護,得不償失;
此外,兩者還可能有結合的場景,比如市面上很多開源項目的Operator本身就是通過Helm進行部署和管理的
總結:
helm是為了配置分離,operator則是針對復雜應用的自動化管理,兩者的出發點和面向的主要目標場景不同
2.了解Helm chart模板機制
核心組件:
Chart Repository: Chart包存儲倉庫
Helm Client:是終端用戶的命令行客戶端,負責:本地chart開發
管理倉庫
管理發布
與K8S Server端交互,發送chart (release)安裝、升級或卸載請求
Chart包示例
關鍵要素:
Chart.yaml:包含了chart信息的YAML文件
requirements.yaml:可選,列舉chart的依賴關系
charts目錄:可選,chart依賴的其他chart
crds目錄:可選,自定義資源的定義
templates目錄:模板目錄,內含go template格式的模板文件
values.yaml文件: chart的默認配置值,與template結合,生成有效的kubernetes manifest文件
values.schema.json文件:可選,JSON schema格式的value規格描述
Chart.yaml示例
apiVersion: chart API版本(必需)
name: chart名稱(必需)
version:語義化版本(必需)
kubeVersion:兼容Kubernetes版本的語義化版本(可選)
description:一句話對這個項目的描述(可選)
type: chart類型(可選)
keywords:
關于項目的一組關鍵字(可選)
home:項目home頁面的URL(可選)
sources:項目源碼的URL列表(可選)
maintainers: #(可選)
name:維護者名字(每個維護者都需要)
email:維護者郵箱(每個維護者可選)
url:維護者URL(每個維護者可選)
icon:用做icon的SVG或PNG圖片URL(可選)
appVersion:包含的應用版本(可選)。不需要是語義化,建議使用引號
deprecated: 不被推薦的chart(可選,布爾值)
annotations:
example:按名稱輸入的批注列表(可選)
內置對象
Release:代表Release對象,屬性包含: Release.Name、Release.Namespace、Release.Revision等
Values:表示values.yaml文件數據
Chart:表示Chart.yaml數據
Files:用于訪問chart中非標準文件
Capabilities:用于獲取k8s集群的一些信息
- Capabilities.KubeVersion.Major: K8s的主版本
Template:表示當前被執行的模板
- Name:表示模板名,如: mychart/templates/mytemplate.yaml
- BasePath:表示路徑,如: mychart/templates
其中Release代表一次應用發布,下面是Release對象包含的屬性字段:
Release.Name - release的名字,一般通過Chart.yaml定義,或者通過helm命令在安裝應用的時候指定
Release.Time - release安裝時間
Release.Namespace - k8s名字空間
Release.Revision - release版本號,是一個遞增值,每次更新都會加一
Release.IsUpgrade - true代表,當前release是一次更新.
Release.lsInstall ? - true代表,當前release是一次安裝
Release.Service: ? ?- release服務的名稱(始終是Helm)
子模板
在chart中以“下劃線”開頭的文件,稱為”子模版”。
例如在_helper.tpl中定義子模塊,格式: {{- define "模版名字"-}}模版內容ff- end -.}
引用模板,格式: {{include "模版名字"作用域}}
3.Operator機制詳解
通過了解helm和CRD,我們就知道helm沒法管理資源的完整生命期,它就是推送YAML就拍拍屁股走人了;而只有CRD才能持續的監聽K8S資源對象的變化事件,進行全生命期的監控響應,高可靠的完成部署交付。
Operator的場景就是專門給有狀態應用而設計的。
為什么只給有狀態應用?
因為無狀態應用簡單啊,沒有服務間的交互,要再開一家火鍋店,跟k8s說一聲,開一家一樣的就可以了。
有狀態不一樣,你開了一家火鍋店以后,客戶的信息怎么同步,就涉及到與別的火鍋店交涉的問題,當然你也可以寫個別的程序做這個數據同步的操作。
但是operator做的事情就是能自動識別到火鍋店客戶信息的不對稱,主動同步,你只用告訴operator我要再開一家連鎖火鍋店就好了。
關鍵組件和概念:
Operator Lifecycle Manager:負責管理具體應用Operator的生命周期
應用業務Operator:由開發者針對特定應用業務開發的Operator本身
Operator Registry:存儲CSV
(ClusterServiceVersion )和自定義資源定義(CRD)等構成的應用配置
ClusterServiceVersion(CSV):由Operator元數據創建的YAML清單,可OLM在集群中運行Operator
Subscription:通過跟蹤安裝包中的channel保證CSV的版本更新
InstallPlan:計算自動安裝或升級CSV過程中需創建的資源集合
本課總結:
Helm:我們可以將Helm看作Kubernetes下的apt-get/yum。Helm是Deis(https://deis.com/)開發的一個用于kubernetes的包管理器:
1.對于使用者而言,使用Helm后不用需要了解Kubernetes的Yaml語法并編寫應用部署文件,可以通過Helm下載并在kubernetes上安裝需要的應用。
2.對于使用者而言,使用Helm后不用需要了解Kubernetes的Yaml語法并編寫應用部署文件,可以通過Helm下載并在kubernetes上安裝需要的應用。
3.除此以外,Helm還提供了kubernetes上的軟件部署,刪除,升級,回滾應用的能力
Operator:
Kubernetes Operator是一種封裝、部署和管理Kubernetes應用的方法。Kubernetes Operator是一種特定于應用的控制器,可擴展Kubernetes API的功能,來代表Kubernetes 用戶創建、配置和管理復雜應用的實例。
它基于基本Kubernetes資源和控制器概念構建,但又涵蓋了特定于域或應用的知識,用于實現其所管理軟件的整個生命周期的自動化
參考鏈接:
Helm官方文檔: https://helm.sh/docs
GO Template鏈接: https://golang.org/pkg/text/template
Operator文檔: https://operatorhub.io/what-is-an-operator
Kubernetes 云原生 應用管理與運維平臺 ServiceStage
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。