【发布时间】:2020-10-27 17:36:55
【问题描述】:
我一直在尝试设置一个由 4 个 Raspberry Pi 4 组成的集群,以按照 old guide 运行 Kubernetes。我以前做过一次,很成功。但是经过搬家和其他一些更改后,我决定使用全新安装的 Raspberry Pi OS 和最新版本的 kubeadm (1.19) 等重新创建集群。一个例外是我使用的是 Weave 2.6.5 而不是最新的根据this comment,似乎最新版本的 Weave 无法在 Pis 上运行——我自己确认了这一点。
不幸的是,在全新安装所有内容之后,CoreDNS pod 似乎永远不会出现。 Weave.net 成功上线。但 CoreDNS 从来没有。这是我正在运行的 pod 的列表:
$ k get pods -n kube-system
NAME READY STATUS RESTARTS AGE
coredns-f9fd979d6-6jlq7 0/1 Running 0 6m4s
coredns-f9fd979d6-qqnzw 0/1 Running 0 6m5s
etcd-k8s-master-1 1/1 Running 0 24m
kube-apiserver-k8s-master-1 1/1 Running 0 24m
kube-controller-manager-k8s-master-1 1/1 Running 2 24m
kube-proxy-dq62m 1/1 Running 0 24m
kube-scheduler-k8s-master-1 1/1 Running 2 24m
weave-net-qb7t7 2/2 Running 0 17m
kube-controller-manager 和 kube-scheduler 定期重启也有点奇怪,但我想知道这是否与 DNS 从未出现过有关?无论如何,以下是 DNS 容器的 pod 日志示例:
$ k logs -n kube-system pod/coredns-f9fd979d6-6jlq7
.:53
[INFO] plugin/reload: Running configuration MD5 = db32ca3650231d74073ff4cf814959a7
CoreDNS-1.7.0
linux/arm, go1.14.4, f59c03d
[INFO] plugin/ready: Still waiting on: "kubernetes"
[INFO] plugin/ready: Still waiting on: "kubernetes"
I1027 17:22:37.977315 1 trace.go:116] Trace[1427131847]: "Reflector ListAndWatch" name:pkg/mod/k8s.io/client-go@v0.18.3/tools/cache/reflector.go:125 (started: 2020-10-27 17:22:07.975379387 +0000 UTC m=+0.092116055) (total time: 30.00156301s):
Trace[1427131847]: [30.00156301s] [30.00156301s] END
I1027 17:22:37.977301 1 trace.go:116] Trace[2019727887]: "Reflector ListAndWatch" name:pkg/mod/k8s.io/client-go@v0.18.3/tools/cache/reflector.go:125 (started: 2020-10-27 17:22:07.976078211 +0000 UTC m=+0.092814546) (total time: 30.000710725s):
Trace[2019727887]: [30.000710725s] [30.000710725s] END
E1027 17:22:37.977433 1 reflector.go:178] pkg/mod/k8s.io/client-go@v0.18.3/tools/cache/reflector.go:125: Failed to list *v1.Namespace: Get "https://10.96.0.1:443/api/v1/namespaces?limit=500&resourceVersion=0": dial tcp 10.96.0.1:443: i/o timeout
E1027 17:22:37.977471 1 reflector.go:178] pkg/mod/k8s.io/client-go@v0.18.3/tools/cache/reflector.go:125: Failed to list *v1.Service: Get "https://10.96.0.1:443/api/v1/services?limit=500&resourceVersion=0": dial tcp 10.96.0.1:443: i/o timeout
I1027 17:22:37.978491 1 trace.go:116] Trace[911902081]: "Reflector ListAndWatch" name:pkg/mod/k8s.io/client-go@v0.18.3/tools/cache/reflector.go:125 (started: 2020-10-27 17:22:07.97561805 +0000 UTC m=+0.092354423) (total time: 30.002742659s):
Trace[911902081]: [30.002742659s] [30.002742659s] END
E1027 17:22:37.978535 1 reflector.go:178] pkg/mod/k8s.io/client-go@v0.18.3/tools/cache/reflector.go:125: Failed to list *v1.Endpoints: Get "https://10.96.0.1:443/api/v1/endpoints?limit=500&resourceVersion=0": dial tcp 10.96.0.1:443: i/o timeout
[INFO] plugin/ready: Still waiting on: "kubernetes"
[INFO] plugin/ready: Still waiting on: "kubernetes"
作为一名应用程序开发人员,我使用过 Kubernetes 并且喜欢它。但是我必须承认,当我进入它正在做的事情的坚韧不拔的起落架时(阅读:当它不起作用时),我发现自己迷失了方向。我的 Pi 的本地 IP 是 192.168.1.194。事实上,所有本地 IP 都在 192.168.x.x 范围内。那么为什么它看起来像是在尝试访问 10.96.0.1,然后获得 I/O 超时?这正常吗?这只是 Docker 网络内部结构的一部分,比如映射到 Docker 系统的假 IP 或类似的东西吗?
更重要的是,我需要做什么才能让 DNS 正常工作?当然,我可以从控制台很好地卷曲,所以 DNS 可以在 Pi 上运行。在设置的早些时候,我还运行了以下命令:
sudo iptables -P FORWARD ACCEPT
sudo ufw allow 8080
sudo ufw allow 16443
sudo ufw allow ssh
sudo ufw default allow routed
sudo ufw enable
根据我的经验,这几个命令是“解除阻止” DNS 工作所需要的全部,但不幸的是,这一次似乎还不够,因为 CoreDNS 容器从未完全准备好。
我很乐意提供任何可能有帮助的额外日志消息。
【问题讨论】:
-
你用什么网络插件?你如何启动 k8s 集群? 10.96.0.1 似乎是您的 kube-apiserver IP。您需要一个 K8s 内部 DNS 系统来进行正确的服务发现等。尝试:来自您的节点的 curl 10.96.0.1:443/version -- 您在安装过程中是否使用了:--bind-address 或 --advertise-address?检查 kube-apiserver pod 的日志!
-
如上所述,我使用 weave-net 2.6.5 作为网络插件。我通过简单地安装 kubeadm 然后运行 kubeadm init 来安装 Kubernetes。我共享的first link 中包含了我运行的更广泛的命令列表。我确定我没有使用您提到的两个参数(绑定地址或广告地址)中的任何一个,实际上我什至不确定这些参数是什么?对于 kubeadm init,它们似乎不是 arguments。
标签: docker kubernetes dns raspberry-pi weave