Kubernetes k8s集群之包管理器Helm方式
每個成功的軟件平臺都有一個優(yōu)秀的打包系統(tǒng),比如Debian、Ubuntu 的 apt,RedHat、CentOS
的 yum。Helm 則是 Kubernetes上 的包管理器,方便我們更好的管理應用
一.Helm概述
1.Helm的簡介
Helm本質就是讓K8s的應用管理(Deployment、Service等)可配置,可以通過類似于傳遞環(huán)境變量的方式能動態(tài)生成。通過動態(tài)生成K8s資源清單文件(deployment.yaml、service.yaml)。 然后調用 Kubectl 自動執(zhí)行 K8s 資源部署。
在沒使用 helm 之前,向 kubernetes 部署應用,我們要依次部署 deployment、svc 等,步驟較繁瑣。 況且隨著很多項目微服務化,復雜的應用在容器中部署以及管理顯得較為復雜,helm 通過打包的方式,支持發(fā)布的版本管理和控制, 很大程度上簡化了 Kubernetes 應用的部署和管理。
Helm 是官方提供的類似于 YUM 的包管理器,是部署環(huán)境的流程封裝。
Helm的官網(wǎng)地址:https://helm.sh/
2.Helm的三個重要概念
在Helm中 有三個重要的概念,分別為:Chart 、Repository 和 Release
- Chart:Helm 的軟件包,采用 TAR 格式。是創(chuàng)建一個應用的信息集合,包括各種 Kubernetes 對象的配置模板、參數(shù)定義、依賴關系、文檔說明等。chart 是應用部署的自包含邏輯單元。 可以將 chart 想象成 apt、yum 中的軟件安裝包。
- Release:是 chart 的運行實例,代表了一個正在運行的應用。當 chart 被安裝到 Kubernetes 集群,就生成一個 release。chart 能夠多次安裝到同一個集群,每次安裝都是一個 release。
- Repository(倉庫):Charts 倉庫,用于集中存儲和分發(fā) Charts。Repository 本質上是一個 Web 服務器,該服務器保存了一系列的 Chart 軟件包以供用戶下載,并且提供了一個該 Repository 的 Chart 包的清單文件以供查詢。Helm 可以同時管理多個不同的 Repository。
還有一個在Helm3版本中就被移除的概念
Tiller: Helm 2.x版本中,Helm采用Client/Server的設計,Tiller就是Helm的Server部分,需要具備集群管理員權限才能安裝到K8s集群中運行。
Tiller與Helm client進行交互,接收client的請求,再與K8s API Server通信,根據(jù)傳遞的Charts來生成Release。而在最新的Helm 3.x中,據(jù)說是為了安全性考慮移除了Tiller。
Helm在k8s集群運用中,總的來講其作用過程:Helm 安裝 charts 到 Kubernetes 集群中,每次安裝都會創(chuàng)建一個新的 release。
你可以在 Helm 的 chart repositories 中尋找新的 chart
3.Helm2與Helm3的的區(qū)別
helm2的部署方式與使用
Helm2 是 C/S 架構,主要分為客戶端 helm 和服務端 Tiller。在 Helm 2 中,Tiller 是作為一個Deployment 部署在 kube-system 命名空間中,很多情況下,我們會為 Tiller 準備一個ServiceAccount ,這個 ServiceAccount 通常擁有集群的所有權限。
用戶可以使用本地 Helm 命令,自由地連接到 Tiller 中并通過 Tiller 創(chuàng)建、修改、刪除任意命名空間下的任意資源。
Helm3的部署與使用
在 Helm 3 中,Tiller 被移除了。新的 Helm 客戶端會像 kubectl 命令一樣,讀取本地的 kubeconfig文件,使用我們在 kubeconfig 中預先定義好的權限來進行一系列操作
二.Helm 部署
1.安裝 helm
上傳helm-v3.6.0-linux-amd64.tar.gz tar -zxvf helm-v3.6.0-linux-amd64.tar.gz mv linux-amd64/helm /usr/local/bin/ helm version //命令補全 source <(helm completion bash)
2.使用 helm 安裝 Chart
//添加常用的 chart 倉庫, helm repo add bitnami https://charts.bitnami.com/bitnami helm repo add stable http://mirror.azure.cn/kubernetes/charts helm repo add aliyun https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts helm repo add incubator https://charts.helm.sh/incubator //查看 charts 列表 helm repo list //更新 charts 列表 helm repo update //查看 stable 倉庫可用的 charts 列表 helm search repo stable //刪除 incubator 倉庫 helm repo remove incubator helm search repo <倉庫名稱> #查看倉庫中可用的chart包列表 helm search repo <軟件名> #在倉庫列表查詢中可用的chart包 helm search repo <chart包> -l #查看倉庫中指定的chart包所有可用的歷史版本列表,<chart包>格式為<倉庫名稱/軟件包> helm show chart <chart包> #查看chart包的基本信息
chart包安裝、卸載: helm install -n <命名空間> <實例名稱> <chart包> [--version <chart版本>] #通過chart包安裝實例,默認安裝最新版本 helm ls -n <命名空間> #查看helm安裝的實例 helm list -n <命名空間> helm status -n <命名空間> <實例名稱> #查看實例的狀態(tài) helm uninstall -n <命名空間> <實例名稱> #卸載實例
3.Helm 自定義模板
chart包的管理: helm pull <chart包> #從倉庫下載chart包 helm create <chart包> #自建chart包 helm lint <chart包目錄> #檢查chart包中的文件語法格式 helm package <chart包目錄> #將chart包目錄打包成tar格式壓縮包
vim Chart.yaml
vim values.yaml 修改此文件中的配置 helm lint myapp/ #檢查chart包中的文件語法格式 helm package myapp/ #將chart包目錄打包成tar格式壓縮包 helm install -n xy101 myapp-1 myapp-1.0.0.tgz #部署
升級:修改配置文件后重新生成chart包 helm upgrade -n <命名空間> <實例名稱> <chart包> #升級實例 helm history -n <命名空間> <實例名稱> #查看實例的歷史版本列表 helm rollback -n <命名空間> <實例名稱> <REVISION> #回滾實例到指定的chart歷史版本
4.Helm 倉庫
helm 可以使用 harbor 作為本地倉庫,將自定義的 chart 推送至 harbor 倉庫
//安裝 harbor #上傳 harbor-offline-installer-v1.9.1.tgz 和 docker-compose 文件到 /opt 目錄 cd /opt cp docker-compose /usr/local/bin/ chmod +x /usr/local/bin/docker-compose tar zxf harbor-offline-installer-v1.9.1.tgz cd harbor/ vim harbor.yml hostname: 192.168.80.13 harbor_admin_password: Harbor12345 #admin用戶初始密碼 data_volume: /data #數(shù)據(jù)存儲路徑,自動創(chuàng)建 chart: absolute_url: enabled #在chart中啟用絕對url log: level: info local: rotate_count: 50 rotate_size: 200M location: /var/log/harbor #日志路徑 #安裝帶有 Clair service 和 chart 倉庫服務的 Harbor ./install.sh --with-clair --with-chartmuseum //安裝 push 插件 #在線安裝 helm plugin install https://github.com/chartmuseum/helm-push #離線安裝 wget https://github.com/chartmuseum/helm-push/releases/download/v0.8.1/helm-push_0.8.1_linux_amd64.tar.gz mkdir -p ~/.local/share/helm/plugins/helm-push tar -zxvf helm-push_0.8.1_linux_amd64.tar.gz -C ~/.local/share/helm/plugins/helm-push
#登錄 Harbor WEB UI 界面,創(chuàng)建一個新項目 瀏覽器訪問:http://192.168.80.101 ,默認的管理員用戶名和密碼是 admin/Harbor12345 點擊 “+新建項目” 按鈕 填寫項目名稱為 “chart_repo”,訪問級別勾選 “公開”,點擊 “確定” 按鈕,創(chuàng)建新項目 #添加倉庫 helm repo add harbor http://192.168.80.13/chartrepo/chart_repo --username=admin --password=Harbor12345 #注:這里的 repo 的地址是<Harbor URL>/chartrepo/<項目名稱>,Harbor 中每個項目是分開的 repo。如果不提供項目名稱,則默認使用 library 這個項目。 helm repo ls #推送 chart 到 harbor 中 cd /opt/helm helm push nginx harbor
總結
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
關于@ComponentScan?TypeFilter自定義指定掃描bean的規(guī)則
這篇文章主要介紹了關于@ComponentScan?TypeFilter自定義指定掃描bean的規(guī)則,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-09-09基于javaweb+jsp的游泳館會員管理系統(tǒng)(附源碼)
這篇文章主要介紹了基于javaweb+jsp的游泳館會員管理系統(tǒng),開發(fā)工具eclipse/idea/myeclipse/sts等均可配置運行,此源代碼社和課程設計,大作業(yè)及畢業(yè)設計項目,需要的朋友可以參考下2022-04-04