Bootstrap

K8S部署kafka集群+高可用配置

本文安装思路参考自: Kubernetes全栈架构师:基于世界500强的k8s实战课程

1. 安装helm

1.1. 安装helm

  • helm项目地址:https://github.com/helm/helm

  • 安装(可选择最新版本的helm):

# 下载
wget https://get.helm.sh/helm-v3.6.1-linux-amd64.tar.gz

# 解压
tar zxvf helm-v3.6.1-linux-amd64.tar.gz

# 安装
mv linux-amd64/helm /usr/local/bin/

# 验证
helm version

1.2. Helm基本命令

# 添加仓库
helm repo add 

# 查询 charts
helm search repo

# 更新repo仓库资源
helm repo update

# 查看当前安装的charts
helm list

# 安装
helm install

# 卸载
helm uninstall

# 更新
helm upgrade

2. 部署zookeeper与kafka

2.1. 下载chart包

# 添加bitnami仓库
helm repo add bitnami https://charts.bitnami.com/bitnami

# 查询chart
helm search repo bitnami

# 创建工作目录
mkdir ~/kafka
cd ~/kafka

# 拉取zookeeper和kafka
helm pull bitnami/kafka
helm pull bitnami/zookeeper

# 解压
tar zxvf [kafka/zookeeper] 

image-20210623085007428

2.2. 部署zookeeper

2.2.1. 编辑values
  • 进入zookeeper工作目录:cd ~/kafka/zookeeper,配置时区、持久化存储、副本数等

建议首次部署时直接修改values中的配置,而不是用–set的方式,这样方便后期upgrade。

vim values.yaml
# 手动添加时区
# 该模版无extraEnvVars字段,直接复制以下三行
# 部署后,可通过查看logs验证时区是否生效
extraEnvVars: 
  - name: TZ
    value: "Asia/Shanghai"


# 允许任意用户连接(默认开启)
allowAnonymousLogin: true
---

# 关闭认证(默认关闭)
auth:
  enable: false   
---

# 修改副本数
replicaCount: 3 
---

# 4. 配置持久化,按需使用
persistence:
  enabled: true
  storageClass: "rook-ceph-block"  # storageClass
  accessModes:
    - ReadWriteOnce
2.2.2. 安装
cd ~/zookeeper
kubectl create ns kafka
helm install zookeeper -n kafka .
  • 查看zookeeper节点状态
# 进入pod
kubectl exec -it -n kafka zookeeper-0 -- bash

# 查看状态
zkServer.sh status

2.3. 安装kafka

2.3.1. 编辑values
  • 进入kafka工作目录:cd ~/kafka/kafka,配置zookeeper、持久化存储、副本数、时区、默认分区数、默认副本数、日志过期时间等等
vim values.yaml
2.3.2. 基础配置
  • 时区、副本数、持久化存储、zookeeper连接
# 在extraEnvVars下添加时区
extraEnvVars: 
  - name: TZ
    value: "Asia/Shanghai"
---

# 副本数
replicaCount: 3                    # 副本数
---

# 持久化存储
persistence:
  enabled: true
  storageClass: "rook-ceph-block"  # sc
  accessModes:
    - ReadWriteOnce
  size: 8Gi
---

# 配置zookeeper外部连接
zookeeper:
  enabled: false                   # 不使用内部zookeeper

externalZookeeper:                 # 外部zookeeper
  servers: zookeeper               
2.3.3. 高可用配置
  • 默认分区数、默认副本数、日志过期时间。(需根据kafka节点数设定)
## 允许删除topic(按需开启)
deleteTopicEnable: true

## 日志保留时间(默认一周)
logRetentionHours: 168

## 自动创建topic时的默认副本数
defaultReplicationFactor: 2

## 用于配置offset记录的topic的partition的副本个数
offsetsTopicReplicationFactor: 2

## 事务主题的复制因子
transactionStateLogReplicationFactor: 2

## min.insync.replicas
transactionStateLogMinIsr: 2

## 新建Topic时默认的分区数
numPartitions: 3

image-20210815141616563

2.3.4. 安装
cd ~/kafka
helm install kafka -n kafka .

3. 调试

3.1. 查询、创建

  • 进入pod
kubectl exec -it -n kafka kafka-0 -- bash
  • 创建topic(3分区+2副本)
kafka-topics.sh --zookeeper zookeeper:2181 --topic test001  --create --partitions 3 --replication-factor 2
  • 列出topic;查询topic详情
kafka-topics.sh --list --zookeeper zookeeper:2181
kafka-topics.sh --zookeeper zookeeper:2181 --describe --topic test001

3.2. 生产、消费

  • 生产
kafka-console-producer.sh --broker-list kafka:9092 --topic test001
  • 消费(另开一个窗口进入pod)
kafka-console-consumer.sh --bootstrap-server kafka:9092 --from-beginning --topic test001 

3.3. 修改、删除

  • 修改topic配置:增加分区至4个(分区只可增不可减),并调整日志保留时间为10天(需换算为毫秒)
kafka-topics.sh --zookeeper zookeeper:2181 --alter --config retention.ms=864000000 --partitions 4 --topic test001 
  • 删除topic(需要设置deleteTopicEnable: true)
kafka-topics.sh --delete --zookeeper zookeeper:2181 --topic test001 

3.4. 维护须知

  • 若zookeeper所有节点宕机/卸载后重新部署,zookeeper恢复后还需要重新启动kafka集群。

若本篇内容对您有所帮助,请三连点赞,关注,收藏支持下~

;