背景
因02月23日ECS管控API發生異常,ACK及ACK Pro集群網絡模式若為Terway(獨占ENI或ENI多IP模式),部分用戶在異常時間段所創建的Pod的IP會由于信息不一致而導致網絡不通。我們建議相關用戶核查此類Pod,如有問題需要加以修復,具體操作如下。
檢查流程
步驟一:運行腳本檢查節點
在每個節點上運行如下腳本。
#!/bin/bash
set -e
err(){
echo "error at line $1"
}
trap 'err $LINENO' ERR
check(){
cid=$1
pid=$(docker inspect $cid -f '{{.State.Pid}}')
if [ -z "$pid" ]; then
echo 'cannot get pid from container $cid'
return 1
fi
nsenter -t $pid -n curl -s --connect-timeout 4 100.100.100.200 -o /dev/null
}
for line in $(docker ps|grep -v k8s_POD|awk '$NF~/^k8s_/{print $1"_"$NF}'|awk -F_ '{print $1"_"$3"_"$4"_"$5}')
do
IFS=_ read cid cname pod namespace <<< $line
if ! check $cid; then
echo "pod $namespace/$pod has connectivity issues"
fi
if [[ "$cname" == "terway" && "$namespace" == "kube-system" && "$pod" =~ ^(terway-|terway-eniip-|terway-eni-) ]]; then
terway_container=$cid
fi
done
if [ -n "$terway_container" ]; then
for pod in $(docker exec -it $terway_container terway-cli mapping|sed -r "s/\x1B\[([0-9]{1,3}(;[0-9]{1,2})?)?[mGK]//g"|awk '$3=="X"{print $1}')
do
echo "pod $pod on this host has connectivity issues"
done
fi
預期輸出:
pod *** has connectivity issues
如果輸出以上信息,表示對應的Pod可能分配了一個有問題的IP。
步驟二:修復有問題的Pod
重建Terway Pod。
kubectl -n kube-system delete pod -l app=terway kubectl -n kube-system delete pod -l app=terway-eniip kubectl -n kube-system delete pod -l app=terway-eni
重建受影響的Pod。
如果是通過Deployment或DaemonSet方式創建的Pod,您可以直接刪除Pod,等待系統重新創建。
如果是您直接創建的Pod,您需要刪除Pod之后重新創建。
說明
以上腳本是對于網絡通信異常的Pod節點進行網絡插件重加載操作,運行完成之后,您可以再次運行檢查流程中步驟一:運行腳本檢查節點,以確認集群是否加固完成。如仍出現異常信息,請提交工單。
文檔內容是否對您有幫助?