# Xử lý lỗi thường gặp của Node

Node, với tư cách là các thực thể mang tải công việc, là những đối tượng rất quan trọng trong Kubernetes. Trong quá trình vận hành thực tế, các node có thể gặp phải nhiều vấn đề khác nhau. Bài viết này mô tả ngắn gọn các trạng thái bất thường khác nhau của node và các hướng xử lý sự cố.

## 1. Mô tả trạng thái Node

| Trạng thái Node | Mô tả | Phương pháp xử lý |
| ------------------  | ----------------------------------------- | ---- |
| Ready | True cho biết node đang khỏe mạnh. False cho biết node không khỏe mạnh. Unknown cho biết không tìm thấy node. | |
| DiskPressure | True cho biết dung lượng đĩa của node đang bị quá tải. False cho biết điều ngược lại. | |
| MemoryPressure | True cho biết mức sử dụng bộ nhớ của node quá cao. False cho biết điều ngược lại. | |
| PIDPressure | True cho biết có quá nhiều tiến trình đang chạy trên node. False cho biết điều ngược lại. | |
| NetworkUnavailable | True cho biết cấu hình mạng của node bất thường. False cho biết điều ngược lại. | |

## 2. Các lệnh Node thường dùng

1. Kiểm tra trạng thái node

```bash
kubectl get nodes
```

2. Xem các sự kiện của node

```bash
kubectl describe node ${NODE_NAME}
```

Khi hai lệnh này không thể chỉ ra điều gì, chúng ta cũng có thể sử dụng các lệnh liên quan của Linux để hỗ trợ đánh giá. Lúc này, chúng ta cần đăng nhập vào node và sử dụng các lệnh liên quan đến Linux để kiểm tra trạng thái node.

3. Kiểm tra kết nối của node

   3.1 Kiểm tra mạng: Chúng ta có thể kiểm tra kết nối mạng của node bằng cách sử dụng lệnh **Ping** từ node Master của cluster. 
   
   3.2 Kiểm tra sức khỏe: Đăng nhập vào bảng điều khiển VNPT Cloud, xem node trên trang máy chủ đám mây để xem nó có ở trạng thái Running hay không, bao gồm cả việc xem tỷ lệ sử dụng CPU và bộ nhớ, xác nhận xem node có đang chịu tải cao hay không.

## 3. Kiểm tra lỗi thành phần K8S

Các cluster K8S mặc định có ba node Master. Các thành phần cốt lõi của K8S được triển khai trên cả ba node Master và cung cấp dịch vụ ra bên ngoài thông qua cân bằng tải. Nếu bạn phát hiện thấy các bất thường của thành phần, hãy đăng nhập vào node Master tương ứng (hoặc đăng nhập lần lượt vào từng node Master nếu không thể xác định vị trí lỗi). Sử dụng các lệnh sau để kiểm tra trạng thái thành phần, xác định nguyên nhân lỗi và khởi động lại các thành phần bất thường:

```bash
systemctl status ${PLUGIN_NAME}
journalctl -u ${PLUGIN_NAME}
systemctl restart ${PLUGIN_NAME}
```

Các thành phần cốt lõi của K8S và tên của chúng:

| Thành phần | Tên thành phần |
| ------------------  | ---------------------  |
| Kubelet             | kubelet                |
| API Server          | kube-apiserver         |
| Controller Manager  | kube-controller-manager|
| Etcd                | etcd                   |
| Scheduler           | kube-scheduler         |
| KubeProxy           | kube-proxy             |

Ví dụ, để kiểm tra trạng thái thành phần APIServer, bạn cần thực thi `systemctl status kube-apiserver`.

## 4. Trang chủ K8S liên tục làm mới (refresh)?

1. Liệu ulb4 tương ứng với api-server có bị xóa hay không (`uk8s-xxxxxx-master-ulb4`)
2. Ba máy chủ master của cluster K8S có bị xóa hoặc tắt nguồn, v.v. hay không
3. Đăng nhập vào ba node master của K8S và kiểm tra xem các dịch vụ etcd và kube-apiserver có bình thường hay không. Nếu bất thường, hãy thử khởi động lại dịch vụ
   
- 3.1 `systemctl status etcd` / `systemctl restart etcd` Nếu khởi động lại một etcd riêng lẻ thất bại, hãy thử khởi động lại etcd của cả ba node cùng một lúc
- 3.2 `systemctl status kube-apiserver` / `systemctl restart kube-apiserver`

## 5. Cần làm gì khi Node K8S ở trạng thái NotReady

1. Sử dụng `kubectl describe node node-name` để kiểm tra lý do node ở trạng thái NotReady, hoặc xem trực tiếp chi tiết node trên trang bảng điều khiển.
2. Nếu bạn có thể đăng nhập vào node, hãy xem nhật ký của kubelet bằng `journalctl -u kubelet`, và kiểm tra xem kubelet có hoạt động bình thường hay không bằng `systemctl status kubelet`.
3. Đối với các node không thể đăng nhập, nếu bạn cần khôi phục nhanh, hãy tắt nguồn và khởi động lại máy chủ tương ứng thông qua bảng điều khiển.
4. Xem giám sát máy chủ, hoặc đăng nhập vào máy chủ và thực thi lệnh `sar`. Nếu mức sử dụng đĩa/CPU đột ngột tăng lên cùng với mức sử dụng bộ nhớ cao, nguyên nhân thường là do lỗi tràn bộ nhớ OOM (Out of Memory). Khi mức sử dụng bộ nhớ quá cao, bộ đệm đĩa sẽ trở nên rất nhỏ, dẫn đến I/O đĩa thường xuyên, làm tăng thêm tải hệ thống và tạo ra một vòng lặp luẩn quẩn của việc sử dụng CPU cao.
5. Đối với các trường hợp OOM bộ nhớ, khách hàng nên tự kiểm tra tình trạng bộ nhớ của tiến trình. K8S khuyến nghị rằng các giá trị request và limit không nên chênh lệch quá nhiều — sự khác biệt lớn sẽ khiến các node dễ bị sập hơn.
6. Nếu bạn có thắc mắc về nguyên nhân khiến node ở trạng thái notready, vui lòng liên hệ với bộ phận hỗ trợ thủ công theo hướng dẫn tại [Hỗ trợ thủ công K8S](#uk8s-manual-support)