【kubernetes】使用helm部署redis

1 什么是helm

在学习使用k8s进行应用的部署时,或者从github上下载一些组件进行部署时,通常是直接用yaml的方式部署,用这种方式部署时,有个比较大的问题是,当参数需要调整时,就需要阅读整个yaml文件,找到对应的配置进行修改,而且,这种方式不方便进行版本管理,当其他人进行部署时,就需要知道修改了哪些参数以及对应的值,也就是说,无法保证两次部署的环境一致。如果有一个仓库保存了应用的yaml模板、模板中的参数以及版本号,每次选择版本进行部署时,可以用默认参数替换掉yaml模板中的变量,并且可以设置某些参数的值,用一条命令就可以进行环境的部署,而且能够保证环境的一致,另外,使用包管理器还可以解决另一个大问题:依赖,有些应用可能还依赖其他的组件,包管理器的配置中可以声明依赖,在包安装时,会先去下载依赖。

helm被称为k8s的包管理器,类似于centos的yum和ubuntu的apt,只是yum仓库中保存的是rpm包,apt仓库中保存的是dpkg包,而helm仓库中保存的是Chart。

关键术语:

  • Helm:包管理器,可以指代Helm整个机制,也可以指代客户端,就类似于yum客户端
  • Chart:yaml模板文件和模板参数文件的集合,类似于yum中的rpm包
  • Release:Chart在k8s集群中运行起来的实例,一个Chart可以在集群中多次安装,每次安装都会生成一个Release
  • Repository:仓库,保存Chart的地方,类似于yum中的源

2 helm v2 vs v3

在提到helm时,都会将v2和v3版本进行对比,它们的主要区别就是集群中的Tiller组件:v2版本会在集群中部署一个Tiller组件,helm客户端在进行操作时,会将请求发送给Tiller,Tiller调用k8s apiserver的接口实现功能,而v3版本的helm没有Tiller组件,helm客户端直接与k8s apiserver进行通信。

详细的变化可以参考:Helm v2 迁移到 v3。

3 helm的安装和使用(以安装redis为例)

wget https://get.helm.sh/helm-v3.13.0-linux-amd64.tar.gz
tar -xf helm-v3.13.0-linux-amd64.tar.gz
cp linux-amd64/helm /usr/local/bin/

# 查看helm的版本和帮助文档
helm version
helm help

在helm安装完成后,可以用helm repo add命令添加仓库,当然也可以直接用官方的hub。因此,第一步,添加仓库:

helm repo add bitnami https://charts.bitnami.com/bitnami

添加完仓库后可以使用helm repo list命令查看仓库列表。

添加完仓库后,就可以在仓库中搜索应用,类似于yum search

# 在仓库中搜索redis
helm search repo redis

当搜索到想要安装的Chart时,可以进行安装:

helm install luo-redis bitnami/redis --kubeconfig /root/.kube/config

然后就可以用helm list查看Release:

请添加图片描述
查看Pod和Service,这是默认创建的一主三从的redis集群:

【kubernetes】使用helm部署redis_第1张图片

然后就可以对集群进行测试。

首先,需要获取集群的密码:REDIS_PASSWORD=$(kubectl get secret --namespace default luo-redis -o jsonpath="{.data.redis-password}" | base64 -d)

然后可以选择一个从redis登陆进行测试验证:

【kubernetes】使用helm部署redis_第2张图片

首先以服务的方式访问master节点,将数据写入到redis集群的master节点,然后用无头服务的方式访问replicas-0的redis,可以看到数据已经同步了,然后对从节点进行写入失败了。

上述测试说明这个一主三从的redis集群可以正常工作。

这里使用helm创建redis集群全部用的都是默认参数,例如有三个从节点,如果要用4个从节点呢?此时就需要修改参数。

4 helm的参数设置

设置helm部署时的参数通常有两种方式:

  • 执行helm install时,在命令行中设置模板参数
  • 直接下载Chart,然后修改里面的values.yaml

这里以修改从redis的数量为例。

4.1 修改Chart的values.yaml

使用helm pull bitnami/redis命令从仓库中下载redis的Chart,就会在当前目录下出现一个redis的压缩包,进行解压:

【kubernetes】使用helm部署redis_第3张图片

其中比较重要的有三个部分:

  • Chart.yaml:Chart的描述文件,描述Chart的版本、应用的版本、依赖等信息
  • templates/:使用golang的template语法实现的yaml模板文件
  • values.yaml:将模板文件中的变量提取为参数放在此处统一保存,可以对该文件进行修改

在values.yaml中搜索replica会发现这里的replicaCount就是从redis的数量:

【kubernetes】使用helm部署redis_第4张图片

因此,可以直接将values.yaml中的replicaCount修改为4,然后用helm upgrade luo-redis bitnami/redis -f values.yaml进行更新,第一个参数是Release的名称,第二个参数是Chart的名称。

当然,也可以在安装的时候设置-f values.yaml参数。

4.2 命令行中设置模板参数

在命令行中设置参数时,就需要知道参数的名字是什么,从上面下载的values.yaml中可以知道要修改从redis的数量只需要修改replica.replicaCount即可,因此,可以用下列命令修改从redis的数量。

helm upgrade luo-redis bitnami/redis --set replica.replicaCount=2

你可能感兴趣的:(kubernetes,kubernetes,redis,容器)