自定义Chart并部署一个应用
1.创建自定义模板 helm create <模板名称>
helm create mychart 是一个用于创建一个新的 Helm chart 的命令。Helm 是 Kubernetes 的包管理器,用于定义、安装和升级 Kubernetes 应用。
当你运行 helm create mychart 命令时,Helm 会创建一个新的目录结构,其中包含一个基本的 Helm chart。这个 chart 是一个用于定义 Kubernetes 应用的模板,它包含许多有用的文件和文件夹,如 Chart.yaml(描述 chart 的元数据),values.yaml(用于存储默认值和提示用户输入的提示)和 templates/(定义 Kubernetes 资源对象的模板)。
使用命令创建了 chart,可以使用 helm package 命令将其打包为 .tgz 文件,使用 helm install 或 helm upgrade 命令将安装到 Kubernetes 集群中。
# 使用命令创建自定义 chart 包
[root@master01 hpro]# helm create mychart
Creating mychart
[root@master01 hpro]#
[root@master01 hpro]#
# 可以看到已经创建了
[root@master01 hpro]# ls
mychart
# 文件包跟以前拉取的包没有什么区别
# 文件作用前面已经讲过
[root@master01 hpro]# cd mychart/
[root@master01 mychart]# ls
charts Chart.yaml templates values.yaml
### 文件中
# Chart.yaml 存放chrat属性信息
# templates 编写yaml文件
# yaml 文件可以使用全局变量
# templates 把这个文件清空使用k8s快速创建
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
# 可以看到已经清空
[root@master01 templates]# rm -rf *
[root@master01 templates]# ls
3.接着我们用命令创建YAML
# 前提是同学们有k8s基础啊
kubectl create deploy web-test --image=nginx --dry-run -o yaml > web-deploy.yaml
这条命令是在 Kubernetes 集群中创建一个新的部署(Deployment)对象,创建一个名为 web-test
,并使用 nginx
镜像作为容器的基础。命令解释如下:
kubectl
: 这个就不多说了。create
: 用于创建新的资源对象。deploy
: 表示创建的是一个 Deployment 对象,即一种在集群中自动扩展和管理的应用程序容器化实例的资源。web-test
: 自定义的 Deployment 的名称。--image=nginx
: 指定容器镜像为nginx
。--dry-run
: 模拟执行命令,而不会真正地创建资源。可以在不实际创建对象的情况下查看输出结果。-o yaml
: 这将输出格式设置为 YAML,用于配置文件和数据序列化。> web-deploy.yaml
: 这将输出重定向到名为web-deploy.yaml
的文件中。如果该文件已存在,它将被覆盖;如果不存在,它将被创建。
4. 快速创建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,通常用于匹配容器内运行的服务的端口。--type=NodePort
: 指定要创建的服务类型为 NodePort。--dry-run
: 模拟执行命令,而不会真正地创建资源。可以在不实际创建对象的情况下查看输出结果。-o yaml
: 这将输出格式设置为 YAML,这是一个人类可读的格式,常用于配置文件和数据序列化。> servics.yaml
: 重定向到名为servics.yaml
的文件中。如果该文件已存在,将被覆盖;如果不存在,它将被创建。
5.这是我使用 k8s快速创建命令创建的,在(templates)文件夹下
[root@master01 templates]# ls
servics.yaml web-deploy.yaml
6.使用helm创建自定义的模板 helm install <自定义名字> <文件夹>
# 使用Helm创建
[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
# 可以看到创建的 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
时间是个伟大的作者,必将给出完美的答案。