k8s驱逐节点和加入节点

k8s驱逐节点和加入节点

背景:随着业务系统的扩展或gpu节点的加入,k8s集群的节点驱逐和加入变得频繁了起来。

一、节点驱逐

在原集群Master上驱逐node-1节点:

bash 复制代码
将节点标记为 不可调度
kubectl cordon node-1

驱逐节点上的所有 Pod:
kubectl drain node-1 --ignore-daemonsets --delete-emptydir-data

丛集群中删除node-1:
kubectl delete node node-1

然后在node-1上执行重置:

bash 复制代码
kubeadm reset -f
rm -rf /etc/cni/net.d $HOME/.kube/config

rm -rf /etc/kubernetes/
rm -rf /var/lib/kubelet/
rm -rf /var/lib/etcd/
rm -rf /etc/cni/
rm -rf $HOME/.kube/

ip link delete cni0 2>/dev/null
ip link delete flannel.1 2>/dev/null
iptables -F && iptables -t nat -F && iptables -t mangle -F
systemctl restart docker

二、节点加入

节点node-2加入到目标集群master

在目标集群的master节点执行命令获取加入命令:

bash 复制代码
[root@master ~]# kubeadm token create --print-join-command
kubeadm join lb.kubesphere.local:6443 --token oizgzi.lsddi1egd6zf05dl --discovery-token-ca-cert-hash sha256:099b3778b50d2ac60c40f8ae03a699b125f6ad972523a5248e16bce4e8209c5b

在要加入的节点上执行上面输出的加入命令:

bash 复制代码
[root@node-2 ~]#kubeadm join lb.kubesphere.local:6443 --token oizgzi.lsddi1egd6zf05dl --discovery-token-ca-cert-hash sha256:099b3778b50d2ac60c40f8ae03a699b125f6ad972523a5248e16bce4e8209c5b

三、问题解决

1、如果node-2也是从其他k8s集群摘下来的,加入到新集群可能会出现node的name还是保持老集群的nodename,执行以下命令,修改原本的name和地址,地址没变则不改

bash 复制代码
systemctl cat kubelet | grep -i environment

ls -la /etc/systemd/system/kubelet.service.d/

vi /etc/systemd/system/kubelet.service.d/10-kubeadm.conf

修改Environment="KUBELET_EXTRA_ARGS=--node-ip=172.28.112.181 --hostname-override=node-2改为node-2

2、如果驱逐节点时删除的不彻底,或误将kubeadm、kubelet、kubectl二进制文件也删了,导致的kubeadm join执行一直失败,可以执行下面清零命令和重新安装

bash 复制代码
# 停止服务
systemctl stop kubelet 2>/dev/null

# 清理残留配置文件
kubeadm reset -f 2>/dev/null
rm -rf /etc/kubernetes/ /var/lib/kubelet/ /var/lib/etcd/ ~/.kube/

# 卸载旧的 kubeadm/kubelet/kubectl(如果有 RPM 包)
yum remove -y kubeadm kubelet kubectl 2>/dev/null

# 清理 systemd 残留
rm -f /etc/systemd/system/kubelet.service
rm -rf /etc/systemd/system/kubelet.service.d
systemctl daemon-reload

cat > /etc/yum.repos.d/kubernetes.repo << 'EOF'
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0
repo_gpgcheck=0
EOF

# 更新缓存
yum clean all && yum makecache

yum list kubeadm --showduplicates | grep "1.23"

# 安装 kubeadm、kubelet、kubectl 的 v1.23.17 版本
yum install -y kubeadm-1.23.17-0 kubelet-1.23.17-0 kubectl-1.23.17-0

# 设置 kubelet 开机自启(此时会失败,正常现象,init/join 后会起来)
systemctl enable kubelet

kubeadm version
kubelet --version
kubectl version --client

这时再执行kubeadm join那条命令大概率就不会失败了

相关推荐
IT策士3 小时前
第 42 篇 k8s之日志管理:使用 EFK 或 Loki 采集日志
云原生·容器·kubernetes
Plastic garden4 小时前
k8s(4)Kubernetes Pod 管控例子
云原生·容器·kubernetes
浪飘4 小时前
K8S场景下:华为NPU+基于HAMI VNPU能力整体介绍
docker·kubernetes·gpu算力
追寻少年4 小时前
Kubernetes 服务发现和域名解析-cnblog
容器·kubernetes·服务发现
ggaofeng4 小时前
如何在docker和k8s中使用nfs文件系统
docker·eureka·kubernetes
IT策士4 小时前
第 43 篇 k8s之集群网络策略:NetworkPolicy 入门
网络·容器·kubernetes
牛奶咖啡135 小时前
k8s容器编排技术实践——k8s应用中机密信息的配置与存储
云原生·kubernetes·k8s中secret资源的创建·k8s的pod使用secret·k8s中configmap创建·k8s中使用configmap·k8s中重要数据的配置与存储
做个文艺程序员13 小时前
第1篇:K8s 核心概念精讲:Pod、Deployment、Service 与 Namespace——Java 开发者快速上手指南
java·云原生·容器·kubernetes·容器编排
做个文艺程序员17 小时前
第08篇:K8s 部署 AI 大模型推理服务:GPU 调度 × vLLM × Java 客户端集成——从 0 到生产的完整方案
人工智能·kubernetes·vllm