第五章 使用Helm部署一个应用

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介: 第五章 使用Helm部署一个应用

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 的组成部分,每个文件都有其特定的用途:

  1. Chart.yaml:这个文件用于描述这个 Chart 的基本信息,包括名字、描述信息以及版本等。
  2. values.yaml:这个文件包含了 Chart 的所有可配置项及其默认值。在安装 Chart 时,用户可以传递配置项的值来覆盖默认值。
  3. templates/:这个目录中包含的是 Kubernetes 资源申明的模板文件。在安装时,Kubernetes 会将这些模板文件与配置项的值结合起来,得到 Kubernetes 的资源定义,并应用到 Kubernetes 上。
  4. 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
  1. Chart.yaml:描述了 Chart 的基本信息,包括名字、描述信息以及版本等。
  2. values.yaml:包含了 Chart 的所有可配置项及其默认值。在安装 Chart 时,用户可以传递配置项的值来覆盖默认值。
  3. templates/:这个目录中包含的是 Kubernetes 资源申明的模板文件。在安装时,Kubernetes 会将这些模板文件与配置项的值结合起来,得到 Kubernetes 的资源定义,并应用到 Kubernetes 上。
  4. _helpers.tpl:Helm 视为公共库定义文件,主要用于定义通用的子模版、函数等,不会将这些公共库文件的渲染结果提交给 Kubernetes 处理。
  5. deployment.yaml:用于定义 Kubernetes 的 Deployment 资源。
  6. ingress.yaml:用于定义 Kubernetes 的 Ingress 资源。
  7. networkpolicy.yaml:用于定义 Kubernetes 的 NetworkPolicy 资源。
  8. NOTES.txt:Chart 包的帮助信息文件,执行 Helm install 命令安装成功后会输出这个文件的内容。
  9. pvc.yaml:用于定义 Kubernetes 的 PersistentVolumeClaim 资源。
  10. secrets.yaml:用于定义 Kubernetes 的 Secret 资源。
  11. 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

逐条解释命令:

  1. 连接到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。
  1. 使用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的服务。
  1. 从集群外部连接到数据库
  • 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

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
6月前
|
存储 Kubernetes Ubuntu
第一章 Helm 详细介绍
第一章 Helm 详细介绍
136 0
|
Kubernetes Linux Shell
【K8S 系列】k8s 学习二,kubernetes 核心概念及初步了解安装部署方式
【K8S 系列】k8s 学习二,kubernetes 核心概念及初步了解安装部署方式
148 0
|
14天前
|
Kubernetes Cloud Native 前端开发
Kubernetes入门指南:从基础到实践
Kubernetes入门指南:从基础到实践
26 0
|
3月前
|
存储 Kubernetes 监控
Kubernetes(K8s)基础与入门指南
【8月更文挑战第15天】Kubernetes作为云原生时代的基石,正在逐步改变软件的开发、部署和管理方式。通过掌握Kubernetes的基础知识和核心功能,开发者可以更加灵活地构建和管理容器化应用。未来,随着技术的不断发展和完善,Kubernetes将在更多领域发挥重要作用,推动云原生技术的普及和应用。
|
3月前
|
Kubernetes 容器
在K8S中,helm是什么?如何使用?
在K8S中,helm是什么?如何使用?
|
6月前
|
Web App开发 Kubernetes 数据可视化
Kubernetes Dashboard 可视化插件部署 博主亲自实践可用
Kubernetes Dashboard 可视化插件部署 博主亲自实践可用
133 0
|
6月前
|
Kubernetes 容器
ChaosBlade的Helm安装双架构主要包括以下步骤
【1月更文挑战第22天】【1月更文挑战第109篇】ChaosBlade的Helm安装双架构主要包括以下步骤
153 1
|
6月前
|
Kubernetes 容器
ChaosBlade的Helm安装双架构主要包括以下步骤:
【1月更文挑战第8天】【1月更文挑战第39篇】ChaosBlade的Helm安装双架构主要包括以下步骤:
189 1
|
存储 Kubernetes 关系型数据库
事半功倍:Helm的了解与使用
事半功倍:Helm的了解与使用
221 0
|
存储 Kubernetes Cloud Native
【云原生-Helm】k8s-helm-简介及基础配置
【云原生-Helm】k8s-helm-简介及基础配置
413 0
【云原生-Helm】k8s-helm-简介及基础配置
下一篇
无影云桌面