kubernetes pod 总是处于 ContainerCreating 状态但从未准备好

kubernetes pod 总是处于 ContainerCreating 状态但从未准备好

TL:DR 容器创建 Pod 状态,Docker 容器已暂停,日志中报告 /var/lib/kubelet/config.yaml 丢失,但确实存在并出现在 中systemctl status kublet。在 AWS EC2 上的详细信息如下。

我在亚马逊 EC2 上有一个自制的 Kubernetes 集群。

cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo 
[kubernetes] 
name=Kubernetes 
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7\$basearch 
enabled=1 
gpgcheck=1 
repo_gpgcheck=1 
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg 
https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg 
exclude=kubelet kubeadm kubectl 
EOF

sudo yum -y install docker iproute-tc kubelet kubectl kubeadm --disableexcludes=kubernetes

/usr/lib/sysctl.d/00-system.conf
net.bridge.bridge-nf-call-iptables = 1

/usr/lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock $OPTIONS $DOCKER_STORAGE_OPTIONS $DOCKER_ADD_RUNTIMES --exec-opt native.cgroupdriver=systemd

至此,docker、containerd、kubelet均启用并启动。

sudo kubeadm init

在此阶段节点尚未准备就绪。

接下来我运行:

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/k8s-manifests/kube-flannel-rbac.yml

法兰绒在这里可能只是个噱头,但它似乎取得了进展。节点现在显示为就绪状态。

我基于此创建了一个deployment.yaml文件: https://v1-18.docs.kubernetes.io/docs/tasks/run-application/run-stateless-application-deployment/

kubectl apply -f deployment.yaml

尝试编织静脉希望:

kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')"

允许 Pod 在主节点上进行调度: kubectl taint nodes --all node-role.kubernetes.io/master-

pod 显示为 ContainerCreating。所以我想这就是事情变得有趣的地方,因为我们现在进入了日志领域。

kubectl get events --all-namespaces --sort-by='.metadata.creationTimestamp'

这里要贴的东西太多了,但很多行看起来像 Warning FailedCreatePodSandBox

该命令docker ps报告所有容器都已暂停。

journalctl -u kubelet

第一个错误显示:

server.go:198] failed to load Kubelet config file /var/lib/kubelet/config.yaml, error failed to read kubelet config file "/var/lib/kubelet/config.yaml", error: open /var/lib/kubelet/config.yaml: no such file or directory

ls -alh显示该文件存在且大小为 876B。

我的研究似乎都无法解决这些潜在问题,请帮忙……

答案1

您的 CNI 版本已输入kube-flannel.yaml ConfigMap 配置文件中。

cni-conf.json: |
    {
      "name": "cbr0",
      "cniVersion": "0.3.1",
      "plugins": [
        {
          "type": "flannel",
          "delegate": {
            "hairpinMode": true,
            "isDefaultGateway": true
          }
        },
        {
          "type": "portmap",
          "capabilities": {
            "portMappings": true
          }
        }
      ]
    }

但是/etc/cni/net.d脚本将在默认位置的目录中查找网络配置。

检查以下步骤:

  1. 确保 所有要求 已填满。

  2. 确保您不会阻止出站流量,并且该端口 6443 入口规则对工作节点是打开的(与加入阶段相关) - 检查防火墙规则。

  3. 检查是否 所需端口 没有被占用。

  4. 使用以下命令重启 Kubelet systemctl restart kubelet ,然后使用以下命令检查最新日志:
    sudo journalctl -u kubelet -n 100 --no-pager

  5. 检查 Docker 版本是否可以更新为新的更稳定的版本。

  6. 尝试运行 并确保 使用最新版本或通过添加使用特定的稳定版本 kubeadm reset 重新运行 。kubeadm init--kubernetes-version=X.Y.Z

阅读更多: kubelet-kubernetes-配置文件

此外,如果您正在使用 CRI-O - 请参阅解决方案kubeadm-crio

看看类似的问题:vpc-cni-k8srbac-flannel-kubeadm

相关内容