k8s集群master和node添加

文章目录

    • @[toc]
    • 一、重新添加master
      • 1)驱逐VIP
      • 2)设置为不可调度
      • 3)驱逐master
      • 4)删除master3
      • 5)清理etcd集群
      • 6)卸载master节点
      • 7)配置域名解析
      • 8)master2生成join命令
    • 二、node节点添加到集群
      • 1)禁止调度
      • 2)允许调度
      • 3)驱逐节点
      • 4)卸载node节点
      • 5)配置域名解析
      • 6)master2生成join命令
      • 7)加入集群
      • 8)删除驱逐恢复可调度
      • 9)测试部署

一、重新添加master

1)驱逐VIP

#查看是否存在VIP
[root@k8s-master3 ~]# ip a
1: lo:  mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens160:  mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:50:56:89:72:13 brd ff:ff:ff:ff:ff:ff
    inet 192.168.4.120/24 brd 192.168.4.255 scope global noprefixroute ens160
       valid_lft forever preferred_lft forever
    inet 192.168.4.100/24 scope global secondary ens160
       valid_lft forever preferred_lft forever
    inet6 fe80::250:56ff:fe89:7213/64 scope link 
       valid_lft forever preferred_lft forever

#防止VIP在本节点
systemctl restart keepalived.service
systemctl restart nginx.service

2)设置为不可调度

[root@k8s-master1 ~]# kubectl cordon k8s-master3 
node/k8s-master3 cordoned
[root@k8s-master1 ~]# kubectl get nodes|grep master3
k8s-master3   Ready,SchedulingDisabled   control-plane   55m    v1.25.0

3)驱逐master

root@k8s-master3 ~]# kubectl drain k8s-master3 --delete-emptydir-data --force --ignore-daemonsets 
node/k8s-master3 cordoned
Warning: ignoring DaemonSet-managed Pods: kube-system/calico-node-q6hp2, kube-system/kube-proxy-6kkhh
node/k8s-master3 drained
[root@k8s-master3 ~]# kubectl get nodes
NAME          STATUS                     ROLES           AGE   VERSION
k8s-master1   Ready                      control-plane   44m   v1.25.0
k8s-master2   Ready                      control-plane   37m   v1.25.0
k8s-master3   Ready,SchedulingDisabled   control-plane   38m   v1.25.0
k8s-node1     Ready                                41m   v1.25.0
k8s-node2     Ready                                40m   v1.25.0
k8s-node3     Ready                                40m   v1.25.0

4)删除master3

[root@k8s-master3 ~]# kubectl delete nodes k8s-master3  
node "k8s-master3" deleted

5)清理etcd集群

#登录master2清理master3
[root@k8s-master3 ~]# kubectl get pods -n kube-system |grep etcd
etcd-k8s-master1                           1/1     Running   1             45m
etcd-k8s-master2                           1/1     Running   0             38m

#登录maste2
[root@k8s-master3 ~]# kubectl exec  -it -n kube-system etcd-k8s-master2 -- sh
#查看etcd                                                                             
sh-5.1# etcdctl --endpoints=127.0.0.1:2379 --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=etc/kubernetes/pki/etcd/peer.crt --key=/etc/kubernetes/pki/etcd/peer.key member lis
9a59a57a652f8e2a, started, k8s-master3, https://192.168.4.120:2380, https://192.168.4.120:2379, false
c23408f409942c06, started, k8s-master2, https://192.168.4.119:2380, https://192.168.4.119:2379, false
c3509e57d5f53562, started, k8s-master1, https://192.168.4.114:2380, https://192.168.4.114:2379, false
#删除命令etcdctl --endpoints=127.0.0.1:2379 --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=etc/kubernetes/pki/etcd/peer.crt --key=/etc/kubernetes/pki/etcd/peer.key member remove ID号
#删除master3的etcd
sh-5.1# etcdctl --endpoints=127.0.0.1:2379 --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=etc/kubernetes/pki/etcd/peer.crt --key=/etc/kubernetes/pki/etcd/peer.key member remove 9a59a57a652f8e2a
Member 9a59a57a652f8e2a removed from cluster 366c96818b1e6d49

#查看
sh-5.1# etcdctl --endpoints=127.0.0.1:2379 --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=etc/kubernetes/pki/etcd/peer.crt --key=/etc/kubernetes/pki/etcd/peer.key member lis
c23408f409942c06, started, k8s-master2, https://192.168.4.119:2380, https://192.168.4.119:2379, false
c3509e57d5f53562, started, k8s-master1, https://192.168.4.114:2380, https://192.168.4.114:2379, false

6)卸载master节点

kubeadm  reset -f 
rm -f  $HOME/.kube/config
rm -rf /etc/kubernetes/
rm -rf /var/lib/kubelet/
systemctl restart  kubelet

7)配置域名解析

  • 注意如果是新增需要按照k8s的基础准备装好。
[root@k8s-master3 ~]# cat /etc/hosts
192.168.4.114 k8s-master1
192.168.4.119 k8s-master2
192.168.4.120 k8s-master3
192.168.4.115 k8s-node1
192.168.4.116 k8s-node2
192.168.4.118 k8s-node3
192.168.4.100 jiawenchaovip.com

8)master2生成join命令

#生成证书将会被上传到集群,并存储在指定的 Secret 中,供其他节点使用
[root@k8s-master2 ~]# kubeadm init phase upload-certs --upload-certs
I0201 15:24:39.539360   17846 version.go:256] remote version is much newer: v1.29.1; falling back to: stable-1.25
[upload-certs] Storing the certificates in Secret "kubeadm-certs" in the "kube-system" Namespace
[upload-certs] Using certificate key:
67c903efd1b70d4040815fe7fccf96c2d75324823dea25b9040b334e8811dddd
  • Storing the certificates in Secret “kubeadm-certs” in the “kube-system” Namespace:这部分表示将证书存储在 kube-system 命名空间下的名为 kubeadm-certs 的 Secret 中。Secret 是 Kubernetes 中用于存储敏感信息,如证书、令牌等的机制。
  • Using certificate key: 67c903efd1b70d4040815fe7fccf96c2d75324823dea25b9040b334e8811dddd:这部分表示使用了密钥 67c903efd1b70d4040815fe7fccf96c2d75324823dea25b9040b334e8811dddd 来加密和解密存储的证书。
#生成节点加入到主控节点的命令
[root@k8s-master2 ~]# kubeadm token create --print-join-command
kubeadm join jiawenchaovip.com:6443 --token wc2wqq.sh4lpek38q5pga3j --discovery-token-ca-cert-hash sha256:c3b39675b78c612ceee3bb73c520f1565be57ada4a0cf7576787a0c6a89e75b0 
  • kubeadm join jiawenchaovip.com:6443:这部分表示要将节点加入到名为 “jiawenchaovip.com” 的 Kubernetes 主控节点,该主控节点的地址是 jiawenchaovip.com,端口是 6443。这部分是通过 kubeadm init 命令在主控节点上生成的。
  • –token wc2wqq.sh4lpek38q5pga3j:这部分是指定用于身份验证的令牌(token),节点需要使用这个令牌来与主控节点建立连接并加入集群。每个令牌都有一定的有效期,过期后需要重新生成。
  • –discovery-token-ca-cert-hash sha256:c3b39675b78c612ceee3bb73c520f1565be57ada4a0cf7576787a0c6a89e75b0:这部分是表示主控节点的证书摘要信息,节点需要通过这个信息来验证主控节点的身份。这个摘要信息是通过 kubeadm init 命令在主控节点上生成的。
#修改为master节点添加命令,添加--control-plane --certificate-key并执行
kubeadm join jiawenchaovip.com:6443 --token wc2wqq.sh4lpek38q5pga3j --discovery-token-ca-cert-hash sha256:c3b39675b78c612ceee3bb73c520f1565be57ada4a0cf7576787a0c6a89e75b0 \
--control-plane --certificate-key  67c903efd1b70d4040815fe7fccf96c2d75324823dea25b9040b334e8811dddd
  • kubeadm join jiawenchaovip.com:6443:表示将节点加入指定地址为 jiawenchaovip.com,端口为 6443 的 Kubernetes 控制平面。
  • –token wc2wqq.sh4lpek38q5pga3j:该部分表示节点使用的加入令牌(token),节点需要使用这个令牌来与控制平面节点建立连接并加入集群。
  • –discovery-token-ca-cert-hash sha256:c3b39675b78c612ceee3bb73c520f1565be57ada4a0cf7576787a0c6a89e75b0:这部分是关于发现令牌的 CA 证书的哈希值,节点需要通过这个哈希值来验证控制平面节点的身份。
  • –control-plane:表示将节点加入到控制平面中,即作为主控节点。
  • –certificate-key 67c903efd1b70d4040815fe7fccf96c2d75324823dea25b9040b334e8811dddd:指定的证书密钥,用于加密和解密存储的证书信息。
#检查节点
[root@k8s-master3 ~]# kubectl get nodes|grep master3
k8s-master3   Ready    control-plane   93s   v1.25.0

#查看证书
[root@k8s-master3 ~]# kubeadm certs check-expiration 
CERTIFICATE                EXPIRES                  RESIDUAL TIME   CERTIFICATE AUTHORITY   EXTERNALLY MANAGED
admin.conf                 Jan 08, 2124 07:32 UTC   99y             ca                      no      
apiserver                  Jan 08, 2124 07:32 UTC   99y             ca                      no      
apiserver-etcd-client      Jan 08, 2124 07:32 UTC   99y             etcd-ca                 no      
apiserver-kubelet-client   Jan 08, 2124 07:32 UTC   99y             ca                      no      
controller-manager.conf    Jan 08, 2124 07:32 UTC   99y             ca                      no      
etcd-healthcheck-client    Jan 08, 2124 07:32 UTC   99y             etcd-ca                 no      
etcd-peer                  Jan 08, 2124 07:32 UTC   99y             etcd-ca                 no      
etcd-server                Jan 08, 2124 07:32 UTC   99y             etcd-ca                 no      
front-proxy-client         Jan 08, 2124 07:32 UTC   99y             front-proxy-ca          no      
scheduler.conf             Jan 08, 2124 07:32 UTC   99y             ca                      no      

CERTIFICATE AUTHORITY   EXPIRES                  RESIDUAL TIME   EXTERNALLY MANAGED
ca                      Jan 08, 2124 06:09 UTC   99y             no      
etcd-ca                 Jan 08, 2124 06:09 UTC   99y             no      
front-proxy-ca          Jan 08, 2124 06:09 UTC   99y             no      

二、node节点添加到集群

1)禁止调度

#禁止节点调度  
[root@k8s-master1 ~]# kubectl cordon k8s-node3
node/k8s-node3 cordoned
[root@k8s-master1 ~]# kubectl get nodes|grep node3
k8s-node3     Ready,SchedulingDisabled             111m   v1.25.0

#n此时pod还在,如果新部署将不能调度到这个节点。
[root@k8s-master1 ~]# kubectl get pod  -o wide|grep node3   
nginx-deployment-cd55c47f5-5jjbd   1/1     Running   0          99s   10.244.107.195   k8s-node3              
  • kubectl cordon:这个命令用于标记一个节点为不可调度状态。当使用 kubectl cordon 命令时,Kubernetes 不会在该节点上调度新的 Pod,但已经在节点上运行的 Pod 不会受到影响。这个命令一般用于暂时阻止新的 Pod 被调度到某个节点,例如,当需要对节点进行维护或排障时。
  • kubectl drain:这个命令用于优雅地驱逐一个节点上的 Pod,并标记该节点为不可调度状态。当使用 kubectl drain 命令时,Kubernetes 会按照优雅退出的方式终止节点上的所有 Pod,并在其它节点上重新调度这些 Pod。通常搭配 --force 参数可以用来强制执行这个流程。

2)允许调度

#允许节点调度
kubeclt uncordon k8s-node3

3)驱逐节点

#驱逐node3上的pod
[root@k8s-master1 ~]# kubectl drain k8s-node3 --delete-emptydir-data --force --ignore-daemonsets 
node/k8s-node3 already cordoned
Warning: ignoring DaemonSet-managed Pods: kube-system/calico-node-zxwtf, kube-system/kube-proxy-k5h7f
evicting pod default/nginx-deployment-cd55c47f5-5jjbd
pod/nginx-deployment-cd55c47f5-5jjbd evicted
node/k8s-node3 drained

#发现pod已经从node3节点飘到node2节点
[root@k8s-master1 ~]# kubectl get pod  -o wide           
NAME                               READY   STATUS    RESTARTS   AGE    IP               NODE        NOMINATED NODE   READINESS GATES
nginx-deployment-cd55c47f5-gsjvv   1/1     Running   0          5m7s   10.244.36.67     k8s-node1              
nginx-deployment-cd55c47f5-kl6m2   1/1     Running   0          5m7s   10.244.169.131   k8s-node2              
nginx-deployment-cd55c47f5-r24zl   1/1     Running   0          37s    10.244.36.68     k8s-node1              
  • –force 当一些pod不是经 ReplicationController, ReplicaSet, Job, DaemonSet 或者StatefulSet 管理的时候就需要用–force来强制执行 (例如:kube-proxy)
  • –ignore-daemonsets 无视DaemonSet管理下的Pod。即–ignore-daemonsets往往需要指定的,这是因为deamonset会忽略unschedulable标签(使用kubectl drain时会自动给节点打上不可调度标签),因此deamonset控制器控制的pod被删除后可能马上又在此节点上启动起来,这样就会成为死循环.因此这里忽略daemonset。
  • –delete-local-data 如果有mount local volumn的pod,会强制杀掉该pod。

4)卸载node节点

kubeadm  reset -f 
rm -rf /etc/kubernetes/
rm -rf /var/lib/kubelet/
systemctl restart  kubelet

5)配置域名解析

  • 注意如果是新增需要按照k8s的基础准备装好。
[root@k8s-master3 ~]# cat /etc/hosts
192.168.4.114 k8s-master1
192.168.4.119 k8s-master2
192.168.4.120 k8s-master3
192.168.4.115 k8s-node1
192.168.4.116 k8s-node2
192.168.4.118 k8s-node3
192.168.4.100 jiawenchaovip.com

6)master2生成join命令

#生成节点加入到主控节点的命令
[root@k8s-master2 ~]# kubeadm token create --print-join-command
kubeadm join jiawenchaovip.com:6443 --token wc2wqq.sh4lpek38q5pga3j --discovery-token-ca-cert-hash sha256:c3b39675b78c612ceee3bb73c520f1565be57ada4a0cf7576787a0c6a89e75b0 
  • kubeadm join jiawenchaovip.com:6443:这部分表示要将节点加入到名为 “jiawenchaovip.com” 的 Kubernetes 主控节点,该主控节点的地址是 jiawenchaovip.com,端口是 6443。这部分是通过 kubeadm init 命令在主控节点上生成的。
  • –token wc2wqq.sh4lpek38q5pga3j:这部分是指定用于身份验证的令牌(token),节点需要使用这个令牌来与主控节点建立连接并加入集群。每个令牌都有一定的有效期,过期后需要重新生成。
  • –discovery-token-ca-cert-hash sha256:c3b39675b78c612ceee3bb73c520f1565be57ada4a0cf7576787a0c6a89e75b0:这部分是表示主控节点的证书摘要信息,节点需要通过这个信息来验证主控节点的身份。这个摘要信息是通过 kubeadm init 命令在主控节点上生成的。

7)加入集群

kubeadm join jiawenchaovip.com:6443 --token wc2wqq.sh4lpek38q5pga3j --discovery-token-ca-cert-hash sha256:c3b39675b78c612ceee3bb73c520f1565be57ada4a0cf7576787a0c6a89e75b0 

8)删除驱逐恢复可调度

#master操作
kubectl uncordon k8s-node3

#node3节点重启
systemctl restart kubelet

#查看
[root@k8s-master1 ~]# kubectl get nodes|grep node3
k8s-node3     Ready              132m   v1.25.0

9)测试部署

[root@k8s-master1 ~]# kubectl apply -f nginx.yaml 
deployment.apps/nginx-deployment created
service/nginx-service created
[root@k8s-master1 ~]# kubectl get pods -o wide
NAME                               READY   STATUS    RESTARTS   AGE   IP               NODE        NOMINATED NODE   READINESS GATES
nginx-deployment-cd55c47f5-966bz   1/1     Running   0          7s    10.244.36.69     k8s-node1              
nginx-deployment-cd55c47f5-wf872   1/1     Running   0          7s    10.244.107.196   k8s-node3              
nginx-deployment-cd55c47f5-xp9rg   1/1     Running   0          7s    10.244.169.132   k8s-node2              

你可能感兴趣的:(kubernetes,容器,云原生)