自定義Chart并部署一個應用
1.創(chuàng)建自定義模板 helm create <模板名稱>
helm create mychart 是一個用于創(chuàng)建一個新的 Helm chart 的命令。Helm 是 Kubernetes 的包管理器,用于定義、安裝和升級 Kubernetes 應用。
當你運行 helm create mychart 命令時,Helm 會創(chuàng)建一個新的目錄結構,其中包含一個基本的 Helm chart。這個 chart 是一個用于定義 Kubernetes 應用的模板,它包含許多有用的文件和文件夾,如 Chart.yaml(描述 chart 的元數(shù)據(jù)),values.yaml(用于存儲默認值和提示用戶輸入的提示)和 templates/(定義 Kubernetes 資源對象的模板)。
使用命令創(chuàng)建了 chart,可以使用 helm package 命令將其打包為 .tgz 文件,使用 helm install 或 helm upgrade 命令將安裝到 Kubernetes 集群中。
# 使用命令創(chuàng)建自定義 chart 包
[root@master01 hpro]# helm create mychart
Creating mychart
[root@master01 hpro]#
[root@master01 hpro]#
# 可以看到已經(jīng)創(chuàng)建了
[root@master01 hpro]# ls
mychart
# 文件包跟以前拉取的包沒有什么區(qū)別
# 文件作用前面已經(jīng)講過
[root@master01 hpro]# cd mychart/
[root@master01 mychart]# ls
charts Chart.yaml templates values.yaml
### 文件中
# Chart.yaml 存放chrat屬性信息
# templates 編寫yaml文件
# yaml 文件可以使用全局變量
# templates 把這個文件清空使用k8s快速創(chuàng)建
2.清空 templates 文件夾使用 k8s命令導出YAML
# 清空 templates 文件夾
[root@master01 mychart]# cd templates/
[root@master01 templates]# ls
deployment.yaml _helpers.tpl hpa.yaml ingress.yaml NOTES.txt serviceaccount.yaml service.yaml tests
# 可以看到已經(jīng)清空
[root@master01 templates]# rm -rf *
[root@master01 templates]# ls
3.接著我們用命令創(chuàng)建YAML
# 前提是同學們有k8s基礎啊
kubectl create deploy web-test --image=nginx --dry-run -o yaml > web-deploy.yaml
這條命令是在 Kubernetes 集群中創(chuàng)建一個新的部署(Deployment)對象,創(chuàng)建一個名為 web-test ,并使用 nginx 鏡像作為容器的基礎。命令解釋如下:
kubectl: 這個就不多說了。create: 用于創(chuàng)建新的資源對象。deploy: 表示創(chuàng)建的是一個 Deployment 對象,即一種在集群中自動擴展和管理的應用程序容器化實例的資源。web-test: 自定義的 Deployment 的名稱。--image=nginx: 指定容器鏡像為nginx。--dry-run: 模擬執(zhí)行命令,而不會真正地創(chuàng)建資源。可以在不實際創(chuàng)建對象的情況下查看輸出結果。-o yaml: 這將輸出格式設置為 YAML,用于配置文件和數(shù)據(jù)序列化。> web-deploy.yaml: 這將輸出重定向到名為web-deploy.yaml的文件中。如果該文件已存在,它將被覆蓋;如果不存在,它將被創(chuàng)建。
4. 快速創(chuàng)建svc
kubectl expose deployment web-test --port=80 --target-port=80 --type=NodePort --dry-run -o yaml > servics.yaml
這條命令用于在 Kubernetes 集群中暴露一個已存在的 Deployment(在本例中為 web-test),并獲取其服務定義。命令解釋如下:
kubectl: 這個就不多說了。expose: 用于將一個或多個 Pod 暴露為 Kubernetes 服務。deployment web-test: 表示資源名為web-test的 Deployment。--port=80: 指定要暴露的端口號為 80。--target-port=80: 指定目標端口號也為 80,通常用于匹配容器內(nèi)運行的服務的端口。--type=NodePort: 指定要創(chuàng)建的服務類型為 NodePort。--dry-run: 模擬執(zhí)行命令,而不會真正地創(chuàng)建資源。可以在不實際創(chuàng)建對象的情況下查看輸出結果。-o yaml: 這將輸出格式設置為 YAML,這是一個人類可讀的格式,常用于配置文件和數(shù)據(jù)序列化。> servics.yaml: 重定向到名為servics.yaml的文件中。如果該文件已存在,將被覆蓋;如果不存在,它將被創(chuàng)建。
5.這是我使用 k8s快速創(chuàng)建命令創(chuàng)建的,在(templates)文件夾下
[root@master01 templates]# ls
servics.yaml web-deploy.yaml
6.使用helm創(chuàng)建自定義的模板 helm install <自定義名字> <文件夾>
# 使用Helm創(chuàng)建
[root@master01 hpro]# helm install web1 mychart/
NAME: web1
LAST DEPLOYED: Sun Jan 14 01:10:06 2024
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
# 可以看到創(chuàng)建的 pod和svc
[root@node1 test]# kubectl get svc -A
NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
default kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 203d
default web-test NodePort 10.103.178.251 <none> 80:30187/TCP 39s
[root@node1 test]# kubectl get pod -A
NAMESPACE NAME READY STATUS RESTARTS AGE
default nginx-dep1-cf6cfcf66-2sh46 0/1 Completed 0 37d
default web-test-5f547489c6-rm5c8 0/1 ContainerCreating 0 63s
6.通過helm卸載 helm uninstall <應用名稱>
# 通過helm卸載
[root@node1 test]# helm uninstall web1
release "web1" uninstalled
7.版本記錄 helm upgrade <自定義名字> <文件夾>
[root@master01 hpro]# helm install web1 mychart/
NAME: web1
LAST DEPLOYED: Sun Jan 14 01:14:16 2024
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
# 如果helm中yaml修改了要升級使用-可以看到 REVISION: 2 是2了
[root@master01 hpro]# helm upgrade web1 mychart/
Release "web1" has been upgraded. Happy Helming!
NAME: web1
LAST DEPLOYED: Sun Jan 14 01:14:23 2024
NAMESPACE: default
STATUS: deployed
REVISION: 2
TEST SUITE: None
時間是個偉大的作者,必將給出完美的答案。

浙公網(wǎng)安備 33010602011771號