I. Kubernetes là gì?
Kubernetes, hay gọi tắt là k8s, là một bộ điều phối vùng chứa (container) mã nguồn mở. Ban đầu được phát triển bởi các kỹ sư tại Google, Kubernetes giải quyết nhiều vấn đề liên quan đến việc triển khai ứng dụng theo kiến trúc microservice. Kubernetes tự động xử lý việc mở rộng quy mô, tự phục hồi, cân bằng tải, cập nhật liên tục và các tác vụ khác mà trước đây vẫn quản lý và thực hiện một cách thủ công.
Kể từ khi Kubernetes trở thành một dự án mã nguồn mở và được quản lý bởi Cloud Native Computing Foundation vào năm 2014, cộng đồng phát triển đã chấp nhận những lợi ích của nó mang lại trong việc điều phối các hệ thống trên nền tảng container.
II. Kubernetes làm được gì?
Kubernetes có nhiều tính năng giúp sắp xếp các container trên nhiều máy chủ, tự động hóa việc quản lý và tối đa hóa việc sử dụng tài nguyên qua đó tăng hiệu quả sử dụng cơ sở hạ tầng. Các tính năng quan trọng bao gồm:
- Auto-scaling : Tự động chia tỷ lệ các ứng dụng được chứa trong vùng chứa và tài nguyên của chúng lên hoặc xuống dựa trên mức sử dụng
- Quản lý vòng đời: Tự động hóa việc triển khai và cập nhật với khả năng:
- Quay lại các phiên bản trước
- Tạm dừng và tiếp tục triển khai
- Mô hình khai báo (Declarative model). Khai báo môt trạng thái mong muốn, sau đó Kukernetes sẽ duy trì trạng thái đó ở chế độ nền. Có thể khôi phục lại trạng thái trên khi gặp bất kỳ lỗi nào.
- Khả năng phục hồi và tự phục hồi: tự động sắp xếp, tự động khởi động lại, tự động sao chép và tự động mở rộng quy mô cung cấp khả năng tự phục hồi của ứng dụng
- Lưu trữ liên tục: Khả năng gắn kết và thêm storage tự động.
- Cân bằng tải: Kubernetes hỗ trợ nhiều tùy chọn cân bằng tải có thể giải quyết mọi yêu cầu triển khai đa dạng.
- Hỗ trợ DevSecOps: DevSecOps là một phương pháp bảo mật nâng cao giúp đơn giản và tự động hóa các hoạt động container trên cloud, tích hợp bảo mật trong suốt vòng đời của container và cho phép cung cấp các phần phần mềm an toàn, chất lượng cao nhanh chóng hơn.
III. Kiến trúc Kubernetes
Các container đóng gói môt ứng dụng ở dạng di động và dể dàng triển khai. Kiến trúc của Kubernetes được thiết kế để chạy các ứng dụng được container hóa. Một cụm Kubernetes bao gồm ít nhất một control plane và ít nhất một node worker (thường là một máy chủ vật lý hoặc một server ảo hóa).
Đơn vị nhỏ nhất cho một ứng dụng chạy trong Kubernetes là Pod, bao gồm một hoặc nhiều container. Các Pod chạy trên node worker.
Các thành phần trong Kubernetes cụ thể như sau:
- Control Plane
Đây là thành phần giám sát, quản lý toàn cụm Kubernetes và phản hồi các sự kiện của cụm. Chúng có thể thực hiện việc lập lịch, mở rộng quy mô hoặc khởi động lại một pod bị lỗi. Các thành phần trong Control Plane bao gồm:- kube-apiserver: đảm nhận công việc của Kubernetes API, đóng vai trò font-end cho Kubernetes control plane
kube-apiserver được thiết kế để thay đổi quy mô theo chiêu ngang, tức là có thể triển khai nhiều kube-apiserver và chạy cân bằng tải. - etcd: một loại cơ sở dữ liệu dạng key-value có tính sẳn sàng cao được sử dụng để lưu dữ liệu của cụm Kubernetes.
- kube-scheduler: đảm nhận công việc theo dõi các Pod mới được tạo. Dựa vào yêu cầu về tài nguyên, ràng buộc về phần cứng, quan hệ, vị trí dữ liệu,… kube-scheduler sẽ chỉ định Node mà Pod sẽ được triển khai lên.
- kube-controller-manager: thành phần sẽ chạy các tiến trình điều khiển. Về mặt logic, mỗi bộ điều khiển (controller) là một quy trình riêng biệt, nhưng để giảm độ phức tạp, tất cả chúng đều được biên dịch thành một tẹp nhị phân và chạy trong một quy trình duy nhất. Một số loại bộ điều khiển:
- Node controller: chịu trách nhiệm thông báo và phản hồi khi các Node gặp sự cố.
- Job controller: Theo dõi các đối tượng là các tác vụ chạy một lần, sau đó tạo Pod để chạy các tác vụ đó đến khi hoàn thành.
- Endpoints controller: tham gia vào đối tượng Endpoint (kết nối Service và Pod)
- Service Account & Token controller: tạo tài khoản mặc định, các token access API cho các namespace mới.
- cloud-controller-manager: trình quản lý bộ điều khiển dành riêng cho cloud. Cho phép bạn có thể liên kết cụm Kubernetes của mình với API của các nhà cung cấp dịch vụ Cloud.
Bộ điều khiển có các thành phần phụ thuộc nhà cung cấp dịch vụ Cloud:- Node controller: Để kiểm tra nhà cung cấp đám mây để xác định một Node bị xóa sau khi không phản hồi
- Route controller: Để thiết lập định tuyến trong hạ tầng Cloud
- Service controller: Để tạo, cập nhật và xóa bộ cân bằng tải của của dịch vụ Cloud.
- kube-apiserver: đảm nhận công việc của Kubernetes API, đóng vai trò font-end cho Kubernetes control plane
- Node:
Node chạy trên mọi node, nó cung cấp môi trường và duy trì các pod đang chạy.- kubelet: nó là một agent chạy trên mọi node trong cluster. Nó đảm bảo các container đang chạy và hoạt động tốt trong Pod.
- kube-proxy: đây là một proxy chạy trên mỗi Node trong cluster.
kube-proxy duy trì các quy tắc mạng trên các node, các quy tắc này cho phép giao tiếp đến các Pod từ mạng bên trong hoặc bên ngoài cluster Kubernetes. - container runtime: làm phần mềm chịu trách nhiệm chạy các container.
- Các thành phần hỗ trợ khác: các thanh phần này sử dụng tài nguyên Kubernetes (DaemonSet, Deployment, v.v.) để triển khai các tính năng hỗ trợ cho cụm, một số thành phần tiêu biểu bao gồm:
- DNS: tất cả các cluster Kubernetes đều phải có cụm DNS, cùng với các máy chủ DNS khác trong sử dụng trong hạ tầng, nó sẽ phục vụ các bản ghi DNS cho các dịch vụ chạy trên Kubernetes.
- Web UI (Dashboard): một bảng điều khiển trên nền web hỗ trợ người dùng quản lý và khắc phục sử cố trên cluster Kubernetes.
- Container Resource Monitoring: ghi lai số liệu giám sát các container theo chuỗi thời gian vào cơ sở dữ liệu trung tâm, đồng thời cung cấp giao diện người dùng để xem dữ liệu đó.
- Cluster-lever loggging: chịu trách nhiệm lưu log của container vào kho log trung tâm kèm với giao diện tìm kiếm và duyệt log.
Tài liệu tham khảo:
https://kubernetes.io/docs/concepts/overview/components/
https://www.vmware.com/topics/glossary/content/kubernetes.html