Kubernetes là một nền tảng quản lý container mạnh mẽ, nhưng việc duy trì tính sẵn sàng của các node trong cụm Kubernetes rất quan trọng. Hiện nay, cụm Kubernetes được phân thành ba loại node: Master node, ETCD node và Worker nodes. Để đảm bảo tính sẵn sàng cao (high availability), tất cả các loại node này đều được nhân bản, giúp giảm thiểu rủi ro khi một hoặc một số node bị lỗi. Trong bài viết này, chúng ta sẽ tìm hiểu cách khôi phục các lỗi phổ biến xảy ra trong cụm Kubernetes Cluster.
Cách khắc phục lỗi "An ETCD Node has Failed"
1. Phát hiện lỗi
Sử dụng lệnh sau để kiểm tra trạng thái của các node ETCD:
$ kubectl get cs
NAME STATUS MESSAGE
scheduler Healthy ok
controller-manager Healthy ok
etcd-2 Healthy {"health": "true"}
etcd-0 Healthy {"health": "true"}
etcd-1 Unhealthy Client.Timeout exceeded while awaiting headers
2. Khôi phục trong thiết lập tính sẵn sàng cao (High Availability)
Nếu cụm Kubernetes được cấu hình ở chế độ HA, bạn có thể thay thế node ETCD bị lỗi bằng cách tạo một node mới. Ghi lại địa chỉ IP của node mới nhưng không khởi động ETCD ngay. Trên một trong các node ETCD còn hoạt động, hãy xóa node ETCD bị lỗi và thêm địa chỉ IP của node mới. Ví dụ:
$ etcdctl --endpoints=http://127.0.0.1:2379 member list
...
$ etcdctl --endpoints=http://127.0.0.1:2379 member remove [member ID]
$ etcdctl member add kube-etcd-4 --peer-urls=http://[new node IP]:2380
Sau đó, định cấu hình node ETCD mới và cập nhật tùy chọn máy chủ "kube-apiserver" của các thành phần trên các master node để trỏ đến node ETCD mới.
3. Khôi phục cho thành phần Non-HA
Nếu cụm không chạy ở chế độ HA và node ETCD duy nhất bị lỗi, bạn cần khôi phục dữ liệu từ ổ đĩa hoặc ảnh chụp nhanh của thư mục dữ liệu ETCD, thường là /var/lib/etcd.
Sau khi khôi phục dữ liệu, hãy tạo một node ETCD mớitrong chế độ ETCDINITIALCLUSTERSTATE=existing và điều chỉnh cấu hình trong kube-apiserver.
Cách khắc phục lỗi "A Kubernetes master Node has Failed"
1. Phát hiện lỗi
Sử dụng lệnh sau để xem tình trạng node chính:
$ kubectl get nodes
NAME STATUS AGE VERSION
kube-master-1 Ready ...
kube-master-2 NotReady ...
2. Khôi phục cho HA
Tạo một node master mới và thêm nó vào cụm, thường phải sử dụng lệnh kubectl để thêm master labels và taints. Sau đó, sao chép toàn bộ cấu hình từ master node đang hoạt động sang node mới. Đảm bảo tất cả các dịch vụ như kube-apiserver, kube-controller-manager, và kube-scheduler hoạt động đúng.
Khi node master mới đã hoạt động, hãy xóa node cũ bị lỗi ra khỏi cụm:
$ kubectl delete nodes kube-master-2
3. Khôi phục cho thành phần Non-HA
Nếu chỉ có một master node và nó bị lỗi, bạn cần khôi phục thư mục cấu hình Kubernetes trong /etc/kubernetes. Nếu ETCD còn hoạt động, hãy tạo một master node mới, điều chỉnh các chứng chỉ và cập nhật cấu hình kubelet trên các worker node để trỏ về master node mới.
Cách khắc phục lỗi "A Kubernetes Worker Node has Failed"
1. Phát hiện lỗi
Chạy lệnh sau để kiểm tra trạng thái của các worker node:
$ kubectl get nodes
2. Khôi phục worker node
Kubernetes sẽ tự động lên lịch lại các pod lên node khác. Tạo một worker mới để thay thế cho worker node bị lỗi, sau đó kết nối nó với cụm. Khi worker mới hoạt động, hãy xóa worker cũ:
$ kubectl delete nodes kube-worker-2
Kết luận
Việc khôi phục các cụm Kubernetes Cluster bị hỏng có thể đa dạng và phức tạp. Tuy nhiên, với quy trình cụ thể cho từng loại node, bạn hoàn toàn có thể giữ cho cụm hoạt động ổn định và hiệu quả. Hãy theo dõi sát sao các thành phần trong cụm để có thể phát hiện và khắc phục lỗi kịp thời.
source: viblo