十一、Helm
  BMwtnym6fXTR 2023年11月02日 39 0

十一、kubernetes之Helm安装Zookeeper、Kafka集群

1.了解Helm

包管理工具就是把相关文件的定义统一管理,然后可以很方便地通过这些工具管理比较复杂的应用,比如MySQL集群、Redis集群等,实现一键创建集群、扩容、备份等。当然,公司内开发的应用程序也可以通过Kubernetes的包管理工具进行管理,目前常用的两种包管理工具是Operator和Helm。


两种工具的实现难度是不一样的。比如自己写一个Helm的Chart(Helm包的名称叫Chart),只需要将相关的模板文件放在Chart的templates目录,然后抽离相关的配置,放置于values.yaml,模板文件通过go template语法即可生成相关的资源文件并加载到Kubernetes中。而Operator需要自己动手编写一个控制器,这个控制器可以解析自己定义的CRD(Custom Resource Define,自定义资源类型),然后生成相关的资源文件并加载到Kubernetes中。想要实现上述所讲的备份、回滚等功能,也需要自己编写相应的代码实现。所以Operator需要一定的开发能力,可以用Golang、Java等语言。

十一、kubernetes之Helm安装Zookeeper、Kafka集群_Kubernetes

使用Helm管理中间件集群的流程如下:

  1. 首先集群中需要有一个Helm的客户端,用来执行增删改查命令,和Kubectl类似。
  2. 之后需要找到对应的Chart(可以在中间件的官网或者GitHub中查找),比如安装Redis、Zookeeper集群的包。这个包和镜像类似,都是放在一个仓库中,镜像放在镜像仓库,Chart放在Chart仓库。
  3. 如果是新建集群,只需要执行helm install命令即可一键式创建该集群。如果想要更新配置,直接使用helm upgrade即可。


2. Helm安装

下载地址:https://github.com/helm/helm/releases ,点击 Linux amd64 下载压缩包到节点上。

十一、kubernetes之Helm安装Zookeeper、Kafka集群_Kubernetes_02


解压压缩包

[root@k8s-master01 ~]# tar xf helm-v3.12.2-linux-amd64.tar.gz
[root@k8s-master01 ~]# cd linux-amd64/
[root@k8s-master01 linux-amd64]# ls
helm  LICENSE  README.md


在解压目中找到helm程序,移动到需要的目录中。

mv /root/linux-amd64/helm /usr/local/bin/helm


出现以下版本信息代表安装成功

[root@k8s-master01 ~]# helm version
version.BuildInfo{Version:"v3.12.2", GitCommit:"1e210a2c8cc5117d1055bfaa5d40f51bbc2e345e", GitTreeState:"clean", GoVersion:"go1.20.5"}


基础命令

下载一个包:helm pull
创建一个包:helm create
安装一个包:helm install
查看:helm list
查看安装参数:helm get values
更新:helm upgrade
删除:helm delete


3. 添加仓库并拉取软件包

Helm仓库是一个存储和分发Helm软件包的地方。Helm是一个用于Kubernetes集群中应用程序的包管理器,它允许用户轻松部署、管理和升级应用程序。

Helm软件包是预先打包好的Kubernetes应用程序,包括应用程序的Kubernetes清单文件和任何其他相关的资源,如配置文件、依赖项等。通过将这些软件包存储在Helm仓库中,用户可以轻松地共享和下载这些软件包,从而加速应用程序的部署和管理过程。

Helm仓库通常分为两种类型:官方仓库和第三方仓库。官方仓库是由Helm维护的,提供了广泛的官方软件包供用户使用。第三方仓库则是由其他组织或个人创建和维护的,提供了更多的自定义和特定领域的软件包。


添加仓库

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


添加完成后再次查看仓库列表

[root@k8s-master01 ~]# helm repo list
NAME    URL
bitnami https://charts.bitnami.com/bitnami
stable  https://charts.helm.sh/stable


接下来可以通过helm search命令查看BitNami仓库有哪些可用的Chart

  • NAME:Chart的名字。
  • CHART VERSION:Chart的版本。
  • APP VERSION:Chart内应用的名称。
  • DESCRIPTION:Chart的描述文件。

十一、kubernetes之Helm安装Zookeeper、Kafka集群_Kubernetes_03


也可以直接搜索软件的名字,比如搜索Kafka相关的Chart。

[root@k8s-master01 ~]# helm search repo kafka
NAME                            CHART VERSION   APP VERSION     DESCRIPTION
bitnami/kafka                   24.0.10         3.5.1           Apache Kafka is a distributed streaming platfor...


可以使用helm pull将某个Chart下载至本地,比如将上述检索的Kafka下载至本地。

#拉取最新版本
[root@k8s-master01 ~]# helm pull bitnami/kafka
[root@k8s-master01 ~]# ll kafka-24.0.10.tgz
-rw-r--r-- 1 root root 128191 Aug 13 11:45 kafka-24.0.10.tgz

#拉取特定版本(先查历史版本号)
[root@k8s-master01 ~]# helm search repo kafka -l
NAME                            CHART VERSION   APP VERSION     DESCRIPTION
bitnami/kafka                   24.0.10         3.5.1           Apache Kafka is a distributed streaming platfor...
bitnami/kafka                   24.0.9          3.5.1           Apache Kafka is a distributed streaming platfor...
bitnami/kafka                   24.0.8          3.5.1           Apache Kafka is a distributed streaming platfor...

[root@k8s-master01 ~]# helm pull bitnami/kafka --version 24.0.1
[root@k8s-master01 ~]# ll kafka-24.0.1.tgz
-rw-r--r-- 1 root root 127415 Aug 13 11:48 kafka-24.0.1.tgz


4. 安装Zookeeper集群

下载最新版的Zookeeper并解压

helm pull bitnami/zookeeper

[root@k8s-master01 ~]# ls -l zookeeper-11.4.10.tgz
-rw-r--r-- 1 root root 42505 Aug 13 20:25 zookeeper-11.4.10.tgz
[root@k8s-master01 ~]# tar xf zookeeper-11.4.10.tgz
[root@k8s-master01 ~]# cd zookeeper


修改values.yaml相应配置

需要修改replicaCount的值为3

十一、kubernetes之Helm安装Zookeeper、Kafka集群_Kubernetes_04


根据自己需要修改image,有自搭本地仓库的话先自行拉取镜像推到本地仓库。

十一、kubernetes之Helm安装Zookeeper、Kafka集群_Kubernetes_05

十一、kubernetes之Helm安装Zookeeper、Kafka集群_Kubernetes_06


根据自己需要修改持久化配置,这里因为是测试环境没有使用持久化(生产必须要使用持久化)。其中修改内容如下:

  • enabled修改为false
  • 注释existingClaim
  • 注释storageClass

十一、kubernetes之Helm安装Zookeeper、Kafka集群_Kubernetes_07


开始安装zookeeper集群

kubectl create ns public-service
helm install -n public-service zookeeper .

十一、kubernetes之Helm安装Zookeeper、Kafka集群_Kubernetes_08


查看public-service命名空间,容器已经running。

十一、kubernetes之Helm安装Zookeeper、Kafka集群_Kubernetes_09


命名空间下的Service情况

十一、kubernetes之Helm安装Zookeeper、Kafka集群_Kubernetes_10


5. 安装Kafka集群

下载最新版的Zookeeper并解压

helm pull bitnami/kafka --version=23.0.1

[root@k8s-master01 ~]# ls -l kafka-23.0.1.tgz
-rw-r--r-- 1 root root 114147 Aug 14 15:46 kafka-23.0.1.tgz
[root@k8s-master01 ~]# tar xf kafka-23.0.1.tgz
[root@k8s-master01 ~]# cd kafka/


修改values.yaml相应配置

需要修改replicaCount的值为3

十一、kubernetes之Helm安装Zookeeper、Kafka集群_Kubernetes_11


有自搭本地仓库的话先自行拉取镜像推到本地仓库。

#拉取镜像
docker pull bitnami/kafka:3.5.0-debian-11-r1
docker pull bitnami/kubectl:1.25.11-debian-11-r4
docker pull bitnami/bitnami-shell:11-debian-11-r130
docker pull bitnami/kafka-exporter:1.7.0-debian-11-r11
docker pull bitnami/jmx-exporter:0.18.0-debian-11-r34

#打上tag
docker tag bitnami/kafka:3.5.0-debian-11-r1 10.0.0.190/yinjay/kafka:3.5.0-debian-11-r1 
docker tag bitnami/kubectl:1.25.11-debian-11-r4 10.0.0.190/yinjay/kubectl:1.25.11-debian-11-r4
docker tag bitnami/bitnami-shell:11-debian-11-r130 10.0.0.190/yinjay/bitnami-shell:11-debian-11-r130
docker tag bitnami/kafka-exporter:1.7.0-debian-11-r11 10.0.0.190/yinjay/kafka-exporter:1.7.0-debian-11-r11
docker tag bitnami/jmx-exporter:0.18.0-debian-11-r34 10.0.0.190/yinjay/jmx-exporter:0.18.0-debian-11-r34

#上传本地Harbor仓库
docker push 10.0.0.190/yinjay/kafka:3.5.0-debian-11-r1 
docker push 10.0.0.190/yinjay/kubectl:1.25.11-debian-11-r4
docker push 10.0.0.190/yinjay/bitnami-shell:11-debian-11-r130
docker push 10.0.0.190/yinjay/kafka-exporter:1.7.0-debian-11-r11
docker push 10.0.0.190/yinjay/jmx-exporter:0.18.0-debian-11-r34


根据自己需要修改image

[root@k8s-master01 kafka]# grep -A 2 "10.0.0.190" values.yaml
  registry: 10.0.0.190
  repository: yinjay/kafka
  tag: 3.5.0-debian-11-r1
--
      registry: 10.0.0.190
      repository: yinjay/kubectl
      tag: 1.25.11-debian-11-r4
--
    registry: 10.0.0.190
    repository: yinjay/bitnami-shell
    tag: 11-debian-11-r130
--
      registry: 10.0.0.190
      repository: yinjay/kafka-exporter
      tag: 1.7.0-debian-11-r11
--
      registry: 10.0.0.190
      repository: yinjay/jmx-exporter
      tag: 0.18.0-debian-11-r34


如果使用指定的zookeeper,kraft模式要关闭,修改kraft.enable 的值为false,新版kafka新增了一个kraft模式,他与zookeeper是冲突的,不能同时使用。

十一、kubernetes之Helm安装Zookeeper、Kafka集群_Kubernetes_12


根据自己需要修改持久化配置,这里因为是测试环境没有使用持久化(生产必须要使用持久化)。其中修改内容如下:

  • enabled修改为false
  • 注释existingClaim
  • 注释storageClass

十一、kubernetes之Helm安装Zookeeper、Kafka集群_Kubernetes_13


修改externalZookeeper.servers为zookeeper,如果不知道可以通过以下命令查询

十一、kubernetes之Helm安装Zookeeper、Kafka集群_Kubernetes_14

十一、kubernetes之Helm安装Zookeeper、Kafka集群_Kubernetes_15


开始安装kafka集群

helm install -n public-service kafka .

十一、kubernetes之Helm安装Zookeeper、Kafka集群_Kubernetes_16


观察到kafka集群已经安装完成

十一、kubernetes之Helm安装Zookeeper、Kafka集群_Kubernetes_17


查看kafka、zookeeper安装的版本信息

十一、kubernetes之Helm安装Zookeeper、Kafka集群_Kubernetes_18


6. Kafka集群测试

运行一个kafka-client,用于连接kafka集群。

kubectl run kafka-client --restart='Never' --image 10.0.0.190/yinjay/kafka:3.5.0-debian-11-r1 --namespace public-service --command -- sleep infinity
  • kubectl run kafka-client: 使用 kubectl 命令创建一个名为 kafka-client 的 Pod
  • --restart='Never': 设置 Pod 的重启策略为 "Never",这意味着 Pod 不会自动重启。
  • --image 10.0.0.190/yinjay/kafka:3.5.0-debian-11-r1: 指定要在 Pod 中使用的容器镜像。这里使用的是 10.0.0.190/yinjay/kafka:3.5.0-debian-11-r1 镜像
  • --namespace public-service: 指定要在名为 public-service 的命名空间中创建 Pod
  • --command -- sleep infinity: 在容器中执行命令 sleep infinity,以保持 Pod 持续运行。--command 表示后面的内容是一个命令而不是一个参数,sleep infinity 是一个常用的命令,使得容器无限期地休眠


查看Pod的运行情况

十一、kubernetes之Helm安装Zookeeper、Kafka集群_Kubernetes_19


在k8s-master01节点上开启两个窗口,一个用于生产者,一个用作消费者。下面是生产者窗口,进入kafka创建一个名为test的topic,出现>代表成功。

[root@k8s-master01 kafka]# kubectl exec -it  kafka-client -n  public-service -- bash
I have no name!@kafka-client:/$ cd /opt/bitnami/kafka/bin
I have no name!@kafka-client:/opt/bitnami/kafka/bin$ kafka-console-producer.sh --broker-list kafka-0.kafka-headless.public-service.svc.cluster.local:9092,kafka-1.kafka-headless.publiservice.svc.cluster.local:9092,kafka-2.kafka-headless.public-service.svc.cluster.local:9092 --topic test

上面参数说明:

  • kafka-console-producer.sh:用于创建生产者
  • --broker-list kafka-0.kafka-headless.public-service.svc.cluster.local:9092,kafka-1.kafka-headless.public-service.svc.cluster.local:9092,kafka-2.kafka-headless.public-service.svc.cluster.local:9092:指定要连接的 Kafka Broker 列表。使用逗号分隔多个 Broker 的地址。在这里,指定了三个 Kafka Broker 的地址。
  • --topic test:指定要发布消息的主题名称,这里使用的是 "test"。


下面是消费者窗口

[root@k8s-master01 ~]# kubectl exec -it  kafka-client -n  public-service -- bash
I have no name!@kafka-client:/$ cd  /opt/bitnami/kafka/bin/
I have no name!@kafka-client:/opt/bitnami/kafka/bin$ kafka-console-consumer.sh --bootstrap-server kafka.public-service.svc.cluster.local:9092  --topic test  --from-beginning

上面参数说明:

  • kafka-console-consumer.sh:用于启动消费者
  • --bootstrap-server localhost:9092:指定用于引导连接到 Kafka 集群的 Kafka Broker 的地址。使用的是本地主机(localhost)上的 Kafka Broker,并监听 9092 端口。
  • --topic test:指定要发布消息的主题名称,这里使用的是 "test"。
  • --from-beginning:设置消费者从主题的开始处开始消费消息,这意味着消费者将从主题中的最早可用消息开始消费。


观察到能够成功消费!

十一、kubernetes之Helm安装Zookeeper、Kafka集群_Kubernetes_20


Kafka、Zookeeper集群删除

十一、kubernetes之Helm安装Zookeeper、Kafka集群_Kubernetes_21


未完待续!

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  O704k6GYsxMM   2023年11月13日   19   0   0 rkeDockerkubernetes
BMwtnym6fXTR