CHI TIẾT BÀI VIẾT
GIỚI THIỆU Kubernetes
Kubernetes là gì?
Kubernetes (k8s hay kube) là hệ thống nền tảng mã nguồn mở, có tính năng khả chuyển và mở rộng, có thể tích hợp một số mã nguồn mở khác như Atomic Registry, Open vSwitch, OAuth và SELinux,… được dùng để quản lý, điều phối các ứng dụng chạy trên các container của các cụm máy chủ (cluster)
Ban đầu, Kubernetes được các kỹ sư Google phát triển. Từ năm 2014, Google mở mã nguồn Kubernetes và nhận được phối hợp thực tiễn tốt từ cộng đồng, Kubernetes trở thành hệ sinh thái lớn, phát triển mạnh mẽ và nhanh chóng.
Các giai đoạn triển khai hệ thống ứng dụng đã trải qua các thời đại:
* Triển khai truyền thống: các ứng dụng được triển khai trên một hoặc nhiều máy chủ vật lý. Khi triển khai các ứng dụng trên một máy chủ sẽ không tối ưu về sử dụng tài nguyên. Nếu các ứng dụng cùng chạy trên một máy chủ với mức độ chiếm dụng tài nguyên khác nhau, kết quả là sẽ ảnh hưởng giữa các ứng dụng.
* Triển khai Ảo hóa: Ảo hóa cho phép thiết lập nhiều Máy ảo (VM) chạy và sử dụng tài nguyên của một máy chủ vật lý, giảm chi phí phần cứng. Các ứng dụng được cô lập giữa các VM, tăng cường khả năng quản lý, mở rộng và cung cấp khả năng bảo mật hệ thống
* Triển khai Container: Container có đặc tính nhẹ (lightweight) và chia sẻ Hệ điều hành (HĐH) trên máy chủ vật lý, ứng dụng sẽ được cô lập tương tự như Máy ảo. Một container có hệ thống filesystem, CPU, bộ nhớ,...
Tại sao Kubernetes cần thiết?
Triển khai các container trên nhiều máy chủ là một cách tốt để đóng gói và chạy các ứng dụng (production apps). Khi hệ thống mở rộng quy mô sang môi trường Production và yêu cầu cần nhiều containers phối hợp hoạt động để phân phối các dịch vụ, dẫn đến số lượng container sẽ phát triển, tăng đáng kể và sự phức tạp cũng tăng lên theo.
Kubernetes vận hành hệ thống khi có sự gia tăng và mở rộng container, tích hợp với mạng (networking), lưu trữ (storage), bảo mật (security), đo lường từ xa (telemetry),… để cung cấp một hạ tầng container toàn diện. Kubernetes phân loại các containers thành "pod", cung cấp các Template triển khai, nhân rộng và chuyển đổi dự phòng cho ứng dụng, quản lý tình trạng các containers theo thời gian và đảm bảo không có khoảng thời gian downtime, giúp cân bằng tải và hỗ trợ workloads giữa các containers đang chạy
Một số thuật ngữ trong Kubernetes
- Master Node: điều khiển các Kubernetes nodes
-
Node: Thực thi các tác vụ được yêu cầu từ Kubernetes master
-
Pod: nhóm một hoặc nhiều containers được triển khai cho single node. Các containers trong pod sử dụng chung IP address, IPC, hostname,….
-
Image: các chương trình được đóng gói, các Pod sẽ kết nối trực tiếp các Image để chạy.
-
Replication controller: điều khiển nhân rộng bản sao của pod đang chạy trên cluster.
-
Kubelet: là dịch vụ chạy trên các node, đảm bảo các container khởi động và chạy.
-
kubectl: công cụ cấu hình dòng lệnh Kubernetes.