验证安装

检查 DaemonSet 的状态并验证所有需要的实例都处于 ready 状态:

$ kubectl --namespace kube-system get ds
NAME      DESIRED   CURRENT   READY     NODE-SELECTOR   AGE
cilium    1         1         0         <none>          3s

在此示例中,我们看到 1 个期望的状态,0 个 ready 状态。这表明有问题。下一步是通过在 k8s-app=cilium 标签上匹配列出所有 cilium pod,并根据每个 pod 的重启次数对列表进行排序,以便轻松识别失败的 pod:

$ kubectl --namespace kube-system get pods --selector k8s-app=cilium \
          --sort-by='.status.containerStatuses[0].restartCount'
NAME           READY     STATUS             RESTARTS   AGE
cilium-813gf   0/1       CrashLoopBackOff   2          44s

cilium-813gf pod 失败并且已经重新启动了 2 次。让我们打印该 pod 的日志文件来调查原因:

$ kubectl --namespace kube-system logs cilium-813gf
INFO      _ _ _
INFO  ___|_| |_|_ _ _____
INFO |  _| | | | | |     |
INFO |___|_|_|_|___|_|_|_|
INFO Cilium 0.8.90 f022e2f Thu, 27 Apr 2017 23:17:56 -0700 go version go1.7.5 linux/amd64
CRIT kernel version: NOT OK: minimal supported kernel version is >= 4.8

在此示例中,失败的原因是在工作节点上运行的 Linux 内核不符合系统要求

如果根据这些简单的步骤无法发现问题的原因,请来我们的 Slack channel

集群外的 APIserver

如果你出于某种原因在集群外部运行 Kubernetes Apiserver(例如将主节点保留在防火墙后面),请确保您也在主节点上运行 Cilium。否则,由 Apiserver 创建的 Kubernetes pod 代理将无法路由到 pod IP,并且你在尝试将流量代理到 pod 时可能会遇到错误。

你可以将 Cilium 作为静态 pod 运行,或者为 Cilium DaemonSet 设置容忍 ,以确保将 Cilium pod 安排在你的主节点上。执行此操作的确切方法取决于你的设置。