K8s集群部署Kafka遇CrashLoopBackOff:数据目录权限问题求助
问题:K8s集群部署Kafka陷入CrashLoopBackOff,数据目录权限异常
ZooKeeper已成功部署无异常,但Kafka始终无法正常运行,陷入CrashLoopBackOff状态。查看Pod日志显示数据目录不可写:
===> User uid=1000(appuser) gid=1000(appuser) groups=1000(appuser) ===> Configuring ... ===> Running preflight checks ... ===> Check if /var/lib/kafka/data is writable ... Command [/usr/local/bin/dub path /var/lib/kafka/data writable] FAILED !
当前使用的Deployment配置如下:
kind: Deployment apiVersion: apps/v1 metadata: name: kafka-broker0 spec: replicas: 2 selector: matchLabels: app: kafka id: "0" template: metadata: labels: app: kafka id: "0" spec: containers: - name: kafka image: confluentinc/cp-kafka:6.2.2 ports: - containerPort: 9092 env: - name: KAFKA_ADVERTISED_LISTENERS value: PLAINTEXT://127.0.0.1:9092 - name: KAFKA_ZOOKEEPER_CONNECT value: zoo1:2181 - name: KAFKA_BROKER_ID value: "0" - name: KAFKA_CREATE_TOPICS value: input:1:1, output:1:1 volumeMounts: - mountPath: /var/lib/kafka/data name: kafka-data volumes: - name: kafka-data persistentVolumeClaim: claimName: kafka-data
解决方案
方法1:以root用户运行Kafka容器
在Deployment的containers字段下的Kafka容器配置中添加user: "0"(root用户的UID),修改后的容器配置片段如下:
containers: - name: kafka image: confluentinc/cp-kafka:6.2.2 user: "0" # 添加此行,指定以root用户运行 ports: - containerPort: 9092 # 其余配置保持不变
方法2:调整数据目录权限给appuser(推荐,避免root运行)
添加一个初始化容器(initContainer),在Kafka启动前修改挂载目录的权限为uid=1000(镜像默认的appuser)可写。修改后的Deployment配置片段如下:
spec: initContainers: - name: fix-data-permissions image: busybox:1.35 command: ["sh", "-c", "chown -R 1000:1000 /var/lib/kafka/data"] volumeMounts: - name: kafka-data mountPath: /var/lib/kafka/data containers: - name: kafka # 原Kafka容器配置保持不变
原因说明:confluentinc/cp-kafka镜像默认使用UID=1000的appuser用户运行进程,而K8s挂载的持久化卷(PV)默认目录权限通常为root用户所有,导致appuser无法写入数据目录,触发启动检查失败。
内容的提问来源于stack exchange,提问作者mona moghadampanah
相关产品推荐
相关产品推荐

