## Docker VS Containerd

Trong K8S, khi tạo một cluster Kubernetes với phiên bản V1.19 trở lên, container engine được mặc định là Containerd, trong khi các cluster có phiên bản Kubernetes cũ hơn 1.19 sử dụng Docker. Hai container engine này đều có các công cụ dòng lệnh riêng để quản lý image và container.

Để cho phép các cluster K8S phiên bản thấp hơn 1.19 có thể nâng cấp lên 1.19+, K8S cũng ra mắt [chức năng nâng cấp container runtime](#container-runtime-upgrade) giúp khách hàng nâng cấp mượt mà.

Lưu ý: Các node sử dụng containerd runtime sẽ gọi các plugin mạng CNI thông qua containerd để cấp phát IP cho Pod. Việc cài đặt riêng Docker sẽ ghi đè lên các tệp cấu hình của containerd, dẫn đến việc cấp phát IP cho Pod bị thất bại. Do đó, **không cài đặt Docker thủ công để tránh việc node không khả dụng**.

### So sánh các lệnh của Docker và Containerd

#### So sánh lệnh quản lý Image

| Chức năng liên quan đến Image | Docker                  | Containerd               |
| -------- | ----------------------- | ------------------------ |
| Hiển thị danh sách Image cục bộ | docker images           | crictl images            |
| Tải xuống Image     | docker pull             | crictl pull              |
| Tải lên Image     | docker push             | Không có                     |
| Xóa Image cục bộ   | docker rmi              | crictl rmi               |
| Xem chi tiết Image   | docker inspect IMAGE-ID | crictl inspecti IMAGE-ID |

#### So sánh lệnh quản lý Container

| Chức năng liên quan đến Container | Docker         | Containerd     |
| ------ | -------------- | -------------- |
| Hiển thị danh sách Container | docker ps      | crictl ps      |
| Tạo Container   | docker create  | crictl create  |
| Khởi động Container   | docker start   | crictl start   |
| Dừng Container   | docker stop    | crictl stop    |
| Xóa Container   | docker rm      | crictl rm      |
| Xem chi tiết Container | docker inspect | crictl inspect |
| attach | docker attach  | crictl attach  |
| exec   | docker exec    | crictl exec    |
| logs   | docker logs    | crictl logs    |
| stats  | docker stats   | crictl stats   |

#### So sánh lệnh Pod

| Chức năng liên quan đến POD  | Docker | Containerd      |
| --------- | ------ | --------------- |
| Hiển thị danh sách POD | Không có  | crictl pods     |
| Xem chi tiết POD | Không có  | crictl inspectp |
| Chạy POD    | Không có  | crictl runp     |
| Dừng POD   | Không có  | crictl stopp   |

### Nâng cấp Container Runtime

Trên trang Plugins trong giao diện quản lý cluster của console, chọn tab "Container Runtime" (tab này hiện chỉ hiển thị đối với các cluster được nâng cấp từ phiên bản cũ lên 1.19 trở lên). Tại đây, bạn có thể nâng cấp container runtime cho các node hiện tại đã thuộc về cluster trước khi nâng cấp. Các node mới được thêm vào sau khi nâng cấp cluster sẽ mặc định sử dụng containerd runtime.

Quá trình nâng cấp runtime sẽ được thực hiện tuần tự, bắt đầu với tất cả các node Master, tiếp theo là các node Node. Trong quá trình nâng cấp, từng node sẽ tạm thời ngừng phục vụ, và các Pod đang chạy trên đó sẽ bị trục xuất sang các node khác, điều này có thể ảnh hưởng đến hoạt động kinh doanh. **Khuyến nghị đảm bảo rằng cluster có đủ tài nguyên và thực hiện thao tác này trong thời gian hoạt động kinh doanh thấp điểm**.