Bài 3. Pod là gì? Tại sao Kubernetes không chạy Container?
"Docker chạy Container. Nhưng Kubernetes lại chạy Pod. Tại sao phải thêm một lớp trung gian như vậy?"
Đây là một trong những câu hỏi đầu tiên mà hầu hết mọi người đều thắc mắc khi học Kubernetes.
Hãy bắt đầu bằng một Container
Giả sử bạn có một ứng dụng web.
Docker
┌─────────────────────┐
│ Container │
│ │
│ Nginx + Website │
└─────────────────────┘
Docker chỉ cần một container là có thể chạy ứng dụng.
Mọi thứ đều rất đơn giản.
Nhưng khi hệ thống lớn hơn, Kubernetes phải giải quyết nhiều vấn đề hơn là "chạy một container".
Nếu ứng dụng cần nhiều container thì sao?
Hãy tưởng tượng bạn có một ứng dụng cần:
- Nginx để nhận request
- Một container ghi log
- Hai container luôn phải khởi động cùng nhau
- Luôn nằm trên cùng một máy
- Luôn dùng chung địa chỉ IP
- Luôn chia sẻ chung thư mục
Nếu Kubernetes quản lý từng container riêng lẻ thì sẽ rất phức tạp.
Đó là lý do Pod ra đời.
1. Pod là gì?
Bạn có thể hiểu đơn giản:
Pod là đơn vị nhỏ nhất mà Kubernetes quản lý và triển khai.
Thay vì chạy Container, Kubernetes sẽ chạy Pod, còn Pod sẽ chứa một hoặc nhiều Container.
Pod
┌─────────────────────────────┐
│ Container Container │
│ ┌─────────┐ ┌──────────┐ │
│ │ Nginx │ │ Log Agent│ │
│ └─────────┘ └──────────┘ │
└─────────────────────────────┘
Trong thực tế, phần lớn Pod chỉ chứa một container.
Nhưng Kubernetes vẫn dùng Pod vì nó linh hoạt hơn khi hệ thống phát triển.
2. Các Container trong cùng một Pod có gì đặc biệt?
Các container bên trong cùng một Pod sẽ:
- Cùng địa chỉ IP
- Cùng cổng mạng (Network Namespace)
- Có thể chia sẻ dữ liệu qua Volume
- Luôn được tạo và xóa cùng nhau
Hãy tưởng tượng Pod giống như một căn hộ, còn Container là những người sống trong căn hộ đó.
Họ:
- Dùng chung địa chỉ
- Dùng chung Wi-Fi
- Có thể chia sẻ đồ đạc
Nhưng vẫn có phòng riêng để làm việc.
3. Vậy tại sao Kubernetes không chạy trực tiếp Container?
Vì Kubernetes cần quản lý một nhóm container cùng nhau, chứ không chỉ từng container riêng lẻ.
Pod giúp Kubernetes:
- Khởi động nhiều container cùng lúc
- Chia sẻ mạng và dữ liệu
- Đơn giản hóa việc quản lý
- Chuẩn bị cho các mô hình Sidecar, Init Container và nhiều kiến trúc nâng cao khác
Nói cách khác:
Container là đơn vị chạy ứng dụng.
Pod là đơn vị mà Kubernetes quản lý.
Tóm tắt
Nếu chỉ nhớ một điều sau bài này, hãy nhớ:
- Docker chạy Container.
- Kubernetes chạy Pod.
- Một Pod có thể chứa một hoặc nhiều Container.
- Các Container trong cùng Pod chia sẻ mạng và tài nguyên với nhau.
- Pod là đơn vị nhỏ nhất mà Kubernetes có thể tạo, xóa và quản lý.
Bài tiếp theo
Bây giờ chúng ta đã biết Kubernetes chạy Pod.
Nhưng vẫn còn một câu hỏi rất lớn:
Nếu Pod bị xóa hoặc Node gặp sự cố thì ứng dụng sẽ ra sao?
Đó chính là lý do ReplicaSet ra đời, và chúng ta sẽ khám phá nó trong bài tiếp theo.
All rights reserved