Node 和 Cluster部署

Node and Cluster

学习参考:Node

查看节点

bash 复制代码
# 查看集群所有节点清单;输出列:NAME 节点名、STATUS 状态、ROLES 角色(control-plane 为控制面)、AGE 运行时长、VERSION 版本
root@master30:~# kubectl get nodes
NAME                    STATUS   ROLES           AGE   VERSION
master30.laoma.cloud    Ready    control-plane   21d   v1.30.2
worker31.laoma.cloud    Ready    <none>          21d   v1.30.2
worker32.laoma.cloud    Ready    <none>          21d   v1.30.2

# 查看特定节点详细信息;describe 输出资源详情,node 指定节点名 worker31.laoma.cloud
root@master30:~# kubectl describe node worker31.laoma.cloud

删除节点

以 worker31 节点为例。

bash 复制代码
# 设置节点为维护模式(排空);drain 标记节点不可调度并驱逐其上的 Pod,--ignore-daemonsets 忽略 DaemonSet 管理的 Pod(calico-node、kube-proxy 等不参与驱逐)
root@master30:~# kubectl drain worker31.laoma.cloud --ignore-daemonsets
node/worker31.laoma.cloud cordoned  # 已对节点执行封锁(cordon),新 Pod 不再调度到该节点
Warning: ignoring DaemonSet-managed Pods: kube-system/calico-node-v8jdn, kube-system/kube-proxy-27vl2  # 警告:DaemonSet 管理的 Pod 被忽略、不驱逐
evicting pod kube-system/calico-kube-controllers-7cb4fd5784-jx2xl  # 正在驱逐普通控制器创建的 Pod
pod/calico-kube-controllers-7cb4fd5784-jx2xl evicted  # 该 Pod 已被驱逐
node/worker31.laoma.cloud drained  # 节点已排空完成,可安全下线

# 再次查看节点,确认 worker31 已禁用调度
root@master30:~# kubectl get nodes
NAME                    STATUS                     ROLES           AGE   VERSION
master30.laoma.cloud    Ready                      control-plane   41h   v1.30.2
worker31.laoma.cloud    Ready,SchedulingDisabled   <none>          41h   v1.30.2
worker32.laoma.cloud    Ready                      <none>          41h   v1.30.2
# worker31 的 STATUS 变为 Ready,SchedulingDisabled(就绪但已关闭调度)

# 删除 worker31 节点;delete node 将该节点对象从集群中移除
root@master30:~# kubectl delete node worker31.laoma.cloud
node "worker31.laoma.cloud" deleted  # 节点对象已删除

# 删除后再次查看节点列表
root@master30:~# kubectl get nodes
NAME                    STATUS   ROLES           AGE   VERSION
master30.laoma.cloud    Ready    control-plane   41h   v1.30.2
worker32.laoma.cloud    Ready    <none>          41h   v1.30.2
# 列表中已无 worker31

# 在被删除的 worker31 节点上重置本机 kubeadm 配置;reset 还原 kubeadm 所做的操作,-f 强制重置、不交互确认
root@worker31:~# kubeadm reset -f
[preflight] Running pre-flight checks  # 执行重置前检查
W1019 07:37:44.242023    7660 removeetcdmember.go:106] [reset] No kubeadm config, using etcd pod spec to get data directory  # 警告:未找到 kubeadm 配置,按 etcd Pod 模板推断数据目录
[reset] Deleted contents of the etcd data directory: /var/lib/etcd  # 已删除 etcd 数据目录
[reset] Stopping the kubelet service  # 已停止 kubelet 服务
[reset] Unmounting mounted directories in "/var/lib/kubelet"  # 已卸载 kubelet 相关挂载目录
[reset] Deleting contents of directories: [/etc/kubernetes/manifests /var/lib/kubelet /etc/kubernetes/pki]  # 已删除静态 Pod 清单、kubelet 目录、pki 证书目录
[reset] Deleting files: [/etc/kubernetes/admin.conf /etc/kubernetes/kubelet.conf /etc/kubernetes/bootstrap-kubelet.conf /etc/kubernetes/controller-manager.conf /etc/kubernetes/scheduler.conf]  # 已删除各组件的 kubeconfig 文件

The reset process does not clean CNI configuration. To do so, you must remove /etc/cni/net.d
# 提示:reset 不会清理 CNI 网络配置,需手动删除 /etc/cni/net.d

The reset process does not reset or clean up iptables rules or IPVS tables. If you wish to reset iptables, you must do so manually by using the "iptables" command.
# 提示:reset 不会重置 iptables/IPVS 规则,需手动使用 iptables 命令重置

If your cluster was setup to utilize IPVS, run ipvsadm --clear (or similar) to reset your system's IPVS tables.
# 提示:若集群使用了 IPVS,需执行 ipvsadm --clear 清空 IPVS 表

The reset process does not clean your kubeconfig files and you must remove them manually. Please, check the contents of the $HOME/.kube/config file.
# 提示:reset 不会清理 kubeconfig,需手动删除 $HOME/.kube/config

删除集群

删除集群流程:

  1. 删除所有 node
  2. 删除所有 master

具体步骤:

  1. 删除所有node节点
bash 复制代码
# 排空两台 worker 节点;drain 驱逐节点上的 Pod,--ignore-daemonsets 忽略 DaemonSet Pod,--force 强制驱逐无控制器管理的裸 Pod
root@master30:~# kubectl drain worker31.laoma.cloud --ignore-daemonsets --force

root@master30:~# kubectl drain worker32.laoma.cloud --ignore-daemonsets --force

# 从集群删除两台 worker 节点;delete node 可一次跟多个节点名
root@master30:~# kubectl delete node worker31.laoma.cloud worker32.laoma.cloud

# 重置节点,注意执行位置(需分别登录各 worker 本机执行);reset 还原 kubeadm 配置,-f 强制重置不确认
root@worker31:~# kubeadm reset -f

root@worker32:~# kubeadm reset -f
  1. 删除master节点
bash 复制代码
# 删除集群前获取集群配置;get cm 读取 kube-system 命名空间的 kubeadm-config,-n 指定命名空间,-o yaml 以 YAML 输出,> 重定向保存到 kubeadm.yml
root@master30:~# kubectl get cm kubeadm-config -n kube-system -o yaml > kubeadm.yml

# 修改kubeadm.yml内容如下:
root@master30:~# vim kubeadm.yml
# 先删除22-28行,后删除1-3行,效果如下
apiServer:
  timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta3
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controllerManager: {}
dns: {}
etcd:
  local:
    dataDir: /var/lib/etcd
imageRepository: hub.laoma.cloud/kubernetes
kind: ClusterConfiguration
kubernetesVersion: v1.30.2
networking:
  dnsDomain: cluster.local
  podSubnet: 10.224.0.0/16
  serviceSubnet: 10.96.0.0/12
scheduler: {}

# 删除 master 节点对象;delete node 将 master30 从集群移除
root@master30:~# kubectl delete node master30.laoma.cloud

# 在 master 本机重置 kubeadm 配置;reset -f 强制还原、不确认
root@master30:~# kubeadm reset -f

# 删除 root 下的 kubeconfig 目录 .kube;rm -fr 强制递归删除,-r 递归、-f 不提示
root@master30:~# rm -fr .kube/

重建集群

bash 复制代码
# 初始化集群(使用配置文件方式);kubeadm init 初始化控制面,--config 指定 kubeadm.yml 配置文件
root@master30:~# kubeadm init --config kubeadm.yml

# 也可以使用之前的命令(不用配置文件、直接带参数初始化);--kubernetes-version 指定 K8s 版本,--pod-network-cidr 指定 Pod 网段,--image-repository 指定私有镜像仓库
root@master30:~# kubeadm init --kubernetes-version=v1.30.2 --pod-network-cidr=10.224.0.0/16 --image-repository hub.laoma.cloud/kubernetes

# 配置凭据:创建 .kube 目录;mkdir -p 递归创建目录、父目录不存在时一并创建
root@master30:~# mkdir -p $HOME/.kube

# 复制集群管理员凭据到 .kube/config;cp -i 覆盖时提示确认,源文件为 admin.conf
root@master30:~# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

# 将 config 文件属主改为当前用户;chown 修改属主,$(id -u):$(id -g) 取当前用户 UID:GID
root@master30:~# sudo chown $(id -u):$(id -g) $HOME/.kube/config

# 配置网络:安装 Calico 网络插件;kubectl apply -f 应用清单文件 calico.yaml
root@master30:~# kubectl apply -f calico.yaml

# 加入集群:worker31 加入;join 连接控制面 10.1.8.30:6443,--token 指定引导令牌,--discovery-token-ca-cert-hash 校验控制面 CA 证书哈希
root@worker31:~# kubeadm join 10.1.8.30:6443 --token ky95b9.sjg0fn21pdi1m0xz --discovery-token-ca-cert-hash sha256xxxxxxx

# worker32 加入集群(命令同上)
root@worker32:~# kubeadm join 10.1.8.30:6443 --token ky95b9.sjg0fn21pdi1m0xz --discovery-token-ca-cert-hash sha256xxxxxxx
相关推荐
科学熊2 小时前
深入浅出 Kubernetes介绍
kubernetes
flytalei5 小时前
GitOps 实战:基于 Argo CD 的 Kubernetes 应用版本回滚
云原生·容器·kubernetes
KIDULT°6 小时前
【K8s 实战】Volume 存储、PV/PVC、ConfigMap 与 Secret 完整实验
云原生·容器·kubernetes
qianyuqiye17 小时前
K8s 命名空间与 Pod 入门:从概念到实战
java·docker·kubernetes
fengkai454520 小时前
3、Kubernetes的Namespace&Contexts&Pod&YAML格式
运维·容器·kubernetes·k8s·namespace·yaml·pod
SatanII1 天前
K8s 存储与配置管理|Volume、ConfigMap、Secret 核心笔记
笔记·rpc·kubernetes
小马同学-1 天前
K8s 命名空间与上下文:Namespace 资源隔离与多集群切换实战
云原生·容器·kubernetes
川石课堂软件测试1 天前
涨薪技术|0到1学会性能测试第9课-HTTP响应统计
数据库·功能测试·网络协议·http·kubernetes·单元测试·测试用例
探索云原生1 天前
Ascend vNPU 实战:从原生 Docker 到 Ascend Docker Runtime
linux·ai·云原生·kubernetes·gpu