背景
因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节点进行网络插件重加载操作,运行完成之后,您可以再次运行检查流程中步骤一:运行脚本检查节点,以确认集群是否加固完成。如仍出现异常信息,请提交工单。
文档内容是否对您有帮助?