Kubernetes CKA課程筆記 36
接著為了建置Ingress,主要分為兩個步驟:
- 安裝Ingress Controller
- 建立Ingress Component的manifest file描述Routing rules
所以首先要先透過Helm來安裝Ingress Controller:
何謂Helm, Helm Charts:
- 是為Kubernetes的打包管理系統
- 並有幾個重要的功能代表
- 試考慮今天要在Kubernetes Cluster內建置"ElasticSearch的應用系統"
- 的情況,我們將需要建立幾樣Kubernetes元件:
- 1.Stateful Set : 建立應用系統當作DB一樣
- 2.ConfigMap : 設置外部設定檔
- 3.Secret : 加密的外部設定檔
- 4.K8s User權限設置
- 5.一些Services
- 以上各種元件找範例Configuration Files一個個收集後建起來驗證
- 肯定要花不少時間
- 所以若有一個地方剛好已經統一收集好”ElasticSearch的應用系統”
- 所需的上述YAML Configuration Files
- 然後大家要用的時候就可以統一拿去使用一樣版本
- 這樣綁在一起的YAML Files就給一個稱呼為 : Helm Charts
- 而統一儲存的地方則稱之為Helm Repository
- 而Helm就是提供從Helm Repository下載或上傳Helm Charts的系統
- 通常會使用到的就是一些比較複雜的系統,例如:
- Database APP,mongo DB,MY SQL,ElasticSearch
- 或是監控系統例如Prometheus等等會比較複雜的K8s元件建置時候
- 只要透過Helm install Charts Name指令來快速重複利用YAML建置
- 有時候不確定是否已經有人建立相關Helm Charts,也能透過指令查找:
helm search <關鍵字>
- 或乾脆地到公開的Helm庫(Helm Hub)去找
- 當然也會有私有庫(Private Registries)的相關支援
Helm的第二個重要功能 →Templating Engine:
- 先假定要在某個K8s Cluster內部屬N個不同的微服務應用Pod
- 我們可能會寫出N個Pod的Configuration YAML Files
- 這些YAML Files幾乎格式都長得差不多,可能差異只在例如:
- 應用程式名稱,版本,Docker image名稱或版本
- 不用Helm情況下就是每一個Pod都要YAML檔:
- 同理deployment或Service的YAML檔也是要寫N份
- 然後內容就只差一些名稱或版本(就那幾行或值不一樣)
- 而透過Helm的Template則可以建立通用的藍圖
- 並且裡面有些欄位值是可以透過placeholders動態傳入的
- 這樣的檔案就稱為 →Template File (類似如下圖範例)
- 上圖這些{{.Values…}}的值可以來自於外部設定檔
- 這類外部設定檔稱為:values store yaml (類似如下圖)
- 並且可以對應傳入給Template執行使用
- 並且這類.Values.的數值也可以不用values store yaml傳入
- 而可以透過--設定的flag,這樣的形式在執行Template直接代入
- 透過以上講解Template,原本N個Configuration YAML Files就只要寫一個
- 這樣的方式特別適合用於CI/CD在建置相關PIPELINE時使用
其他Helm應用場景:
- 不同環境建置(DEV / Staging / Prod等)
- 要提供給各環境建置的K8s元建打包為Helm Charts給不同環境佈署
- 甚至是不同的K8s Cluster佈署使用,並且只需要執行一次指令就佈署全部
Helm Chart Structure:
- 基本上會是一個目錄結構與各層解說(如下圖示)
- 當執行以下指令時:
helm install <chartname>
- 裡面的template file就會被填入values.yaml內的值
- 並且執行建立出Manifests Files(也就是Configuration Files)
- 並且其實目錄內還可以允許放置"Readme"或"licence"等檔案
了解Value Injection:
- 上面有說到values.yaml是用來當template的Default注入的值
- 也就是可以用其他值依狀況來取代values.yaml內容值,例如執行指令:
helm install --values=my-values.yaml <chartName>
- 將得到以下結果:
- 另外還有另一個可以取代預設的values.yaml裡面的值,例如執行:
helm install --set version=2.0.0
- 如上也可以直接給值,但是就沒有檔案紀錄了
Helm安裝:
- 經過上述介紹已經知道何謂Helm
- 接著在master node上進行Helm安裝,安裝前看到:
- 接著來到Helm官網安裝文件:
- 然後到master機上貼上執行!!(一口氣安裝完成!)
- 接著確認安裝,可以試著執行helm
- 也可執行版本確認指令:
helm version
- 接著就可以用helm來安裝”K8s Nginx Ingress Controller”到K8s Cluster
- 但是有一點應該要有疑問的是:
Helm是怎麼認得整個K8s Cluster?
- 早在第17篇筆記上,剛安裝的kubectl也是不認得整個K8s Cluster
- 後來是在使用者home目錄下
- 將有描述K8s Cluster的"~/.kube/config"設置好
- 也就是kubectl預設會看”~/.kube/config”來確認Cluster資訊