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