为什么Kafka没有开始部署在本地k8s上?

问题描述 投票:0回答:1

我有 Windows 机器,安装了 docker + k8s(从 docker 启用)实例 为了在 k8s 中创建 kafka 实例,我选择了here

要部署 kafka 使用以下命令:

kubectl create namespace kafka
kubectl create -f 'https://strimzi.io/install/latest?namespace=kafka' -n kafka
kubectl apply -f https://strimzi.io/examples/latest/kafka/kafka-persistent-single.yaml -n kafka

一切都很顺利,但是 当我重新启动笔记本时,kafka pod 启动时出现错误(镜头屏幕)

当我打开日志时,我看到zookeeper连接错误 当打开zookeeper pod日志时,我看到这样的错误

2023-12-09 18:06:49,991 INFO Created server with tickTime 2000 ms minSessionTimeout 4000 ms maxSessionTimeout 40000 ms clientPortListenBacklog -1 datadir /var/lib/zookeeper/data/version-2 snapdir /var/lib/zookeeper/data/version-2 (org.apache.zookeeper.server.ZooKeeperServer) [QuorumPeer[myid=1](plain=127.0.0.1:12181)(secure=0.0.0.0:2181)]
2023-12-09 18:06:49,991 ERROR Couldn't bind to my-cluster-zookeeper-0.my-cluster-zookeeper-nodes.kafka.svc/<unresolved>:2888 (org.apache.zookeeper.server.quorum.Leader) [QuorumPeer[myid=1](plain=127.0.0.1:12181)(secure=0.0.0.0:2181)]
java.net.SocketException: Unresolved address
    at java.base/java.net.ServerSocket.bind(ServerSocket.java:380)
    at java.base/java.net.ServerSocket.bind(ServerSocket.java:342)
    at org.apache.zookeeper.server.quorum.Leader.createServerSocket(Leader.java:322)
    at org.apache.zookeeper.server.quorum.Leader.lambda$new$0(Leader.java:301)
    at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
    at java.base/java.util.concurrent.ConcurrentHashMap$KeySpliterator.forEachRemaining(ConcurrentHashMap.java:3573)
    at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
    at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
    at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150)
    at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173)

我尝试将k8s和docker重置为出厂配置,尝试更改docker的资源(增加内存空间)但错误是相同的

更新:

列出权限

DNS 日志

这意味着 coredns-5dd5756b68-qhp5q pod 无法连接到 192.168.65.7:53

重新启动 k8s 节点后,我在相同的 dns 日志中看到错误

[ERROR] plugin/errors: 2 5593748469660065637.885187837306804871. HINFO: read udp 10.1.0.27:42685->192.168.65.7:53: i/o timeout
[ERROR] plugin/errors: 2 5593748469660065637.885187837306804871. HINFO: read udp 10.1.0.27:44025->192.168.65.7:53: i/o timeout
java kubernetes apache-kafka apache-zookeeper strimzi
1个回答
0
投票

注意:此回复部分是使用 GenAI 技术构建的,目前正在由我(该社区的新成员)审查其准确性和是否遵守 Stack Overflow 指南。我正在熟悉社区标准和行为准则。

  1. 由于“无法解析的地址”错误,Kafka pod 无法绑定到 Zookeeper 服务。
  2. CoreDNS pod 无法解析某些 IP,这对于 Kubernetes 集群内的服务发现至关重要。

一一解决这些潜在问题:

问题一:Kafka Pod 与 Zookeeper 绑定

指示“无法绑定到 my-cluster-zookeeper-0.my-cluster-zookeeper-headless.kafka.svc”的错误消息可能表明存在服务发现问题。这可能是因为 Zookeeper 无头服务未正确设置,或者 Kafka 代理尝试绑定到不可解析的主机名。

解决方案要考虑的步骤:

  • 确保您的 Zookeeper Pod 运行没有问题。
  • 尝试使用
    kubectl get svc -n kafka
    检查 Zookeeper 无头服务,并确保其正确指向 Zookeeper Pod。
  • 确认 Zookeeper 的 Kafka Broker 配置(
    zookeeper.connect
    中的
    server.properties
    )正确。

问题2:CoreDNS解析问题

DNS 解析问题可能是因为 CoreDNS pod 无法连接到 Kubernetes API。这通常是由于网络配置错误或资源限制造成的。

解决步骤:

  • 详细检查 CoreDNS pod 日志以获取任何线索:
    kubectl logs -n kube-system -l k8s-app=kube-dns
  • 验证 CoreDNS ConfigMap 是否存在任何错误配置。
  • 确保没有网络策略阻止到 CoreDNS Pod 的流量。
  • 确保您的 Docker Desktop 和 Kubernetes 分配了足够的资源,因为 DNS 问题有时可能是资源匮乏的症状。

其他故障排除步骤:

  • 使用
    kubectl describe pod <kafka-pod-name> -n kafka
    获取有关 Kafka Pod 无法启动原因的更详细日志。
  • 检查 Kafka 命名空间中的事件是否存在任何异常:
    kubectl get events -n kafka
  • 检查任何持久存储问题(如果适用),因为 Kafka 需要持久卷才能正常运行。

还值得注意的是,Docker Desktop 的 Kubernetes 集群用于开发目的,其行为可能与生产集群不同。确保您使用 Docker Desktop 提供的 Strimzi 和 Kubernetes 的兼容版本。

如果这些步骤无法解决问题,请提供其他日志和配置详细信息以供进一步诊断。

© www.soinside.com 2019 - 2024. All rights reserved.