背景

1 台 master 加入集群后发现忘了修改主机名,而在 k8s 集群中修改节点主机名非常麻烦,不如将 master 退出集群改名并重新加入集群(前提是用的是高可用集群)。

操作步骤

ssh 登录另外一台 master 节点将要改名的 master 节点移出集群。

kubectl drain blog-k8s-n0
kubectl delete node blog-k8s-n0

登录已退出集群的 master 服务器重置 kubelet 配置并重新加入集群。

kubeadm reset
kubeadm join k8s-api:6443 --token ****** \
--discovery-token-ca-cert-hash ****** \
--control-plane --certificate-key ****** \
--v=5

加入失败,错误信息如下:

I0109 21:26:48.440711    3893 etcd.go:107] etcd endpoints read from pods: https://10.0.1.81:2379,https://10.0.1.32:2379,https://10.0.1.33:2379
I0109 21:26:48.455921 3893 etcd.go:166] etcd endpoints read from etcd: https://10.0.1.81:2379,https://10.0.1.32:2379,https://10.0.1.33:2379
I0109 21:26:48.455975 3893 etcd.go:125] update etcd endpoints: https://10.0.1.81:2379,https://10.0.1.32:2379,https://10.0.1.33:2379
I0109 21:27:08.469938 3893 etcd.go:388] Failed to get etcd status for https://10.0.1.81:2379: failed to dial endpoint https://10.0.1.81:2379 with maintenance client: context deadline exceeded
failed to dial endpoint https://10.0.1.81:2379 with maintenance client: context deadline exceeded
etcd cluster is not healthy

从错误信息看 etcd 集群不知道 10.0.1.81 已经退出 k8s 集群,etcd 集群中还保存着 10.0.1.81 的信息,所以在加入时连接 10.0.1.81 失败。

登录其中一台正常的 master ,进入 etcd 容器:

docker exec -it $(docker ps -f name=etcd_etcd -q) /bin/sh

查看 etcd 集群的成员列表,果然其中还有那台已经退出集群的服务器 blog-k8s-n0

$ etcdctl --endpoints 127.0.0.1:2379 --cacert /etc/kubernetes/pki/etcd/ca.crt --cert /etc/kubernetes/pki/etcd/server.crt --key /etc/kubernetes/pki/etcd/server.key member list
12637f5ec2bd02b8, started, blog-k8s-n0, https://10.0.1.81:2380, https://10.0.1.81:2379, false
17d58f8d29164d23, started, k8s-master1, https://10.0.1.32:2380, https://10.0.1.32:2379, false
19441808830db070, started, k8s-master2, https://10.0.1.33:2380, https://10.0.1.33:2379, false

在容器中将这台服务器从 etcd 集群中移除

etcdctl --endpoints 127.0.0.1:2379 --cacert /etc/kubernetes/pki/etcd/ca.crt --cert /etc/kubernetes/pki/etcd/server.crt --key /etc/kubernetes/pki/etcd/server.key member remove 12637f5ec2bd02b8

移除之后之前退出集群的服务器就能成功加入集群。

将 master 节点服务器从 k8s 集群中移除并重新加入的更多相关文章

  1. Node节点如何加入K8S集群

    k8s集群中,有时候发现有些节点状态为 NotReady,如何修复为Ready状态呢? [root@k8s-master~]# kubectl get nodes NAME STATUS ROLES ...

  2. k8s集群中部署prometheus server

    1.概述 本文档主要介绍如何在k8s集群中部署prometheus server用来作为监控的数据采集服务器,这样做可以很方便的对k8s集群中的指标.pod的.节点的指标进行采集和监控. 2.下载镜像 ...

  3. k8s 集群中的etcd故障解决

    一次在k8s集群中创建实例发现etcd集群状态出现连接失败状况,导致创建实例失败.于是排查了一下原因. 问题来源 下面是etcd集群健康状态: [root@docker01 ~]# cd /opt/k ...

  4. k8s集群中遇到etcd集群故障的排查思路

    一次在k8s集群中创建实例发现etcd集群状态出现连接失败状况,导致创建实例失败.于是排查了一下原因. 问题来源 下面是etcd集群健康状态: 1 2 3 4 5 6 7 8 9 10 11 [roo ...

  5. 在 Nebula K8s 集群中使用 nebula-spark-connector 和 nebula-algorithm

    本文首发于 Nebula Graph Community 公众号 解决思路 解决 K8s 部署 Nebula Graph 集群后连接不上集群问题最方便的方法是将 nebula-algorithm / ...

  6. 【K8S学习笔记】Part2:获取K8S集群中运行的所有容器镜像

    本文将介绍如何使用kubectl列举K8S集群中运行的Pod内的容器镜像. 注意:本文针对K8S的版本号为v1.9,其他版本可能会有少许不同. 0x00 准备工作 需要有一个K8S集群,并且配置好了k ...

  7. 记录一个奇葩的问题:k8s集群中master节点上部署一个单节点的nacos,导致master节点状态不在线

    情况详细描述; k8s集群,一台master,两台worker 在master节点上部署一个单节点的nacos,导致master节点状态不在线(不论是否修改nacos的默认端口号都会导致master节 ...

  8. k8s集群中安装rook-ceph

    容器的持久化存储 容器的持久化存储是保存容器存储状态的重要手段,存储插件会在容器里挂载一个基于网络或者其他机制的远程数据卷,使得在容器里创建的文件,实际上是保存在远程存储服务器上,或者以分布式的方式保 ...

  9. 在k8s集群中安装rook-ceph 1.8版本步骤

    官方文档地址:https://rook.io/docs/rook/v1.8/quickstart.html Kubernetes 最小版本号 Kubernetes 最小版本号:Kubernetes v ...

随机推荐

  1. C 基础 _Generic 泛型应用

    引言 - _Generic 用法简介 #include <stdio.h> #define TYPENAME_CASE(type) \ type: #type, #define TYPEN ...

  2. 自定义Redux

    实现mini版redux 1. 理解redux模块 1). redux模块整体是一个对象模块 2). 内部包含几个函数 createStore(reducers) // reducers: funct ...

  3. 二分查找 python实现

    欢迎回来 [^first blood]. 要求A是升序数组 递归 只能查 数据存不存在,不能返回下标 def binary_find(A, m): if len(A) == 0: return -1 ...

  4. socket编程执行远程命令实现_python

    一.单客户端连接的例子: 服务端: import socket,os,subprocess server=socket.socket() server.bind(('localhost',1234)) ...

  5. 【你不知道的javaScript 上卷 笔记5】javaScript中的this词法

    function foo() { console.log( a ); } function bar() { var a = 3; foo(); } var a = 2; bar(); 上面这段代码为什 ...

  6. [CF1304F] Animal Observation - dp,单调队列

    设 \(f[i][j]\) 为第 \(i\) 天在第 \(j\) 个位置放置的最大值,设 \(s[i][j]\) 是第 \(i\) 行的前缀和,则 \[ \begin{align} f[i][j] & ...

  7. winform DataGrid排序、去掉第一的空白列

    排序: dataGridView1.Sort(dataGridView1.Columns[3], ListSortDirection.Descending); 去掉空白列: dataGridView1 ...

  8. Cron表达式及其使用注意事项

    Cron表达式简介 Cron表达式全程Crontab表达式,是描述Crontab定时任务执行周期的一种语法格式.而Cron表达式严格上来说有许多特别的版本.如:Linux的.Spring的.Quart ...

  9. c++ 踩坑大法好 枚举

    1,枚举是个啥? c++允许程序员创建自己的数据类型,枚举数据类型是程序员自定义的一种数据类型,其值是一组命名整数常量. ,wed,thu,fri,sat,sun}; //定义一个叫day的数据类型, ...

  10. 10个Python 初学者必知编码小技巧

          技巧 #1   字符串翻转 >>> a = "codementor" >>> print "Reverse is" ...