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集群。

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

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Kubernetes (K8s) 是一个开源容器编排平台,用于自动化部署、扩展和管理容器化应用程序。要在 Kubernetes 集群部署单机 Kafka(Apache Kafka),你需要了解以下几个步骤: 1. **安装Kafka**: 首先,你需要在一台机器上安装 Apache Kafka。你可以从 Kafka 官方网站下载二进制包,然后按照官方文档配置和启动。 2. **创建Deployment** 或者 **StatefulSet**: 在K8s中,你可以使用 Deployment 对象来滚动更新应用,或使用 StatefulSet 来为每个实例分配稳定的网络名称(对于持久化的生产者/消费者群组)。模板文件通常包含 Kafka 的环境变量(如 `KAFKA_BROKER_ID`)和容器镜像信息。 ```yaml apiVersion: apps/v1 kind: Deployment metadata: name: kafka-deployment spec: replicas: 1 selector: matchLabels: app: kafka template: metadata: labels: app: kafka spec: containers: - name: kafka image: confluentinc/cp-kafka:latest env: - name: KAFKA_BROKER_ID value: "0" ports: - containerPort: 9092 ``` 3. **配置服务** (Service): 创建一个 Service 对象来暴露集群内部的 Kafka 实例。这将提供一个外部访问点,并根据你的需求选择负载均衡策略。 ```yaml apiVersion: v1 kind: Service metadata: name: kafka- name: kafka-port port: 9092 targetPort: 9092 ``` 4. **验证部署** 和 **访问**:使用kubectl命令行工具检查资源是否已成功部署并可用。你可以通过 `kubectl get pods` 查看 pod 状态,通过 `kubectl get services` 查看服务状态。 5. **注意安全性和权限**:确保你的 K8s 集群Kafka 服务之间具有正确的网络规则和安全配置,比如使用 ingress controller 或者设置相应的 RBAC 规则。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值