亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

K8s-helm簡(jiǎn)介及基本概念詳解

 更新時(shí)間:2022年07月19日 14:45:42   作者:xycloud  
?Helm?使用的包格式稱為?chart,它是一個(gè)描述?Kubernetes?相關(guān)資源對(duì)象的文件集合,這篇文章主要介紹了K8s-helm簡(jiǎn)介及基本概念,需要的朋友可以參考下

Helm簡(jiǎn)介

一、什么是 Helm(官網(wǎng):https://helm.sh/)

?在沒使用 helm 之前,向 kubernetes 部署應(yīng)用,我們要依次部署 deployment、svc 等,步驟較繁瑣。況且隨著很多項(xiàng)目微服務(wù)化,復(fù)雜的應(yīng)用在容器中部署以及管理顯得較為復(fù)雜,helm 通過打包的方式,支持發(fā)布的版本管理和控制,很大程度上簡(jiǎn)化了 Kubernetes 應(yīng)用的部署和管理,就像 Java 使用 maven;node 使用 npm;python 使用 pip;Linux 使用 yum **

?Helm 本質(zhì)就是讓 K8s 的應(yīng)用管理(Deployment,Service 等 ) 可配置,能動(dòng)態(tài)生成。通過動(dòng)態(tài)生成 K8s 資源清單文件(deployment.yaml,service.yaml)。然后調(diào)用 Kubectl 自動(dòng)執(zhí)行 K8s 資源部署**。

helm的主要功能:

#查找要安裝和使用的預(yù)打包軟件
#輕松創(chuàng)建和托管自己的軟件包
#將軟件包安裝到任何 K8S 集群中
#查詢集群以查看已安裝和正在運(yùn)行的程序包
#更新、刪除、回滾或查看已安裝軟件包的歷史記錄

二、Helm中的基本概念Chart

?Helm 使用的包格式稱為 chart,它是一個(gè)描述 Kubernetes 相關(guān)資源對(duì)象的文件集合。它的技術(shù)特點(diǎn)類似 jinja模版,以渲染模版的方式,生成運(yùn)行一個(gè)服務(wù)實(shí)例所需的一系列資源對(duì)象文件,并以此進(jìn)行服務(wù)的發(fā)布。通過這種方式,我們也可以十分簡(jiǎn)單的制作自定義的 chart。

Chart 有自已特定的目錄布局,我們以官方提供的 wordpress為例說(shuō)明,chart 的文件目錄結(jié)構(gòu)如下:

wordpress/
  Chart.yaml                # 包含了chart信息的YAML文件
  LICENSE                   # 可選: 包含chart許可證的純文本文件
  README.md                 # 可選: 可讀的README文件
  values.yaml               # chart 默認(rèn)的配置值
  values.schema.json        # 可選: 一個(gè)使用JSON結(jié)構(gòu)的values.yaml文件
  charts/                   # 包含chart依賴的其他chart
  crds/                     # 自定義資源的定義
  templates/                # 模板目錄, 當(dāng)和values 結(jié)合時(shí),可生成有效的Kubernetes manifest文件
  templates/NOTES.txt       # 可選: 包含簡(jiǎn)要使用說(shuō)明的純文本文件

  #Helm Chart 基本元素為 charts/、Chart.yaml、templates/、values.yaml,并保留 crds/ ,要正確的使用 chart 進(jìn)行發(fā)布,該元素是必不可少的。

Repo

?Helm chart 可以被存儲(chǔ)在專用的 HTTP 服務(wù)器上,稱為 chart 倉(cāng)庫(kù)(repositories),和 yum repository類似,chart 倉(cāng)庫(kù)提供了一個(gè) index.yaml 來(lái)描述一批 chart,并且提供了每個(gè) chart 的下載地址信息。

?Helm 客戶端可以指向多個(gè) chart 倉(cāng)庫(kù),默認(rèn)情況下是沒有配置倉(cāng)庫(kù)的,需要使用 helm repo add 來(lái)進(jìn)行添加。helm3 中對(duì)于一些常用服務(wù)的下載安裝,用 bitnami 倉(cāng)庫(kù) 取代了原來(lái)的stable 倉(cāng)庫(kù),但是仍保留了 stable 倉(cāng)庫(kù)的使用

Release

?當(dāng) chart 被發(fā)布后,Helm 庫(kù)會(huì)創(chuàng)建一個(gè) release 來(lái)跟蹤這個(gè)發(fā)布的對(duì)象,它的實(shí)質(zhì)是在 Kubernetes 中運(yùn)行的各種資源,service、deploymentconfigmap、secret 等,在 K8S 集群中的直接的表現(xiàn)就是一個(gè)或多個(gè) pod.

?Helm 的 release 是允許啟動(dòng)多個(gè)不同服務(wù)的,且每個(gè)服務(wù)之間遵循依賴關(guān)系,這點(diǎn)就比較類似 docker compose.

三、從Helm2到Helm3的變化

1.Helm3新增的功能

?Helm3新增了許多新功能,以下幾個(gè)功能需要特別指出:

  • release 的信息以新的形式存儲(chǔ)
  • 移除了 Tiller 組件
  • Helm3 包含了對(duì)新版本 Helm charts (Charts v2)的支持
  • Helm3 支持 library charts —— 一種作為其他 charts 元素的 charts
  • 將 Chart 推送保存到 OCI 注冊(cè)中心(類似 DockerRegistry ),以進(jìn)行復(fù)用
  • 升級(jí)Kubernetes資源時(shí)將應(yīng)用向戰(zhàn)略合并補(bǔ)丁
  • 支持使用 JSON Schema 對(duì) charts 的 values 進(jìn)行校驗(yàn)
  • 為了使Helm更安全,可用和健壯,已進(jìn)行了許多小的改進(jìn)。

2.重要變化概述

?1)移除Tiller

?Tiller 在 Helm2 中是一個(gè)重要的組成部分。Helm2 使用它和 GRPC 來(lái)處理 Helm chart 的安裝和管理,呈現(xiàn) chart 并將其推送到 Kubernetes API Server。Tiller 允許團(tuán)隊(duì)共享一個(gè) Kubernetes 集群,多個(gè) operator 可以使用同一組發(fā)行版,團(tuán)隊(duì)成員通過它就可以在一個(gè)共享的 Kubernetes 集群中管理復(fù)雜的應(yīng)用發(fā)布。

?但是從 Kubernetes 1.6 開始,考慮到安全性,集群默認(rèn)會(huì)開啟角色訪問控制(RBAC),這使得管理和配置Tiller會(huì)變得非常復(fù)雜,因?yàn)榭赡艿陌踩呗詳?shù)量太多了。為了簡(jiǎn)化安全模型實(shí)現(xiàn)方式,并使管理員/SRE不需要去深入研究 Kubernetes 的安全組件,helm 提供了一個(gè)不需要太過關(guān)注安全規(guī)則的默認(rèn)配置,但是這又會(huì)使得授權(quán)變得寬松,這反而會(huì)導(dǎo)致安全隱患。

?因此在 Helm3 中干脆移除了 Tiller,而是選擇從 Kubernetes API Server 中獲取信息來(lái)渲染 Charts 客戶端,并在 Kubernetes 中存在安裝記錄,這些過程既沒有 Tiller 也可以實(shí)現(xiàn)。

?Helm3 可以支持所有的 Kubernetes 認(rèn)證及鑒權(quán)等全部安全特性。Helm和本地的 kubeconfig flie 中的配置使用一致的權(quán)限。管理員可以按照自己認(rèn)為合適的粒度來(lái)管理用戶權(quán)限,下圖可詳細(xì)看出helm2到helm3的改變

?2)Chart倉(cāng)庫(kù)升級(jí)

?在 Helm3 中,helm search 除了支持本地 repository 搜索外,還支持 helm search hub 搜索 Artifact Hub 中所有公開的 charts。

?3)改進(jìn)升級(jí)策略:使用三路策略合并補(bǔ)丁

?在 Helm2 中,使用了雙路策略合并補(bǔ)丁,簡(jiǎn)單來(lái)說(shuō)就是在使用 helm upgrade 更新過程中,會(huì)比對(duì)本次發(fā)布的 chart manifest 和 最近一次發(fā)布的 chart manifest 的差異,以此來(lái)決定哪些更改被應(yīng)用到 Kubernetes 的資源中去。并且,Helm 只會(huì)將最后一次應(yīng)用的 chart manifest 作為 release 的當(dāng)前狀態(tài),如果 chart 狀態(tài)沒有更改,資源的活動(dòng)狀態(tài)就不會(huì)更改,也就是說(shuō)使用諸如 kubectl edit 、kubectl scale 這種外部方式進(jìn)行的修改不會(huì)被 Helm 識(shí)別的,這種情況下如果發(fā)生回滾操作,Helm 會(huì)由于 chart 并沒有發(fā)生變化而導(dǎo)致回滾失敗。

?而在 Helm3 中,這種策略被升級(jí)成了三路策略合并,Helm 在生成一個(gè)補(bǔ)丁時(shí),也會(huì)考慮之前老的 manifest 的活動(dòng)狀態(tài)。也就是說(shuō),在使用老的 chart manifest 生成新的補(bǔ)丁時(shí),Helm 還會(huì)考慮當(dāng)前的活動(dòng)狀態(tài),并將其與之前老的 manifest 進(jìn)行比對(duì),并再比對(duì)新的 manifest 是否有改動(dòng),并進(jìn)行自動(dòng)補(bǔ)全,以此來(lái)生成最終的更新補(bǔ)丁。

?示例說(shuō)明

用Chart渲染生成的manifest如下

containers:
- name: server
    image: my_app:2.0.0

通過非Helm的方式將應(yīng)用的活動(dòng)狀態(tài)修改如下:

containers:
- name: server
    image: my_app:2.0.0
- name: sidecar
  	image: dump_handler:1.0.0

而現(xiàn)在我們想要將應(yīng)用的鏡像升級(jí)到2.1.0,通過chart進(jìn)行升級(jí)操作

在 Helm2 中,由于不會(huì)考慮 chart 之外的修改,而是檢測(cè) chart 生成的 manifest 之間的區(qū)別,因此修改后的狀態(tài)如下:

containers:
- name: server
    image: my_app:2.1.0

而在 Helm3 中,通過三路合并策略,會(huì)檢查到除了 chart 的修改外,還多了一個(gè) sidecar 容器,因此會(huì)進(jìn)行補(bǔ)全,最終修改狀態(tài)如下:

containers:
- name: server
    image: my_app:2.1.0
- name: sidecar
  	image: dump_handler:1.0.0

?4)release名稱存儲(chǔ)位置改變

?在 Helm2 中,release 的相關(guān)信息都被保存在 Tiller 的 namespace下,所以 release 的名稱必須是唯一的;而隨著 Tiller 組件的移除, Helm3 中release 相關(guān)的信息都被保存在了應(yīng)用自己相對(duì)應(yīng)的 namespace 下,因此根據(jù) namespace 的隔離性質(zhì),在不同的 ns 下,release 的名稱可以重復(fù)。

?Helm3 中,在執(zhí)行 helm list 時(shí)需要添加 --all-namespaces 參數(shù)才能獲取到 Helm2 中同樣的結(jié)果

?5)requirements.yaml合并入 Chart.yaml

?動(dòng)態(tài)依賴關(guān)系的chart 依賴從 requirements.yamlrequirements.lock 移至 Chart.yamlChart.lock。 推薦在 Helm3 的新 chart 中使用 Chart API v2 的新格式,但是 Helm3 中依然可以識(shí)別 v1 版本,并且會(huì)自動(dòng)加載已有的 requirements.yaml 文件。

?在 Helm2 中,requirements.yaml 的表達(dá)式類似如下形式:

dependencies:
- name: mariadb
  version: 5.x.x
  repository: https://charts.helm.sh/stable
  condition: mariadb.enabled
  tags:
    - database

?而在 Helm3 中,表達(dá)式的形式并沒有變化,但是現(xiàn)在需要寫在 Chart.yaml 中。Chart 依然會(huì)下載和放置在 charts/ 目錄,所以 charts/ 目錄中的子 chart 不需要做任何修改,可以沿用 Helm2 的。

?6)CLI命令重命名

#刪除release
	helm delete ---> helm uninstall
#在 Helm2 中,如果要清楚 release 的各種資源,必須要使用 --purge 參數(shù),Helm3 中默認(rèn)就會(huì)啟用次功
#如果要保留歷史行為數(shù)據(jù),需執(zhí)行 
	helm uninstall ---> keep-history
	helm inspect ---> helm show
    helm feach ---> helm pull
#這些命令還保留了它們較舊的命令作為別名,因此您可以繼續(xù)以任何一種形式使用它們。

?7)簡(jiǎn)化模板對(duì)象 .Capabilities

?Capabilities 是 Helm 模版可以訪問的內(nèi)置對(duì)象之一,其提供了關(guān)于 Kubernetes 集群支持的功能的信息,包含以下內(nèi)容:

對(duì)象名稱描述
Capabilities.APIVersions集群的版本信息
Capabilities.APIVersions.Has $version說(shuō)明集群中的版本 (例如, batch/v1) 或是資源 (例如, apps/v1/Deployment) 是否可用
Capabilities.KubeVersion提供了查找 Kubernetes 版本的方法。可以獲取到 Major,Minor,GitVersion,GitCommit,GitTreeState,BuildDate,GoVersion,CompilerPlatform
Capabilities.TillerVersion提供了查找Tiller版本的方法。可以獲取到SemVerGitCommit, and GitTreeState.

四、Helm版本支持策略

?1、版本形式

?Helm 的版本用 x.y.z 的形式描述,x 是主版本,y 是次版本,z 是補(bǔ)丁版本。當(dāng)一個(gè) Helm 的新版本發(fā)布時(shí),都是針對(duì) Kubernetes 的一個(gè)特定版本編譯的,比如 3.0.0 基于 Kubernetes 的 1.16.2 的客戶端API版本構(gòu)建,則可以兼容 Kubernetes 1.16。

?2、可支持的版本偏差

?相較于 Helm2 對(duì)于 Kubernetes 次版本變更支持的嚴(yán)格(n-1),Helm3 可以向下兼容 n-3 的次版本,比如你使用一個(gè)針對(duì) Kubernetes 1.18 客戶端 API 版本編譯的 Helm3 版本,那么它可以支持的 Kubernetes 版本為 1.18、1.17、1.16、1.15 ;

?如果你使用一個(gè)針對(duì) Kubernetes 1.15 客戶端 API 版本編譯的 Helm2 版本,那么它可以支持的 Kubernetes 版本為 1.15、1.14。

? Helm 沒有向上兼容機(jī)制,故按照官方推薦安裝即可:

Helm 版本支持的 Kubernetes 版本
3.8.x1.23.x - 1.20.x
3.7.x1.22.x - 1.19.x
3.6.x1.21.x - 1.18.x
3.5.x1.20.x - 1.17.x
3.4.x1.19.x - 1.16.x
3.3.x1.18.x - 1.15.x
3.2.x1.18.x - 1.15.x
3.1.x1.17.x - 1.14.x
3.0.x1.16.x - 1.13.x
2.16.x1.16.x - 1.15.x
2.15.x1.15.x - 1.14.x
2.14.x1.14.x - 1.13.x
2.13.x1.13.x - 1.12.x
2.12.x1.12.x - 1.11.x
2.11.x1.11.x - 1.10.x
2.10.x1.10.x - 1.9.x
2.9.x1.10.x - 1.9.x
2.8.x1.9.x - 1.8.x
2.7.x1.8.x - 1.7.x
2.6.x1.7.x - 1.6.x
2.5.x1.6.x - 1.5.x
2.4.x1.6.x - 1.5.x
2.3.x1.5.x - 1.4.x
2.2.x1.5.x - 1.4.x
2.1.x1.5.x - 1.4.x
2.0.x1.4.x - 1.3.x

到此這篇關(guān)于K8s-helm簡(jiǎn)介的文章就介紹到這了,更多相關(guān)K8s-helm簡(jiǎn)介內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論