单节点 K8S IP 修改步骤

适用场景

kubeadm 部署的私有化单节点 K8S 集群(任意网络插件)节点 IP 变更,适配不同网络配置场景,无硬编码固定值。

操作

1. 备份配置

复制代码
cp -r /etc/kubernetes/ /etc/kubernetes_bak

2. 替换 IP 配置

复制代码
find /etc/kubernetes/ -type f | xargs -i sed -i 's/旧ip/新ip/g' {}
sed -i 's/旧ip/新ip/g' /etc/hosts

3. 重建 admin.conf

复制代码
rm -f /etc/kubernetes/admin.conf
kubeadm init phase kubeconfig admin --apiserver-advertise-address 新ip

4. 重建 apiserver 证书

复制代码
rm -f /etc/kubernetes/pki/apiserver.*
kubeadm init phase certs apiserver --apiserver-advertise-address 新ip

5. 重启服务

复制代码
systemctl restart docker
systemctl restart kubelet
# kubelet报主机名notfound时执行
# hostnamectl set-hostname 自定义主机名 && systemctl restart kubelet

6. 配置 kubectl

复制代码
cp -f /etc/kubernetes/admin.conf ~/.kube/config

7. 更新 ConfigMap

复制代码
kubectl edit cm -n kube-system kube-proxy
kubectl edit cm -n kube-system kubeadm-config

8. 验证集群状态

复制代码
kubectl -n kube-system get pod

常见故障通用处理方案

1. coredns 提示 /run/flannel/subnet.env 不存在

步骤 1:获取集群真实 flannel 网段配置

复制代码
# 方式1:从flannel的ConfigMap获取集群总网段
FLANNEL_NETWORK=$(kubectl get cm kube-flannel-cfg -n kube-system -o yaml | grep -oP 'Network: \K.*' | tr -d ' ')
# 方式2:从运行中的flannel Pod获取节点子网(若方式1失败)
FLANNEL_SUBNET=$(kubectl exec -n kube-system $(kubectl get pod -n kube-system | grep flannel | awk '{print $1}') -- env | grep FLANNEL_SUBNET | cut -d'=' -f2)
# 方式3:获取flannel MTU和IPMASQ配置
FLANNEL_MTU=$(kubectl exec -n kube-system $(kubectl get pod -n kube-system | grep flannel | awk '{print $1}') -- env | grep FLANNEL_MTU | cut -d'=' -f2)
FLANNEL_IPMASQ=$(kubectl exec -n kube-system $(kubectl get pod -n kube-system | grep flannel | awk '{print $1}') -- env | grep FLANNEL_IPMASQ | cut -d'=' -f2)

步骤 2:生成适配当前集群的 subnet.env 文件

复制代码
# 若自动获取失败,可手动替换为集群实际值
echo -e "FLANNEL_NETWORK=${FLANNEL_NETWORK:-10.244.0.0/22}\nFLANNEL_SUBNET=${FLANNEL_SUBNET:-10.244.0.1/24}\nFLANNEL_MTU=${FLANNEL_MTU:-1450}\nFLANNEL_IPMASQ=${FLANNEL_IPMASQ:-true}" > /run/flannel/subnet.env

2. scheduler 日志显示连接旧 IP 超时

复制代码
reboot

3. 清理异常 Pod / 容器

复制代码
kubectl delete po -n kube-system $(kubectl get po -n kube-system | grep -E 'coredns|kube-apiserver' | awk '{print $1}') --force
docker rm <异常容器ID> --force

核心总结

  1. 证书重建和 IP 全量替换是 IP 变更核心,需严格执行;
  2. flannel 配置优先通过集群现有配置自动获取,避免硬编码适配问题;
  3. 所有操作完成后,需确认 kube-system 命名空间下核心 Pod 均为 Running 状态。
相关推荐
Linux-18747 小时前
分布式链路追踪系统之docker-compose安装skywalking
云原生·docker-compose·skywalking·分布式链路追踪系统·应用程序性能监控
生活爱好者!13 小时前
我把NAS当作下载机,docker一键部署qb
运维·docker·容器
隔窗听雨眠13 小时前
Spring Boot在云原生时代的编程范式革新研究
spring boot·后端·云原生
Hui Baby14 小时前
K8S使用CRD和控制器简单应用
云原生·容器·kubernetes
阿里云云原生15 小时前
从“告警驱动”到“巡检驱动”:Agent 智能体如何实现前端体验治理的闭环?
云原生
AOwhisky16 小时前
Python 学习笔记(第十三期)——运维自动化(下·前篇):远程命令执行——paramiko基础篇
运维·python·学习·云原生·自动化·运维开发·paramiko
AOwhisky17 小时前
Python 学习笔记(第十四期)——运维自动化(下·中篇):远程文件传输——paramiko进阶篇
运维·python·学习·云原生·自动化·文件传输·paramiko
做个文艺程序员17 小时前
Linux第22篇:用Docker容器化你的Java SaaS应用:一次构建,随处运行
java·docker·容器
Zhu75819 小时前
在k8s环境部署Apache Superset最新版
容器·kubernetes·apache
小的博客19 小时前
windows下安装Docker Desptop
运维·docker·容器