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
脚本将在默认位置的目录中查找网络配置。
检查以下步骤:
确保 所有要求 已填满。
确保您不会阻止出站流量,并且该端口
6443
入口规则对工作节点是打开的(与加入阶段相关) - 检查防火墙规则。检查是否 所需端口 没有被占用。
使用以下命令重启 Kubelet
systemctl restart kubelet
,然后使用以下命令检查最新日志:
sudo journalctl -u kubelet -n 100 --no-pager
。检查 Docker 版本是否可以更新为新的更稳定的版本。
尝试运行 并确保 使用最新版本或通过添加使用特定的稳定版本
kubeadm reset
重新运行 。kubeadm init
--kubernetes-version=X.Y.Z
阅读更多: kubelet-kubernetes-配置文件。
此外,如果您正在使用 CRI-O - 请参阅解决方案kubeadm-crio。
看看类似的问题:vpc-cni-k8s,rbac-flannel-kubeadm。