kubernetes集群如何更改所有节点IP

kubernetes集群如何更改所有节点IP

    • 情景描述
    • 更换IP前的准备工作
    • 更换IP后的工作--master
    • 更换IP后的工作--node节点
    • 重新部署之前那些服务

情景描述

我有三台服务器,想要将其组成了一个kubernetes集群,在部署之前,我就对其进行了固定IP的操作,然后成功的部署好了kubernetes集群,并且在上面部署了我需要的很多应用;
过一段时间后,我需要对这三台服务器的网络进行更改,也就是这三台服务器所在的网络的的网段要更改,那么这几台服务的IP肯定也要更改,直接更改的话,肯定会导致这个kubernetes集群不可用了,那么该如何解决这个问题呢?

假设我原来的网段是192.168.0.0/24,现在需要更改为10.98.99.0/24网段

现在的IP更改后的IP
master192.168.0.4110.98.99.140
node1192.168.0.4210.98.99.141
node2192.168.0.4310.98.99.142

更换IP前的准备工作

经多次测试后发现,pv中的IP地址无法直接更改,IP字段属于不可更改的资源,为了使数据完整,那么必须要将pv删除重构,在pv中指定新的IP;如果需要重构pv,那么涉及的deployment也需要先删除(我这里的pv是删除后依然保留数据的那种模式)

1.截图保留每个pod是工作在哪个节点上的,方便后续恢复(可不做)
2.停掉所有人为创建的服务资源,包括所有服务的deployment、svc、ingress、pvc、pv以及ingress和flannel资源(configmap、secret资源可不删除)

kubectl delete -f XX.yaml

删除完所有的pod后,kubernetes集群应该只剩下以下几个资源(可参考下图)
在这里插入图片描述
3.更换IP地址

更换IP后的工作–master

1.备份要更改的文件,在更改每个配置文件前,最好先备份

cp /etc/hosts{,.bak}
cp -r /etc/kubernetes{,.bak}
cp -r ~/.kube{,.bak}

2.更改/etc/hosts文件,将master跟node指向新的IP地址
3.更改/etc/kubernetes中master的IP

cd /etc/kubernetes
oldip=192.168.0.41
newip=10.98.99.140
#查看之前的IP
find . -type f | xargs grep $oldip
#更改为新的IP
find . -type f | xargs sed -i "s/$oldip/$newip/"
#查看新的IP
find . -type f | xargs grep $newip

4.更新/etc/kubernetes/pki涉及到旧IP的证书(不同证书涉及到旧IP证书不会完全相同,需要实际查看)

cd /etc/kubernetes/pki
#使用OpenSSL查看证书的详细信息,里面会涉及到IP,然后保存为同名的txt文件
for f in $(find -name "*.crt"); do   openssl x509 -in $f -text -noout > $f.txt; done
#查看/etc/kubernetes/pki目录下包括旧IP的证书(这里很重要),后续删除证书就是删除这里过滤出来的证书
grep -Rl $oldip .
#过滤出来的内容为: ./etcd/peer.crt.txt  ./etcd/server.crt.txt   ./apiserver.crt.txt
#删除txt文件
for f in $(find -name "*.crt"); do rm $f.txt; done
#删除过滤出来的包含旧IP的证书并且重新生成
rm apiserver.crt apiserver.key etcd/peer.key etcd/peer.crt etcd/server.crt etcd/server.key
kubeadm init phase certs apiserver
kubeadm init phase certs etcd-peer
kubeadm init phase certs etcd-server

5.重新生成kubeconfig文件,将原来配置文件中涉及到新增的地方添加过来(主要是/etc/kubernetes.bak/manifests/kube-apiserver.yaml)

cd /etc/kubernetes
rm -f admin.conf kubelet.conf controller-manager.conf scheduler.conf
kubeadm init phase kubeconfig all
#覆盖默认的配置文件
cp /etc/kubernetes/admin.conf $HOME/.kube/config
#此时kubectl命令已经可以使用了,刚刚更换IP的时候kubectl命令不可用

6.修改configmap里面涉及到旧IP的为新IP

kubectl edit cm kube-proxy -n kube-system
kubectl edit cm cluster-info -n kube-public

7.重启docker和kubelet

systemctl daemon-reload
systemctl restart docker
systemctl restart kubelet

8.删除node
因为node节点更改IP后涉及到证书问题,比较麻烦,所以我这里直接将node节点先delete,然后重新加入,那么证书也会重新从master节点签发过去,比较简单

kubectl delete node node1
kubectl delete node node2

更换IP后的工作–node节点

1.备份要更改的文件,在更改每个配置文件前,最好先备份

cp /etc/hosts{,.bak}
cp -r /etc/kubernetes{,.bak}
cp -r /var/lib/kubelet{,.bak}

2.更改/etc/hosts文件,将master跟node指向新的IP地址
3.重置kubernetes配置

kubeadm reset -f

4.重启服务器

reboot

5.重新加入master节点所在的kubernetes集群(因为node节点的证书问题处理起来有点麻烦,所以直接重新加入简单点)

#先在master节点生成加入口令
kubeadm token create --print-join-command
#在node节点上执行kuberadm join命令
kubeadm join 10.98.99.140:6443 --token ne2dbu.74etnc2273wx6ysg --discovery-token-ca-cert-hash sha256:bd373617bc307f5192cb38ab0d0ccd261d95d6aa4c64a97d4c1acf1f7ffa02cd 

重新部署之前那些服务

1.先重启master服务器,再部署服务

reboot

2.在重新部署服务之前,需要先部署ingress以及flannel,待这两个没问题了再apply服务
3.需要先重新部署一个默认的storageclass,部署storageclass
4.重新apply服务,顺序为pv–pvc–deployment–svc–ingress,记得,部署每个服务前都需要修改pv.yaml中的IP地址

cd /k8s
oldip=192.168.0.41
newip=10.98.99.140
#查看之前的IP
find . -type f | xargs grep $oldip
#更改为新的IP
find . -type f | xargs sed -i "s/$oldip/$newip/"
#查看新的IP
find . -type f | xargs grep $newip

参考链接:https://cloud.tencent.com/developer/article/2008321?pos=comment

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/45157.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ARM功耗管理之多核处理器启动

安全之安全(security)博客目录导读 思考:SecureBoot?多核处理器启动流程?PSCI启动方式? 一般嵌入式系统使用的都是对称多处理器(Symmetric Multi-Processor, SMP)系统,包含了多个cpu, 这几个cp…

MICCAI 2024Centerline Boundary Dice Loss for Vascular Segmentation

MICCAI 2024 Centerline Boundary Dice Loss for Vascular Segmentation MICCAI 2024Centerline Boundary Dice Loss for Vascular Segmentation中心线边界Dice损失用于血管分割**摘要**:1. 引言相关工作: 2. 方法预备知识Dice的变化 3 实验3.1 数据集3.2 设置3.3 结…

推荐一个比 Jenkins 使用更简单的项目构建和部署工具

最近发现了一个比 Jenkins 使用更简单的项目构建和部署工具,完全可以满足个人以及一些小企业的需求,分享一下。 项目介绍 Jpom 是一款 Java 开发的简单轻量的低侵入式在线构建、自动部署、日常运维、项目监控软件。 日常开发中,Jpom 可以解…

python--实验8 函数(2)

知识点 变量的作用域 定义:解释了局部变量和全局变量的概念。局部变量: 局部变量是在函数内部定义的变量。它们只在该函数内部可见,一旦函数执行完毕,这些变量就会被销毁。例子:在函数内部通过赋值创建的变量。全局…

macbook触控栏养宠物:Touchbar pet for Mac 免费下载

macbook pro自从出了touchbar后,看起来是十分的炫酷,但平时却很少有人使用,为了让touchbar充分利用起来,Touch bar pet就横空出世了,可爱的画风,简单的玩法,让你可以在touchbar上也可以养一只自…

网络安全就业方向(非常详细)零基础入门到精通,收藏这一篇就够了

这里我整合并且整理成了一份【282G】的网络安全/红客技术从零基础入门到进阶资料包,需要的小伙伴文末免费领取哦,无偿分享!!! 对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以…

2.5 计算机网络

声明:文章参考的《系统架构设计师教程(第二版)》,如有侵权,本人将立即修改和删除。 利用通信线路将地理上分散的、具有独立功能的计算机系统和通信设备按不同的形式连接起来,并依靠网络软件以及通信协议实现…

p15 p16 c语言实现三子棋

具体的实现代码 game.c #include "game.h"void InitBoard(char board[ROW][COL], int row, int col) {int i 0;int j 0;for (i 0; i < row; i) {for (j 0; j < col; j) {board[i][j] ;}} }void DisplayBoard(char board[ROW][COL], int row, int col) …

【java实现结果集转为树结构,树转为扁平结构】

list转为树&#xff0c;树拉平 业务需求oracle实现树结构1、**Controller.java层** &#xff1a;前端调此处请求2、**service层&#xff1a;** 逻辑结构 &#xff08;zbjcpjService.java&#xff09;&#xff0c;重点&#xff1a;this.entityMapper.queryZbjcpjTree接口3、**ma…

【python算法学习1】用递归和循环分别写下 fibonacci 斐波拉契数列,比较差异

问题&#xff1a; fibonacci 斐波拉契数列&#xff0c;用递归和循环的方法分别写,比较递归和循环的思路和写法的差别 最直接的思路&#xff0c;是写递归方法 循环方法的稍微有点绕&#xff0c;我觉得问题主要是出在&#xff0c;总结循环的通项公式更麻烦&#xff0c;难在数学…

多目标螳螂搜索算法MOMSA求解无人机三维路径规划,可以自行修改障碍物位置(MATLAB代码)

无人机路径规划多目标优化求解是一个复杂的过程&#xff0c;涉及到多个目标的考量和优化算法的应用。以下是一些关键点和相关算法的概述&#xff1a; 1. **多目标优化策略**&#xff1a;在无人机路径规划中&#xff0c;需要同时考虑多个目标&#xff0c;如路径长度、安全性、飞…

关于delete和delete[ ]混用的未定义问题解释

我们知道delete用于释放一个动态空间&#xff0c;而delete[ ]用于释放多个动态空间&#xff0c;但是如果我们混用的话会导致什么问题&#xff1f;我在博客上看了许多文章&#xff0c;但不尽人意&#xff0c;因此写下这篇文章让你知其然知其所以然&#xff08;浅薄的解释&#x…

大数据学习之Spark基础

Spark基础 简述 1、spark作业执行的特点&#xff1a; &#xff08;1&#xff09;只有遇到行动算子的时候&#xff0c;整个spark作业才会被触发执行 &#xff08;2&#xff09;遇到几次&#xff0c;执行几次 2、RDD: 弹性分布式数据集 弹性&#xff1a;数据量可大可小 RDD类似…

插片式远程 I/O模块:Profinet总线耦合器在SIMATIC Manager配置

XD9000是Profinet总线耦合器&#xff0c;单个耦合器最多可扩展32个I/O模块&#xff01;本文将详细介绍如何在SIMATIC Manager中配置插片式远程 I/O模块的Profinet总线耦合器&#xff0c;帮助您更好地应用这一技术。 一、SIMATIC Manager软件组态步骤&#xff1a; 1、创建工程&…

什么是敏捷本地化

快速、敏捷的多语言产品和服务交付正逐渐成为众多行业的常态。在这种情况下&#xff0c;重点从传统的期望&#xff08;即在合理的时间框架内翻译大量内容&#xff09;转变为翻译工作量非常大的小片段&#xff0c;通常在2-3到12-24小时之间&#xff0c;通常在周末或假期。 Logr…

IntelliJ IDEA自定义菜单(Menus)、任务栏(toolbars)详细教程

一、自定义菜单 1、打开Settings&#xff0c;找到Menus and Toolbars 2、点击右边的Main Menu&#xff0c;点击号&#xff0c;选择Add Action 3、弹出Add Action弹窗&#xff0c;搜索或者选择你要添加的指令 二、自定义工具栏 1、右键IDEA上方的工具栏空白位置&#xff0c;选…

计算机网络体系结构解析

OSI参考模型 与 TCP/IP模型 如图所示 TCP/IP模型有几层 应用层&#xff1a;只需要专注于为用户提供应用功能 HTTP、SMTP、Telnet等&#xff0c;工作在操作系统中的用户态&#xff0c;传输层及以下工作在内核态传输层&#xff1a;为应用层提供网络支持&#xff08;TCP、UDP传…

vue3实现在style中使用响应式变量

vue2的时候需要在style模块中访问script模块中的响应式变量&#xff0c;为此不得不使用css变量去实现。现在vue3已经内置了这个功能啦&#xff0c;可以在style中使用v-bind指令绑定script模块中的响应式变量。 示例 <template><div><span>hello </span&…

40个高阶ChatGPT学术论文指令集(附GPT使用链接)

我精心挑选的40个顶尖ChatGPT学术论文指令集&#xff0c;无疑将成为你撰写论文和开展研究的珍贵资源&#xff0c;极力推荐你珍藏起来&#xff01;这些建议极具实用价值&#xff0c;能有效提高你的研究工作效率&#xff0c;使得论文撰写过程轻松许多。 在开始前&#xff0c;提示…

8、matlab彩色图和灰度图的二值化算法汇总

1、彩色图和灰度图的二值化算法汇总原理及流程 彩色图和灰度图的二值化算法的原理都是将图像中的像素值转化为二值&#xff08;0或1&#xff09;&#xff0c;以便对图像进行简化或者特定的图像处理操作。下面分别介绍彩色图和灰度图的二值化算法的原理及流程&#xff1a; 1&a…