kubernetes中網絡報錯問題
阿新 • • 發佈:2018-05-28
kubernetes中網絡報錯問題 cni kubernetes pod kubernetes中網絡報錯問題
- 系統環境
#系統版本 cat /etc/redhat-release CentOS Linux release 7.4.1708 (Core)
#kubelet版本 kubelet --version Kubernetes v1.10.0
#selinux狀態 getenforce Disabled
#系統防火墻狀態 systemctl status firewalld ● firewalld.service - firewalld - dynamic firewall daemon Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled) Active: inactive (dead) Docs: man:firewalld(1)
- Pod 異常問題
#dns的Pod 一直處於 Waiting 或 ContainerCreating 狀態 kubectl get po -n kube-system NAME READY STATUS RESTARTS AGE kube-dns-86f4d74b45-ffwjf 0/3 ContainerCreating 0 6m
#查看Pod詳細情況 kubectl describe pod kube-dns-86f4d74b45-ffwjf -n kube-system ##我們看到如下信息: Error syncing pod Pod sandbox changed, it will be killed and re-created. ##可以發現,該 Pod 的 Sandbox 容器無法正常啟動,具體原因需要查看 Kubelet 日誌。
#查看Pod的log journalctl -u kubelet ##看到如下報錯內容: RunPodSandbox from runtime service failed: rpc error: code = 2 desc = NetworkPlugin cni failed to set up pod "kube-dns-86f4d74b45-ffwjf" network: failed to set bridge addr: "cni0" already has an IP address different from 10.244.4.1/24
##說明
這裏的一個Pod中啟動了多個容器,所以,我們使用kubectl logs 命令查看日誌很有局限性,關於kubectl logs的使用,請參考kubernetes中的Pod簡述與實踐和kubernetes中文文檔。 - 處理步驟
#在master節點之外的節點進行操作 kubeadm reset systemctl stop kubelet systemctl stop docker rm -rf /var/lib/cni/ rm -rf /var/lib/kubelet/* rm -rf /etc/cni/ ifconfig cni0 down ifconfig flannel.1 down ifconfig docker0 down ip link delete cni0 ip link delete flannel.1 ##重啟kubelet systemctl restart kubelet ##重啟docker systemctl restart docker
#說明 ##如果上面操作之後還是報相同的錯誤或是如下錯誤: "CreatePodSandbox for pod \" kube-dns-86f4d74b45-ffwjf _default(78e796f5-e b7c-11e7-b903-b827ebd42d30)\" failed: rpc error: code = Unknown desc = N etworkPlugin cni failed to set up pod \" kube-dns-86f4d74b45-ffwjf _default\" network: failed to allocate for range 0: no IP addresses available in range set: 10.244.1.1-10.244.1.254"
#執行如下操作步驟: ##在master主機上 kubeadm reset systemctl stop kubelet systemctl stop docker rm -rf /var/lib/cni/ rm -rf /var/lib/kubelet/* rm -rf /etc/cni/ ifconfig cni0 down ifconfig flannel.1 down ifconfig docker0 down ip link delete cni0 ip link delete flannel.1 ##重啟kubelet systemctl restart kubelet ##重啟docker systemctl restart docker
##初始化 kubeadm init --kubernetes-version=v1.10.1 --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=10.0.0.39 ##說明: 最後給出了將節點加入集群的命令: kubeadm join 10.0.0.39:6443 --token 4g0p8w.w5p29ukwvitim2ti --discovery-token-ca-cert-hash sha256:21d0adbfcb409dca97e65564 1573b2ee51c 77a212f194e20a307cb459e5f77c8 這條命令一定保存好,因為後期沒法重現的!!
##建立.kube rm -rf /root/.kube/ mkdir -p /root/.kube/ cp -i /etc/kubernetes/admin.conf /root/.kube/config chown root:root /root/.kube/config
#在node(非master)節點上 kubeadm reset systemctl stop kubelet systemctl stop docker rm -rf /var/lib/cni/ rm -rf /var/lib/kubelet/* rm -rf /etc/cni/ ifconfig cni0 down ifconfig flannel.1 down ifconfig docker0 down ip link delete cni0 ip link delete flannel.1 ##重啟kubelet systemctl restart kubelet ##重啟docker systemctl restart docker
## kubeadm join kubeadm join 10.0.0.39:6443 --token 4g0p8w.w5p29ukwvitim2ti --discovery-token-ca-cert-hash sha256:21d0adbfcb409dca97e65564 1573b2ee51c 77a212f194e20a307cb459e5f77c8
- 總結
除了以上錯誤,其他可能的原因還有:
鏡像拉取失敗,比如:
(1)配置了錯誤的鏡像
(2)Kubelet 無法訪問鏡像(國內環境訪問 gcr.io 需要特殊處理
(3)私有鏡像的密鑰配置錯誤
(4)鏡像太大,拉取超時(可以適當調整 kubelet 的 --image-pull-progress-deadline 和 --runtime-request-timeout 選項)
CNI 網絡錯誤,一般需要檢查 CNI 網絡插件的配置,比如:
(1)無法配置 Pod 網絡
(2)無法分配 IP 地址
容器無法啟動,需要檢查是否打包了正確的鏡像或者是否配置了正確的容器參數等。 - 參考文章
https://github.com/kubernetes/kubernetes/issues/57280
kubernetes中網絡報錯問題