Helm用途
Helm把Kubernetes資源(比如deployments舒憾、services或 ingress等) 打包到一個(gè)chart中抵卫,而chart被保存到chart倉庫仰坦。
通過chart倉庫可用來存儲(chǔ)和分享chart。
Helm使發(fā)布可配置參數(shù),支持發(fā)布應(yīng)用配置的版本管理躯砰,簡(jiǎn)化了Kubernetes部署應(yīng)用的版本控制枝恋、打包创倔、發(fā)布、刪除焚碌、更新等操作畦攘。
可以簡(jiǎn)單理解為: 應(yīng)用商店
helm3 變化
helm3 與helm2的變動(dòng)很大,主要有幾處
1. 去除Tiller 和 helm serve
現(xiàn)在helm命令通過kubeconfig 直接操作k8s集群十电,類似于kubectl
Helm使用與kubectl上下文相同的訪問權(quán)限知押,也無需再使用helm init來初始化Helm
這點(diǎn)在helm部署和使用上方便了很多,也減少了服務(wù)發(fā)布可能遇到的因?yàn)閠iller引起的異常
[圖片上傳失敗...(image-788aae-1586178269860)]
而且移除了 helm serve 的功能鹃骂,不再本地提供chart倉庫能力?
2. 預(yù)定義倉庫被移除台盯,添加helm hub
helm search 現(xiàn)在區(qū)分 repo 和hub
repo 是自己手動(dòng)添加的源
比如官方的有穩(wěn)定版和在建設(shè)的,還有ibm的
helm repo add stable https://kubernetes-charts.storage.googleapis.com
helm repo add incubator https://kubernetes-charts-incubator.storage.googleapis.com/
helm repo add ibmstable https://raw.githubusercontent.com/IBM/charts/master/repo/stable
# 此處 repo add 的時(shí)候畏线,如果名稱已存在了也不提醒静盅,居然直接覆蓋了,是bug吧
hub 是 helm 的中心庫寝殴,各軟件商需要在 hub 把應(yīng)用更新到最新蒿叠,我們才能在上面查到最新的,同dockerhub
這個(gè)建設(shè)還不久蚣常,好處是范圍比較廣泛, hub 搜到的包需要進(jìn)入hub頁面查看下載地址
我們可以把 hub 和 google repo 配合起來食用市咽,效果更佳
helm search hub mysql
3. Values 支持 JSON Schema 校驗(yàn)器
當(dāng)我們運(yùn)行 helm install 、 helm upgrade 抵蚊、 helm lint 施绎、 helm template 命令時(shí)曼验,JSON Schema 的校驗(yàn)會(huì)自動(dòng)運(yùn)行,如果失敗就會(huì)立即報(bào)錯(cuò)粘姜。
這樣等于是先都校驗(yàn)了一遍鬓照,再創(chuàng)建。 kubectl 說你呢孤紧,能不能學(xué)學(xué)2蝰伞!号显!
我測(cè)試了一下
helm pull stable/mysql
tar -zxvf mysql-1.6.2.tgz
cd mysql
vim values.yaml
# 把port: 3306 改成 port: 3306aaa
# 安裝測(cè)試臭猜,會(huì)校驗(yàn)port的格式,而且確實(shí)是在安裝之前押蚤,一旦有錯(cuò)任何資源都不會(huì)被創(chuàng)建
helm install mysqlll .
Error: unable to build kubernetes objects from release manifest: error validating "": error validating data: ValidationError(Service.spec.ports[0].port): invalid type for io.k8s.api.core.v1.ServicePort.port: got "string", expected "integer"
4. 代碼復(fù)用 - Library Chart 支持
Helm 3 中引入了一種新的 Chart 類型蔑歌,名為 Library Chart 。它不會(huì)部署出一些具體的資源揽碘,只能被其他的 Chart 所引用次屠,提高代碼的可用復(fù)用性。當(dāng)一個(gè) Chart 想要使用該 Library Chart內(nèi)的一些模板時(shí)雳刺,可以在 Chart.yaml 的 dependencies 依賴項(xiàng)中指定劫灶。
5. requirements.yaml 被整合到了 Chart.yaml 中,但格式保持不變
還有一些其他的功能掖桦,比如 helm test 等本昏,不屬于主要功能,且屬于測(cè)試階段枪汪,我還沒有去嘗試涌穆。
helm2/3 命令差異
本節(jié)命令差異部分摘自 https://blog.csdn.net/liumiaocn/article/details/103380446
作者: liumiaocn
Helm 2和Helm 3在使用上還是有些區(qū)別的,除了在Helm 3中移除了Tiller雀久,一些常用的命令也發(fā)生了變化宿稀,在這篇文章中進(jìn)行簡(jiǎn)單的整理。
常用命令一覽
命令 | Helm 2 | Helm 3 | 命令說明區(qū)別 | 命令說明 |
---|---|---|---|---|
create | 有 | 有 | 無 | create a new chart with the given name |
delete | 有 | 無 | - | given a release name, delete the release from Kubernetes |
dependency | 有 | 有 | 無 | manage a chart’s dependencies |
fetch | 有 | 無 | - | download a chart from a repository and (optionally) unpack it in local directory |
get | 有 | 有 | 有 | download a named release |
history | 有 | 有 | 無 | fetch release history |
home | 有 | 無 | - | displays the location of HELM_HOME |
init | 有 | 無 | - | initialize Helm on both client and server |
inspect | 有 | 無 | - | inspect a chart |
install | 有 | 有 | 有 | install a chart archive |
lint | 有 | 有 | 無 | examines a chart for possible issues |
list | 有 | 有 | 無 | list releases |
package | 有 | 有 | 無 | package a chart directory into a chart archive |
plugin | 有 | 有 | 有 | add, list, or remove Helm plugins |
repo | 有 | 有 | 無 | add, list, remove, update, and index chart repositories |
reset | 有 | 無 | - | uninstalls Tiller from a cluster |
rollback | 有 | 有 | 無 | roll back a release to a previous revision |
search | 有 | 有 | 無 | search for a keyword in charts |
serve | 有 | 無 | - | start a local http web server |
status | 有 | 有 | 無 | displays the status of the named release |
template | 有 | 有 | 無 | locally render templates |
test | 有 | 有 | 有 | test a release |
upgrade | 有 | 有 | 無 | upgrade a release |
verify | 有 | 有 | 無 | verify that a chart at the given path has been signed and is valid |
version | 有 | 有 | 有 | print the client/server version information |
env | 無 | 有 | - | Helm client environment information |
help | 無 | 有 | - | Help about any command |
pull | 無 | 有 | - | download a chart from a repository and (optionally) unpack it in local directory |
show | 無 | 有 | - | show information of a chart |
uninstall | 無 | 有 | - | uninstall a release |
Helm3: 不再存在的Helm2的命令
在前面的文章示例中岸啡,我們發(fā)現(xiàn)helm init已經(jīng)在Helm 3中不存在了原叮。類似的共有如下7條命令赫编,在Helm 3中或刪除或改名或則功能增強(qiáng)巡蘸,比如因?yàn)門iller的去除,所以導(dǎo)致了reset命令沒有存在的意義擂送,同時(shí)init存在僅试没模客戶端需要設(shè)定的功能,所以被去除了嘹吨。另外諸如fetch命令搬味,而在Helm 3中提供了pull命令予以替代。本來home命令用于顯示HELM_HOME環(huán)境變量,而在Helm 3中提供env命令可以顯示所有的環(huán)境變量信息碰纬,用增強(qiáng)的功能予以了替換萍聊。但是無論如何,總之已經(jīng)無法在Helm 3中直接使用如下7條命令悦析。
命令 | Helm 2 | Helm 3 | 命令說明 |
---|---|---|---|
delete | 有 | 無 | given a release name, delete the release from Kubernetes |
fetch | 有 | 無 | download a chart from a repository and (optionally) unpack it in local directory |
home | 有 | 無 | displays the location of HELM_HOME |
init | 有 | 無 | initialize Helm on both client and server |
inspect | 有 | 無 | inspect a chart |
reset | 有 | 無 | uninstalls Tiller from a cluster |
serve | 有 | 無 | start a local http web server |
Helm3: 相較與Helm2新增的命令
相較于Helm 2寿桨,從helm --help中獲得的信息看到如下5條命令在Helm 3中為新增的命令。
命令 | Helm 2 | Helm 3 | 命令說明 |
---|---|---|---|
env | 無 | 有 | Helm client environment information |
help | 無 | 有 | Help about any command |
pull | 無 | 有 | download a chart from a repository and (optionally) unpack it in local directory |
show | 無 | 有 | show information of a chart |
uninstall | 無 | 有 | uninstall a release |
稍作分析强戴,會(huì)發(fā)現(xiàn)如下事實(shí):
env是對(duì)被刪除的命令home的強(qiáng)化
pull是對(duì)被刪除的命令fetch的替換
show是對(duì)被刪除的命令inspect的替換
help命令本身在Helm 2時(shí)代就可以使用亭螟,只是helm --help里面沒有顯示,算是文檔自包含的強(qiáng)化
uninstall是功能特性的增強(qiáng)
Helm3: 命令說明發(fā)生變化
由于Tiller的移除骑歹,版本顯示命令helm version的表述從顯示client/server的版本信息變成了顯示client的版本信息预烙,類似的發(fā)生變化的共有5條命令,到底是文檔的變化還是功能性的反映道媚,在后續(xù)的文章中將繼續(xù)通過實(shí)例進(jìn)行進(jìn)一步的說明扁掸。
命令 | Helm 2 | Helm 3 | 命令說明區(qū)別 | Helm2命令說明 | Helm3命令說明 |
---|---|---|---|---|---|
get | 有 | 有 | 有 | download a named release download extended information of a named release | |
install | 有 | 有 | 有 | install a chart archive install a chart | |
plugin | 有 | 有 | 有 | add, list, or remove Helm plugins install, list, or uninstall Helm plugins | |
test | 有 | 有 | 有 | test a release run tests for a release | |
version | 有 | 有 | 有 | print the client/server version information print the client version information |
Helm3: 其他變化
并不是說helm --help沒有變化的,使用上就沒有區(qū)別最域,以repo和install為例也糊,在使用上都發(fā)生了變化,但是在helm自身提供的幫助信息中卻未提供羡宙,這些也會(huì)在后續(xù)的示例的使用中進(jìn)一步進(jìn)行說明狸剃。
結(jié)尾
helm3 新加的命令基本都是對(duì)helm2命令的強(qiáng)化,不再做一個(gè)個(gè)測(cè)試了狗热。
附 helm2 的學(xué)習(xí)筆記钞馁。
https://github.com/cai11745/k8s-ocp-yaml/blob/master/kubernetes-docs/2018-05-02-install-helm.md
安裝 mysql
試下mysql,并使用持久化存儲(chǔ)匿刮。
獲取chart
helm repo add stable https://kubernetes-charts.storage.googleapis.com
helm search repo mysql
# 穩(wěn)定版庫里面找到了mysql5.7僧凰,正是所需要的,下載下來
helm pull stable/mysql
tar -zxvf mysql-1.6.2.tgz
# 查看 valume 說明熟丸,persistence 默認(rèn)已經(jīng)是enable
# 沒有使用storageclass训措,直接安裝
helm install mysql123 .
# 查看pod 和pvc,都是Pending光羞,缺少pv
建一個(gè)hostpath的pv
vim /tmp/mysql-pv.yaml
kind: PersistentVolume
apiVersion: v1
metadata:
name: mysql-data
labels:
release: stable
spec:
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
hostPath:
path: /tmp/mysql-data
kubectl create -f /tmp/mysql-pv.yaml
kubectl get po
NAME READY STATUS RESTARTS AGE
mysql123-b86d7c687-9795n 1/1 Running 0 35s
參考文檔
https://developer.ibm.com/technologies/containers/blogs/kubernetes-helm-3/
https://juejin.im/post/5dd35990f265da0be72aafb4
https://blog.csdn.net/liumiaocn/article/details/103380446
https://my.oschina.net/u/3330830/blog/3157558