阿里云首页

应急预案:敏捷PaaS版中terway-vlan在etcd中记录的IP与实际IP不一致的修复方法

1. 概述

本文主要介绍在敏捷PaaS版中,terway-vlan在etcd中记录的IP与实际IP不一致的修复方法。

1.1. 适用范围

  • 专有云敏捷PaaS版,VPC
    说明:适用于使用terway网络插件的版本。

1.2. 用户告知

  • 适用平台:x86
  • 授权级别:L1(一线驻场工程师)、L2(二线技术支持工程师)
  • 临时或固化方案:固化
  • 操作复杂度:中
  • 预估执行时长:30分钟
  • 业务影响:否
    说明:应急处理时客户业务不可用。
  • 风险等级:中

2. 问题描述

terway-vlan环境在某种情况下,可能会出现etcd中记录的IP和Pod实际使用的IP不一致的情况,这种情况可能会导致存在Pod使用了相同的IP,从而导致因IP冲突无法进行正常的网络通信。

3. 解决方案

3.1. 环境检查

查看集群组件以及节点状态

  1. 登录任意一台Master,使用root用户,执行以下命令,查看节点组件状态,确保组件都是Running状态。
    kubectl get pod -n kube-system
    系统显示类似如下。
  2. 执行以下命令,确保节点都是Ready状态。
    kubectl get nodes
    系统显示类似如下。

查看环境中重复的IP地址

执行以下命令,查看环境中重复的IP地址。输出结果中非Node节点的IP地址即为重复的Pod IP。

kubectl get pod --all-namespaces -o wide |grep -v NAME |egrep -v 'Comple' | awk '{print $7}' | sort -n | uniq -c | sort -n -k 1 -r | head -n 20

3.2. 实施步骤

请使用“查看在etcd中记录的IP与实际IP不一致的Pod脚本”,检查环境中存在问题的Pod。

  • 如果Pod数量比较少,手动重启Pod即可。
    说明:包括第脚本执行结果中有“pod %s not exists in etcd”输出的Pod,也需要重启。
  • 如果Pod数量很多,则需要使用“自动订正IP脚本”修改etcd中的存储,运行脚本直至输出结果中start..processend..process中间没有任何其他内容输出即可。然后使用 “查看在etcd中记录ip跟实际ip不一致的pod脚本”,检查环境中存在问题的Pod,手动重启Pod即可。
    说明:包括第脚本执行结果中有“pod %s not exists in etcd”输出的Pod,也需要重启。

3.3. 结果验证

使用etcd中的IP检测脚本之后,发现无异常Pod输出。说明没有IP占用的情况。

4. 回滚方案

无需回滚,操作前的情况已是非正常状态。

5. 补充说明

查看在etcd中记录的IP与实际IP不一致的Pod脚本

执行脚本后会输出IP在etcd中的记录与实际IP不一致的Pod,每一行是POD_NAMESPACE/POD_NAME的格式。

查看在etcd中记录ip跟实际ip不一致的pod脚本.txt

自动订正IP的脚本

脚本执行思路如下:

  1. 扫描出状态为running的非hostnetwork Pod列表。
  2. 根据列表中所有Pod的Pod Name查看Pod在etcd中的记录,查看IP记录是否正确,把不正确的IP记录,存到内存中。
  3. 根据列表中所有Pod的Pod IP查看Pod在etcd中的记录,如果IP记录不存在,记录实际的Pod Name,返回一个数组。
    • 如果返回的数组为空,则退出程序。
    • 如果返回的数组不为空,则遍历数组,对每个元素,循环完之后回到第1步。根据元素的Pod Name,找到第2步中记录的对应Pod Name相同的IP,然后修改该记录的Key和Value,修改成Pod实际使用的IP。

自动订正IP脚本.txt脚本文件中的变量说明如下:

  • etcd_endpoint_ip变量需要修改成对应环境中任意etcd的节点IP,ip_whitelist中的元素是已经有两个Pod同时使用了的IP列表。
  • cidr_with_sharp是容器网段的cidr,但是斜杠(/)符号需要替换成井号(#)。

 

首页 应急预案:敏捷PaaS版中terway-vlan在etcd中记录的IP与实际IP不一致的修复方法