PS:使用Heml的好处就是在不用编写一堆的YAML了真的可以解放双手又可以愉快的摸鱼了。
1.使用 chart 部署一个应用(这个应用为例 redis)
1.在仓库中查找对应的版本,查找 chart 包
#命令格式 helm search repo <应用名称> # 可以看到查找到的历史版本 [root@master01 hpro]# helm search repo redis NAME CHART VERSION APP VERSION DESCRIPTION aliyun/redis 1.1.15 4.0.8 Open source, advanced key-value store. It is of... aliyun/redis-ha 2.0.1 Highly available Redis cluster with multiple se... bitnami/redis 18.6.3 7.2.4 Redis(R) is an open source, advanced key-value ... bitnami/redis-cluster 9.1.5 7.2.4 Redis(R) is an open source, scalable, distribut... stable/prometheus-redis-exporter 3.5.1 1.3.4 DEPRECATED Prometheus exporter for Redis metrics stable/redis 10.5.7 5.0.7 DEPRECATED Open source, advanced key-value stor... stable/redis-ha 4.4.6 5.0.6 DEPRECATED - Highly available Kubernetes implem... aliyun/sensu 0.2.0 Sensu monitoring framework backed by the Redis ... stable/sensu 0.2.5 0.28 DEPRECATED Sensu monitoring framework backed by...
2.如果想要查看具体的详细信息使用下面的命令显示特定 Chart 的 values.yaml 文件的内容,内容呢显示很多,我只是复制了第一行。
# 命令格式 helm show values <应用名称> # 显示特定的 values.yaml 文件的内容 [root@master01 hpro]# helm show values aliyun/redis # ServiceToken: "" # 也可以通过这个命令,按空格键翻页 [root@master01 hpro]# helm show values aliyun/redis | more # ServiceToken: "" # 命令格式 helm show chart <应用名称> # 显示特定的 chart .yaml 文件的内容 [root@master01 hpro]# helm show chart aliyun/redis
3.通过Helm从阿里云仓库拉取redis应用,并将其保存在你的本地目录中。默认情况下会下载最新版本的Chart。
# 命令格式 helm pull <Chart名称> # 拉取到本地 [root@master01 hpro]# helm pull aliyun/redis # 拉取指定版本的应用 # 命令格式 helm pull <应用名> --version <版本> [root@master01 hpro]# helm pull stable/redis --version 10.5.7 # 可以看到是一个压缩包 [root@master01 hpro]# ls redis-1.1.15.tgz # 接着进行解压 [root@master01 hpro]# tar -xf redis-1.1.15.tgz # 解压后就是一个这样的文件夹 [root@master01 hpro]# ls redis redis-1.1.15.tgz # 进入文件夹可以看到 [root@master01 hpro]# cd redis/ [root@master01 redis]# [root@master01 redis]# [root@master01 redis]# [root@master01 redis]# ls Chart.yaml README.md templates values.yaml
4.Chart 包中各个文件的作用-(文件内容后边会讲解)
这些文件都是 Helm Chart 的组成部分,每个文件都有其特定的用途:
- Chart.yaml:这个文件用于描述这个 Chart 的基本信息,包括名字、描述信息以及版本等。
- values.yaml:这个文件包含了 Chart 的所有可配置项及其默认值。在安装 Chart 时,用户可以传递配置项的值来覆盖默认值。
- templates/:这个目录中包含的是 Kubernetes 资源申明的模板文件。在安装时,Kubernetes 会将这些模板文件与配置项的值结合起来,得到 Kubernetes 的资源定义,并应用到 Kubernetes 上。
- README.md:这是一个易读的帮助文档文件,为用户提供关于如何使用 Chart 的信息。
5. templates 文件夹中的作用 -(文件内容后边会讲解)
# 可以看到有几个文件 [root@master01 redis]# cd templates/ [root@master01 templates]# ls deployment.yaml _helpers.tpl networkpolicy.yaml NOTES.txt pvc.yaml secrets.yaml svc.yaml
- Chart.yaml:描述了 Chart 的基本信息,包括名字、描述信息以及版本等。
- values.yaml:包含了 Chart 的所有可配置项及其默认值。在安装 Chart 时,用户可以传递配置项的值来覆盖默认值。
- templates/:这个目录中包含的是 Kubernetes 资源申明的模板文件。在安装时,Kubernetes 会将这些模板文件与配置项的值结合起来,得到 Kubernetes 的资源定义,并应用到 Kubernetes 上。
- _helpers.tpl:Helm 视为公共库定义文件,主要用于定义通用的子模版、函数等,不会将这些公共库文件的渲染结果提交给 Kubernetes 处理。
- deployment.yaml:用于定义 Kubernetes 的 Deployment 资源。
- ingress.yaml:用于定义 Kubernetes 的 Ingress 资源。
- networkpolicy.yaml:用于定义 Kubernetes 的 NetworkPolicy 资源。
- NOTES.txt:Chart 包的帮助信息文件,执行 Helm install 命令安装成功后会输出这个文件的内容。
- pvc.yaml:用于定义 Kubernetes 的 PersistentVolumeClaim 资源。
- secrets.yaml:用于定义 Kubernetes 的 Secret 资源。
- svc.yaml:用于定义 Kubernetes 的 Service 资源。
6.命令以及文件功能都介绍了接着我们部署一个redis应用。使用 helm install 命令可以安装一个 Helm Chart 到 Kubernetes 集群中。这个命令中,需要指定 Chart 的名称、版本以及你要安装的配置。
# 可以直接安装不用下载 # 命令格式 helm install <自定义的名字> <应用> helm install ui-test stable/weave-scope # 命令格式 helm install <应用名> <文件包> [root@master01 hpro]# helm install test-redis ./redis WARNING: This chart is deprecated NAME: test-redis LAST DEPLOYED: Fri Jan 12 22:19:22 2024 NAMESPACE: default STATUS: deployed REVISION: 1 TEST SUITE: None NOTES: This Helm chart is deprecated # 安装成功后会显示一些配置信息 To connect to your Redis server: 1. Run a Redis pod that you can use as a client: kubectl run --namespace default test-redis-client --rm --tty -i --restart='Never' \ --env REDIS_PASSWORD=$REDIS_PASSWORD \ --image docker.io/bitnami/redis:5.0.7-debian-10-r32 -- bash 2. Connect using the Redis CLI: redis-cli -h test-redis-master -a $REDIS_PASSWORD redis-cli -h test-redis-slave -a $REDIS_PASSWORD To connect to your database from outside the cluster execute the following commands: kubectl port-forward --namespace default svc/test-redis-master 6379:6379 & redis-cli -h 127.0.0.1 -p 6379 -a $REDIS_PASSWORD
逐条解释命令:
- 连接到Redis服务器
- 首先,运行一个Redis pod作为客户端。这里使用了
kubectl run
命令来创建一个临时的pod。这个pod仅用于连接到Redis服务器。 --namespace default
:指定在默认的命名空间中运行这个pod。test-redis-client
:这是pod的名称。--rm
:当这个pod退出时,自动删除它。--tty -i
:为pod分配一个TTY并保持其处于交互模式。--restart='Never'
:确保pod不会在退出后自动重启。--env REDIS_PASSWORD=$REDIS_PASSWORD
:设置环境变量,用于传递Redis的密码。--image docker.io/bitnami/redis:5.0.7-debian-10-r32
:指定使用的Redis镜像。-- bash
:在容器内部启动bash shell。
- 使用Redis CLI连接
redis-cli -h test-redis-master -a $REDIS_PASSWORD
:使用Redis命令行工具连接到名为test-redis-master
的服务,并使用环境变量中的密码进行身份验证。redis-cli -h test-redis-slave -a $REDIS_PASSWORD
:同上,但连接到名为test-redis-slave
的服务。
- 从集群外部连接到数据库
kubectl port-forward --namespace default svc/test-redis-master 6379:6379 &
:使用kubectl port-forward
命令将名为test-redis-master
的服务的6379端口转发到本地的6379端口。这样,你就可以从外部机器访问这个端口来连接到Redis服务器。redis-cli -h 127.0.0.1 -p 6379 -a $REDIS_PASSWORD
:从外部机器使用Redis命令行工具连接到本地的6379端口,并使用环境变量中的密码进行身份验证。
7.可以看到已经在创建了
[root@master01 hpro]# kubectl get pod -A NAMESPACE NAME READY STATUS RESTARTS AGE default test-redis-master-0 0/1 Pending 0 16s default test-redis-slave-0 0/1 Pending 0 16s kube-system coredns-7ff77c879f-gthg8 1/1 Running 4 26d kube-system coredns-7ff77c879f-xwkl9 1/1 Running 4 26d kube-system etcd-master01 1/1 Running 17 27d kube-system kube-apiserver-master01 1/1 Running 11 27d kube-system kube-controller-manager-master01 1/1 Running 5 27d kube-system kube-flannel-ds-2qj7v 1/1 Running 7 26d kube-system kube-flannel-ds-82v8z 1/1 Running 3 26d kube-system kube-proxy-5gzhq 1/1 Running 3 27d kube-system kube-proxy-7h646 1/1 Running 5 27d kube-system kube-scheduler-master01 1/1 Running 5 27d
说明:Pending 是因为没有做 Volume 后边会讲到
Warning FailedScheduling 6s (x8 over 8m20s) default-scheduler running "VolumeBinding" filter plugin for pod "test-redis-master-0": pod has unbound immediate PersistentVolumeClaims