[K8S] Phần 20 – Thêm/xóa node với Kubernetes Cluster

Lời tựa Hello mọi người đã trở lại với series về Kubernetes của mình. Qua loạt bài trước mình đã chia sẻ quá trình dựng lab kubernetes và cài đặt khá đầy đủ các thành phần cho nó rồi. Có một bạn có ib mình hỏi vậy trong trường hợp muốn thêm hay xóa một

Lời tựa

Hello mọi người đã trở lại với series về Kubernetes của mình. Qua loạt bài trước mình đã chia sẻ quá trình dựng lab kubernetes và cài đặt khá đầy đủ các thành phần cho nó rồi.

Có một bạn có ib mình hỏi vậy trong trường hợp muốn thêm hay xóa một node ra khỏi cụm k8s thì phải làm thế nào?

Trong bài hôm nay mình sẽ hướng dẫn mọi người cách thêm node hay xóa node khỏi Kubernetes Cluster sử dụng Kubespray nhé!

Ý tưởng có nó rất đơn giản:

  • Bổ sung thông tin node muốn add vào cấu hình cài cluster (file hosts.yaml)
  • Cập nhật file /etc/hosts bổ sung node mới
  • Chạy lại lệnh cài đặt cluster bằng kubespray --> Node mới sẽ được add vào cluster

Cài đặt Kubernetes Cluster

Muốn thực hành add thêm node vào K8S Cluster thì trước hết các bạn phải có 1 cụm Kubernetes Cluster đã. Như mình đã hướng dẫn ở bài viết cài đặt kubernets cluster ở đây, mình dùng kubespray để cài đặt.

Cấu hình kubespray

Cấu hình hosts.yaml của kubespray:

[all]
master1  ansible_host=192.168.30.10      ip=192.168.30.10
worker1  ansible_host=192.168.30.11      ip=192.168.30.11
worker2  ansible_host=192.168.30.12      ip=192.168.30.12

[kube-master]
master1

[kube-node]
worker1
worker2

[etcd]
master1

[k8s-cluster:children]
kube-node
kube-master

[calico-rr]

[vault]
master1
worker1
worker2

Cấu hình file /etc/hosts (khai báo trên tất cả các node):

192.168.30.10 master1
192.168.30.11 worker1
192.168.30.12 worker2

Kết quả cài đặt

Kết quả chạy ansible:

PLAY RECAP **********************************************************************************************************************************************************************************************
localhost                  : ok=3    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
master1                    : ok=500  changed=31   unreachable=0    failed=0    skipped=1084 rescued=0    ignored=1
worker1                    : ok=368  changed=20   unreachable=0    failed=0    skipped=716  rescued=0    ignored=0
worker2                    : ok=343  changed=17   unreachable=0    failed=0    skipped=632  rescued=0    ignored=0

Kiểm tra trạng thái cluster:

[sysadmin@master1 ~]$ kubectl get nodes -owide
NAME      STATUS   ROLES                  AGE     VERSION   INTERNAL-IP     EXTERNAL-IP   OS-IMAGE                KERNEL-VERSION                CONTAINER-RUNTIME
master1   Ready    control-plane,master   17m     v1.20.7   192.168.30.10   <none>        CentOS Linux 7 (Core)   3.10.0-1160.76.1.el7.x86_64   docker://20.10.21
worker1   Ready    <none>                 3m23s   v1.20.7   192.168.30.11   <none>        CentOS Linux 7 (Core)   3.10.0-1160.76.1.el7.x86_64   docker://20.10.21
worker2   Ready    <none>                 3m24s   v1.20.7   192.168.30.12   <none>        CentOS Linux 7 (Core)   3.10.0-1160.76.1.el7.x86_64   docker://20.10.21

Như vậy mình đã có 1 cụm k8s với 1 master và 2 worker.

Add node vào cluster

Mình sẽ add một node mới là worker3 với IP 192.168.30.13 vào K8S cluster trên. Việc trước tiên là cài đặt OS và cấu hình cho node này giống như khi thực hiện với các node ta đã cài trong cụm k8s.

Lưu ý Account/Password của node này cũng set giống các node trước đó nhé!

Cập nhật cấu hình hosts

Cập nhật file /etc/hosts trên tất cả các node để thêm thông tin node mới:

192.168.30.10 master1
192.168.30.11 worker1
192.168.30.12 worker2
192.168.30.13 worker3

Cập nhật cấu hình kubespray

Bổ sung thên node worker3 vào file hosts.yaml:

[all]
master1  ansible_host=192.168.30.10      ip=192.168.30.10
worker1  ansible_host=192.168.30.11      ip=192.168.30.11
worker2  ansible_host=192.168.30.12      ip=192.168.30.12
worker3  ansible_host=192.168.30.13      ip=192.168.30.13

[kube-master]
master1

[kube-node]
worker1
worker2
worker3

[etcd]
master1

[k8s-cluster:children]
kube-node
kube-master

[calico-rr]

[vault]
master1
worker1
worker2
worker3

Add node vào cluster bằng cách chạy lại kubespray

Bạn chỉ việc chạy lại như khi cài đặt cluster ban đầu, chỉ khác là nội dung file hosts.yaml đã được update thêm node mới là worker3:

docker run --rm -it --mount type=bind,source=/home/sysadmin/kubespray/inventory/viettq-cluster,dst=/inventory quay.io/kubespray/kubespray:v2.16.0 bash 

Thực hiện chạy ansible task:

ansible-playbook -i /inventory/hosts.yaml cluster.yml --user=sysadmin --ask-pass --become --ask-become-pass 

Note: Với việc thêm worker node thì cũng có thể thực hiện bằng cách sau:

ansible-playbook -i /inventory/hosts.yaml scale.yml  --user=sysadmin --ask-pass --become --ask-become-pass -l "master1,worker3"

Kết quả chạy ansible playbook cluster.yaml:

PLAY RECAP **********************************************************************************************************************************************************************************************
localhost                  : ok=3    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
master1                    : ok=489  changed=12   unreachable=0    failed=0    skipped=1080 rescued=0    ignored=0
worker1                    : ok=364  changed=11   unreachable=0    failed=0    skipped=715  rescued=0    ignored=0
worker2                    : ok=339  changed=8    unreachable=0    failed=0    skipped=631  rescued=0    ignored=0
worker3                    : ok=363  changed=74   unreachable=0    failed=0    skipped=621  rescued=0    ignored=0

Kiểm tra danh sách node:

[sysadmin@master1 ~]$ kubectl get nodes -owide
NAME      STATUS   ROLES                  AGE    VERSION   INTERNAL-IP     EXTERNAL-IP   OS-IMAGE                KERNEL-VERSION                CONTAINER-RUNTIME
master1   Ready    control-plane,master   46m    v1.20.7   192.168.30.10   <none>        CentOS Linux 7 (Core)   3.10.0-1160.76.1.el7.x86_64   docker://20.10.21
worker1   Ready    <none>                 32m    v1.20.7   192.168.30.11   <none>        CentOS Linux 7 (Core)   3.10.0-1160.76.1.el7.x86_64   docker://20.10.21
worker2   Ready    <none>                 32m    v1.20.7   192.168.30.12   <none>        CentOS Linux 7 (Core)   3.10.0-1160.76.1.el7.x86_64   docker://20.10.21
worker3   Ready    <none>                 3m7s   v1.20.7   192.168.30.13   <none>        CentOS Linux 7 (Core)   3.10.0-1160.76.1.el7.x86_64   docker://20.10.21

Như vậy là node worker3 đã được add thành công vào cluster rồi.

Remove node khỏi cluster

Khi remove một node ra khỏi Cluster thì vấn đề đầu tiên đặt ra là nó sẽ có nguy cơ ảnh hưởng tới các dịch vụ đang chạy trên node đó. Nên ý tưởng của việc remove node là phải đảm bảo các workload trên node đó phải được migrate qua các node khác trước khi thực hiện remove node.

Và để demo cho việc này mình sẽ tạo một số workload là các Pod chạy trên node cần remove.

Tạo workload trên các worker node

Trước tiên mình sẽ deploy một số workload lên cụm k8s để cho các node có tải cho giống thực tế đã nhé!

[sysadmin@master1 ~]$ kubectl create ns demo
[sysadmin@master1 ~]$ kubectl -n demo create deployment deployment2 --image=nginx --replicas=5

Kết quả các workload được sinh ra như sau:

[sysadmin@master1 ~]$ kubectl -n demo get all -owide
NAME                               READY   STATUS    RESTARTS   AGE     IP             NODE      NOMINATED NODE   READINESS GATES
pod/deployment2-69bd97b4d9-4wjdc   1/1     Running   0          5m13s   10.233.110.2   worker1   <none>           <none>
pod/deployment2-69bd97b4d9-59dhd   1/1     Running   0          5m13s   10.233.103.3   worker2   <none>           <none>
pod/deployment2-69bd97b4d9-9f9ph   1/1     Running   0          5m13s   10.233.116.2   worker3   <none>           <none>
pod/deployment2-69bd97b4d9-fr6rq   1/1     Running   0          5m13s   10.233.116.3   worker3   <none>           <none>
pod/deployment2-69bd97b4d9-s6kxz   1/1     Running   0          5m13s   10.233.116.1   worker3   <none>           <none>

NAME                          READY   UP-TO-DATE   AVAILABLE   AGE     CONTAINERS   IMAGES   SELECTOR
deployment.apps/deployment2   5/5     5            5           5m13s   nginx        nginx    app=deployment2

NAME                                     DESIRED   CURRENT   READY   AGE     CONTAINERS   IMAGES   SELECTOR
replicaset.apps/deployment2-69bd97b4d9   5         5         5       5m13s   nginx        nginx    app=deployment2,pod-template-hash=69bd97b4d9

Trong đó riêng node worker3 có các Pod sau đang chạy:

[sysadmin@master1 ~]$ kubectl get pods -A -owide |egrep "NAME|worker3"
NAMESPACE     NAME                                       READY   STATUS    RESTARTS   AGE     IP              NODE      NOMINATED NODE   READINESS GATES
demo          deployment2-69bd97b4d9-9f9ph               1/1     Running   0          4m22s   10.233.116.2    worker3   <none>           <none>
demo          deployment2-69bd97b4d9-fr6rq               1/1     Running   0          4m22s   10.233.116.3    worker3   <none>           <none>
demo          deployment2-69bd97b4d9-s6kxz               1/1     Running   0          4m22s   10.233.116.1    worker3   <none>           <none>
kube-system   calico-node-6qlxv                          1/1     Running   0          11m     192.168.30.13   worker3   <none>           <none>
kube-system   kube-proxy-9fg6k                           1/1     Running   0          11m     192.168.30.13   worker3   <none>           <none>
kube-system   nginx-proxy-worker3                        1/1     Running   0          11m     192.168.30.13   worker3   <none>           <none>
kube-system   nodelocaldns-twhpc                         1/1     Running   0          11m     192.168.30.13   worker3   <none>           <none>

Thực hiện remove node khỏi cluster bằng lệnh kubectl

Đầu tiên ta thực hiện drain node để hệ thống sẽ migrate các Pod trên worker node này sang node khác:

[sysadmin@master1 ~]$ kubectl drain worker3 --ignore-daemonsets --delete-emptydir-data
node/worker3 cordoned
WARNING: ignoring DaemonSet-managed Pods: kube-system/calico-node-6qlxv, kube-system/kube-proxy-9fg6k, kube-system/nodelocaldns-twhpc
evicting pod demo/deployment2-69bd97b4d9-s6kxz
evicting pod demo/deployment2-69bd97b4d9-9f9ph
evicting pod demo/deployment2-69bd97b4d9-fr6rq
pod/deployment2-69bd97b4d9-fr6rq evicted
pod/deployment2-69bd97b4d9-s6kxz evicted
pod/deployment2-69bd97b4d9-9f9ph evicted
node/worker3 evicted

Kiểm tra sẽ thấy lúc này các Pod trên node worker3 đã chuyển sang chạy trên 2 node còn lại:

[sysadmin@master1 ~]$ kubectl -n demo get all -owide
NAME                               READY   STATUS    RESTARTS   AGE     IP             NODE      NOMINATED NODE   READINESS GATES
pod/deployment2-69bd97b4d9-4wjdc   1/1     Running   0          7m26s   10.233.110.2   worker1   <none>           <none>
pod/deployment2-69bd97b4d9-59dhd   1/1     Running   0          7m26s   10.233.103.3   worker2   <none>           <none>
pod/deployment2-69bd97b4d9-j8f99   1/1     Running   0          37s     10.233.110.3   worker1   <none>           <none>
pod/deployment2-69bd97b4d9-jgc9q   1/1     Running   0          37s     10.233.103.4   worker2   <none>           <none>
pod/deployment2-69bd97b4d9-tfqtn   1/1     Running   0          37s     10.233.103.5   worker2   <none>           <none>
pod/mydep-6c9b5989cc-5frjj         1/1     Running   0          31m     10.233.110.1   worker1   <none>           <none>
pod/mydep-6c9b5989cc-bjcx5         1/1     Running   0          31m     10.233.103.2   worker2   <none>           <none>

NAME                          READY   UP-TO-DATE   AVAILABLE   AGE     CONTAINERS   IMAGES   SELECTOR
deployment.apps/deployment2   5/5     5            5           7m26s   nginx        nginx    app=deployment2
deployment.apps/mydep         2/2     2            2           31m     nginx        nginx    app=mydep

NAME                                     DESIRED   CURRENT   READY   AGE     CONTAINERS   IMAGES   SELECTOR
replicaset.apps/deployment2-69bd97b4d9   5         5         5       7m26s   nginx        nginx    app=deployment2,pod-template-hash=69bd97b4d9
replicaset.apps/mydep-6c9b5989cc         2         2         2       31m     nginx        nginx    app=mydep,pod-template-hash=6c9b5989cc

Node worker3 sẽ có trạng thái là “Ready,SchedulingDisabled” nghĩa là không cho phép tạo thêm Pod vào node đó nữa:

[sysadmin@master1 ~]$ kubectl get nodes -owide
NAME      STATUS                     ROLES                  AGE   VERSION   INTERNAL-IP     EXTERNAL-IP   OS-IMAGE                KERNEL-VERSION                CONTAINER-RUNTIME
master1   Ready                      control-plane,master   58m   v1.20.7   192.168.30.10   <none>        CentOS Linux 7 (Core)   3.10.0-1160.76.1.el7.x86_64   docker://20.10.21
worker1   Ready                      <none>                 44m   v1.20.7   192.168.30.11   <none>        CentOS Linux 7 (Core)   3.10.0-1160.76.1.el7.x86_64   docker://20.10.21
worker2   Ready                      <none>                 44m   v1.20.7   192.168.30.12   <none>        CentOS Linux 7 (Core)   3.10.0-1160.76.1.el7.x86_64   docker://20.10.21
worker3   Ready,SchedulingDisabled   <none>                 15m   v1.20.7   192.168.30.13   <none>        CentOS Linux 7 (Core)   3.10.0-1160.76.1.el7.x86_64   docker://20.10.21

Lúc này ta có thể xóa node khỏi cluster:

[sysadmin@master1 ~]$ kubectl delete node worker3
node "worker3" deleted
[sysadmin@master1 ~]$ kubectl get nodes -owide
NAME      STATUS   ROLES                  AGE   VERSION   INTERNAL-IP     EXTERNAL-IP   OS-IMAGE                KERNEL-VERSION                CONTAINER-RUNTIME
master1   Ready    control-plane,master   59m   v1.20.7   192.168.30.10   <none>        CentOS Linux 7 (Core)   3.10.0-1160.76.1.el7.x86_64   docker://20.10.21
worker1   Ready    <none>                 45m   v1.20.7   192.168.30.11   <none>        CentOS Linux 7 (Core)   3.10.0-1160.76.1.el7.x86_64   docker://20.10.21
worker2   Ready    <none>                 45m   v1.20.7   192.168.30.12   <none>        CentOS Linux 7 (Core)   3.10.0-1160.76.1.el7.x86_64   docker://20.10.21

Tới đây thì node worker3 đã được remove khỏi cluster. Bạn có thể thực hiện reset với node vừa xóa bằng lệnh (cái này không bắt buộc):

kubeadm reset

Đến đây node worker3 đã được remove ra khỏi cluster.

Thực hiện remove node bằng kubespray:

Thay vì thao tác bằng kubectl để xóa node thì bạn cũng có thể dùng kubespray để thực hiện việc remove node ra khỏi cluster.

Mình cũng sẽ thực hiện tạo workload trước khi thực hiện remove node bằng cách tạo một deployment:

[sysadmin@master1 ~]$ k create ns workload
namespace/workload created
[sysadmin@master1 ~]$ k -n workload create deployment mydeployment --image=nginx --replicas=8
deployment.apps/mydeployment created

Các Pods được tạo ra như sau:

[sysadmin@master1 ~]$ k -n workload get pods -owide
NAME                            READY   STATUS    RESTARTS   AGE   IP             NODE             NOMINATED NODE   READINESS GATES
mydeployment-5b48c6bff4-4pxth   1/1     Running   0          19s   10.233.70.4    worker3   <none>           <none>
mydeployment-5b48c6bff4-b6zzx   1/1     Running   0          19s   10.233.70.3    worker3   <none>           <none>
mydeployment-5b48c6bff4-bt6mm   1/1     Running   0          19s   10.233.70.2    worker3   <none>           <none>
mydeployment-5b48c6bff4-hl5vd   1/1     Running   0          16s   10.233.68.28   worker2   <none>           <none>
mydeployment-5b48c6bff4-htghh   1/1     Running   0          16s   10.233.70.6    worker3   <none>           <none>
mydeployment-5b48c6bff4-mwpvm   1/1     Running   0          16s   10.233.69.51   worker1   <none>           <none>
mydeployment-5b48c6bff4-vqj8w   1/1     Running   0          19s   10.233.70.5    worker3   <none>           <none>
mydeployment-5b48c6bff4-xf287   1/1     Running   0          16s   10.233.67.49   worker1   <none>           <none>

Các Pod chạy trên node worker3:

[sysadmin@master1 ~]$ k get pods -A -owide |grep worker3
kube-system            kube-flannel-9r6sp                                           1/1     Running            0          98m    192.168.10.17   worker3   <none>           <none>
kube-system            kube-proxy-qhc79                                             1/1     Running            0          98m    192.168.10.17   worker3   <none>           <none>
kube-system            nginx-proxy-worker3                                          1/1     Running            0          98m    192.168.10.17   worker3   <none>           <none>
kube-system            nodelocaldns-6w5cw                                           1/1     Running            0          98m    192.168.10.17   worker3   <none>           <none>
workload               mydeployment-5b48c6bff4-4pxth                                1/1     Running            0          68s    10.233.70.4     worker3   <none>           <none>
workload               mydeployment-5b48c6bff4-b6zzx                                1/1     Running            0          68s    10.233.70.3     worker3   <none>           <none>
workload               mydeployment-5b48c6bff4-bt6mm                                1/1     Running            0          68s    10.233.70.2     worker3   <none>           <none>
workload               mydeployment-5b48c6bff4-htghh                                1/1     Running            0          65s    10.233.70.6     worker3   <none>           <none>
workload               mydeployment-5b48c6bff4-vqj8w                                1/1     Running            0          68s    10.233.70.5     worker3   <none>           <none>

Câu lệnh thực hiện remove node worker3:

ansible-playbook -i /inventory/hosts.yaml remove-node.yml  --user=sysadmin --ask-pass --become --ask-become-pass -e "node=worker3"

Bận cần confirm việc remove node trước khi thực hiện:

PLAY [Add no-floating nodes to no_floating] **********************************************************************************************************************************************
skipping: no hosts matched
Are you sure you want to delete nodes state? Type 'yes' to delete nodes. [no]: yes

Lúc này theo dõi trạng thái các Pod ta sẽ thấy các Pod chạy trên node worker3 sẽ được terminate và tạo lại trên các node khác:

mydeployment-5b48c6bff4-b6zzx   1/1     Terminating   0          3m36s   10.233.70.3    worker3   <none>           <none>
mydeployment-5b48c6bff4-vqj8w   1/1     Terminating   0          3m36s   10.233.70.5    worker3   <none>           <none>
mydeployment-5b48c6bff4-htghh   1/1     Terminating   0          3m33s   10.233.70.6    worker3   <none>           <none>
mydeployment-5b48c6bff4-4pxth   1/1     Terminating   0          3m36s   10.233.70.4    worker3   <none>           <none>
mydeployment-5b48c6bff4-bt6mm   1/1     Terminating   0          3m36s   10.233.70.2    worker3   <none>           <none>
mydeployment-5b48c6bff4-frk2l   0/1     Pending       0          0s      <none>         <none>           <none>           <none>
mydeployment-5b48c6bff4-fsckv   0/1     Pending       0          0s      <none>         <none>           <none>           <none>
mydeployment-5b48c6bff4-frk2l   0/1     Pending       0          0s      <none>         worker2   <none>           <none>
mydeployment-5b48c6bff4-hmp6c   0/1     Pending       0          0s      <none>         <none>           <none>           <none>
mydeployment-5b48c6bff4-fsckv   0/1     Pending       0          0s      <none>         worker1   <none>           <none>
mydeployment-5b48c6bff4-9qtnr   0/1     Pending       0          0s      <none>         <none>           <none>           <none>
mydeployment-5b48c6bff4-f27vj   0/1     Pending       0          0s      <none>         <none>           <none>           <none>
mydeployment-5b48c6bff4-9qtnr   0/1     Pending       0          0s      <none>         worker2   <none>           <none>
mydeployment-5b48c6bff4-hmp6c   0/1     Pending       0          0s      <none>         worker1   <none>           <none>
mydeployment-5b48c6bff4-f27vj   0/1     Pending       0          0s      <none>         worker1   <none>           <none>
mydeployment-5b48c6bff4-frk2l   0/1     ContainerCreating   0          0s      <none>         worker2   <none>           <none>
mydeployment-5b48c6bff4-hmp6c   0/1     ContainerCreating   0          0s      <none>         worker1   <none>           <none>
mydeployment-5b48c6bff4-fsckv   0/1     ContainerCreating   0          0s      <none>         worker1   <none>           <none>
mydeployment-5b48c6bff4-9qtnr   0/1     ContainerCreating   0          0s      <none>         worker2   <none>           <none>
mydeployment-5b48c6bff4-f27vj   0/1     ContainerCreating   0          0s      <none>         worker1   <none>           <none>
mydeployment-5b48c6bff4-vqj8w   0/1     Terminating         0          3m37s   10.233.70.5    worker3   <none>           <none>
mydeployment-5b48c6bff4-htghh   0/1     Terminating         0          3m34s   10.233.70.6    worker3   <none>           <none>
mydeployment-5b48c6bff4-bt6mm   0/1     Terminating         0          3m37s   10.233.70.2    worker3   <none>           <none>
mydeployment-5b48c6bff4-4pxth   0/1     Terminating         0          3m37s   10.233.70.4    worker3   <none>           <none>
mydeployment-5b48c6bff4-b6zzx   0/1     Terminating         0          3m37s   10.233.70.3    worker3   <none>           <none>
mydeployment-5b48c6bff4-fsckv   1/1     Running             0          2s      10.233.67.51   worker1   <none>           <none>
mydeployment-5b48c6bff4-f27vj   1/1     Running             0          2s      10.233.67.50   worker1   <none>           <none>
mydeployment-5b48c6bff4-hmp6c   1/1     Running             0          2s      10.233.69.52   worker1   <none>           <none>
mydeployment-5b48c6bff4-frk2l   1/1     Running             0          2s      10.233.68.29   worker2   <none>           <none>
mydeployment-5b48c6bff4-9qtnr   1/1     Running             0          2s      10.233.68.30   worker2   <none>           <none>

Và kết quả là các Pod đã được migrate hết sang node khác:

[sysadmin@master1 ~]$ k -n workload get pods -owide
NAME                            READY   STATUS    RESTARTS   AGE     IP             NODE             NOMINATED NODE   READINESS GATES
mydeployment-5b48c6bff4-9qtnr   1/1     Running   0          49s     10.233.68.30   worker2   <none>           <none>
mydeployment-5b48c6bff4-f27vj   1/1     Running   0          49s     10.233.67.50   worker1   <none>           <none>
mydeployment-5b48c6bff4-frk2l   1/1     Running   0          49s     10.233.68.29   worker2   <none>           <none>
mydeployment-5b48c6bff4-fsckv   1/1     Running   0          49s     10.233.67.51   worker1   <none>           <none>
mydeployment-5b48c6bff4-hmp6c   1/1     Running   0          49s     10.233.69.52   worker1   <none>           <none>
mydeployment-5b48c6bff4-hl5vd   1/1     Running   0          4m22s   10.233.68.28   worker2   <none>           <none>
mydeployment-5b48c6bff4-mwpvm   1/1     Running   0          4m22s   10.233.69.51   worker1   <none>           <none>
mydeployment-5b48c6bff4-xf287   1/1     Running   0          4m22s   10.233.67.49   worker1   <none>           <none>

Kết quả chạy ansbile remove node thành công:

TASK [remove-node/post-remove : Delete node] *********************************************************************************************************************************************
changed: [worker3 -> 192.168.10.11]

PLAY RECAP *******************************************************************************************************************************************************************************
localhost                  : ok=3    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
master1             : ok=16   changed=3    unreachable=0    failed=0    skipped=36   rescued=0    ignored=0
worker1             : ok=2    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
worker2             : ok=2    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
worker3             : ok=53   changed=19   unreachable=0    failed=0    skipped=84   rescued=0    ignored=0

Kiểm tra danh sách node:

NAME             STATUS   ROLES                  AGE   VERSION
master1   Ready    control-plane,master   1h   v1.20.7
worker1   Ready    <none>                 1h   v1.20.7
worker2   Ready    <none>                 1h   v1.20.7

Như vậy node worker3 đã được remove khỏi cluster.

Như vậy mình đã hướng dẫn các bạn cách thêm/xóa node khỏi K8S Cluster. Việc tác động ở mức node này các bạn nên chủ động làm LAB để hiểu kỹ và đánh giá những rủi ro trước khi nghĩ tới chuyện apply vào production nhé!

Nguồn: viblo.asia

Bài viết liên quan

WebP là gì? Hướng dẫn cách để chuyển hình ảnh jpg, png qua webp

WebP là gì? WebP là một định dạng ảnh hiện đại, được phát triển bởi Google

Điểm khác biệt giữa IPv4 và IPv6 là gì?

IPv4 và IPv6 là hai phiên bản của hệ thống địa chỉ Giao thức Internet (IP). IP l

Check nameservers của tên miền xem website trỏ đúng chưa

Tìm hiểu cách check nameservers của tên miền để xác định tên miền đó đang dùn

Mình đang dùng Google Domains để check tên miền hàng ngày

Từ khi thông báo dịch vụ Google Domains bỏ mác Beta, mình mới để ý và bắt đầ