Kubernetes Architecture-part1
Kiến trúc Kubernetes bao gồm nhiều thành phần làm việc cùng nhau để tự động hóa việc triển khai, quản lý, mở rộng và giám sát các ứng dụng container hóa. Dưới đây là những thành phần chính:
1. Control Plane:
Là bộ não của cụm Kubernetes, chịu trách nhiệm quản lý trạng thái tổng thể của cụm và điều phối các tác vụ.
Bao gồm các thành phần chính:
kube-apiserver:
Tiếp nhận yêu cầu API từ người dùng và quản trị viên, xử lý chúng và cập nhật trạng thái cụm trong etcd.
Là trung tâm API cho Kubernetes, tiếp nhận và xử lý các yêu cầu từ người dùng, công cụ quản lý và các thành phần khác trong cụm.
Lưu trữ trạng thái hiện tại của tất cả các đối tượng Kubernetes, bao gồm pod, service, deployment, configmap, v.v.
Xác thực và ủy quyền truy cập vào API, đảm bảo chỉ những người dùng và ứng dụng được ủy quyền mới có thể thực hiện các thao tác trong cụm.
Cập nhật etcd, kho lưu trữ dữ liệu phân tán, với mọi thay đổi đối với trạng thái cụm.
kube-scheduler:
Phân bổ các pod mới cho các node phù hợp dựa trên các tiêu chí nhất định.
Chịu trách nhiệm phân bổ các pod mới cho các node phù hợp trong cụm.
Sử dụng các thuật toán khác nhau để chọn node tốt nhất cho mỗi pod, dựa trên các yếu tố như dung lượng tài nguyên sẵn có, yêu cầu affinity và anti-affinity, và trạng thái hiện tại của node.
Đảm bảo rằng tất cả các pod được yêu cầu đều được lên lịch và chạy trên các node phù hợp.
kube-controller-manager:
Quản lý các bộ điều khiển khác nhau thực hiện các tác vụ như đảm bảo số lượng pod mong muốn đang chạy, quản lý dịch vụ cụm và cân bằng tải lưu lượng truy cập.
Quản lý một bộ các bộ điều khiển thực hiện các tác vụ nền liên tục để đảm bảo trạng thái mong muốn của cụm được duy trì.
Các bộ điều khiển chính bao gồm:
Controller Pod: Đảm bảo số lượng pod mong muốn cho mỗi deployment đang chạy.
Replication Controller: (đã lỗi thời trong Kubernetes 1.19 trở lên) Tương tự như Controller Pod, nhưng sử dụng selector thay vì template deployment.
Node Controller: Quản lý trạng thái của các node trong cụm, phát hiện các node mới và cũ, và cập nhật trạng thái của chúng trong API server.
Service Controller: Quản lý các dịch vụ Kubernetes, đảm bảo rằng các endpoint dịch vụ được cập nhật chính xác và cân bằng tải lưu lượng truy cập được thực hiện đúng cách.
Endpoint Controller: Quản lý các endpoint cho các dịch vụ, theo dõi các pod mới và cập nhật endpoint dịch vụ để phản ánh các pod có sẵn.
Namespace Controller: Quản lý các namespace trong Kubernetes, thực thi các chính sách và kiểm soát tài nguyên cho mỗi namespace.
etcd:
Là kho lưu trữ dữ liệu phân tán được sử dụng để lưu trữ trạng thái hiện tại của cụm Kubernetes.
Cung cấp khả năng lưu trữ dữ liệu đáng tin cậy, có sẵn cao và đồng bộ cho tất cả các thành phần trong control plane.
Cho phép control plane truy cập và cập nhật trạng thái cụm một cách hiệu quả.
Cloud Controller Manager (tùy chọn):
Cung cấp khả năng tích hợp với các dịch vụ cloud, chẳng hạn như AWS, GCP hoặc Azure.
Cho phép Kubernetes tự động hóa các tác vụ như tạo và quản lý tài nguyên cloud, chẳng hạn như load balancer, nhóm bảo mật và ổ đĩa.
Tương tác với Control Plane:
Người dùng có thể tương tác với control plane thông qua các công cụ dòng lệnh (CLI) như kubectl, API REST hoặc giao diện người dùng web (UI) như Kubernetes Dashboard.
Các công cụ quản lý bên thứ ba cũng có thể được sử dụng để tương tác với control plane và tự động hóa các tác vụ Kubernetes.
2. Worker Node:
Là các máy chủ thực tế chạy các container.
Mỗi worker node có:
kubelet:
Giao tiếp với control plane để nhận lệnh và thực thi các tác vụ trên node, chẳng hạn như khởi động, dừng và quản lý container.
Chịu trách nhiệm:
Nhận lệnh từ control plane, chẳng hạn như khởi động, dừng và quản lý container.
Báo cáo trạng thái của node và các container đang chạy cho control plane.
Giám sát sức khỏe của container và thực hiện các hành động khắc phục sự cố khi cần thiết.
Giao tiếp với container runtime để thực thi các tác vụ container.
kube-proxy:
Cung cấp dịch vụ cân bằng tải và chuyển tiếp lưu lượng truy cập đến các pod phù hợp.
Quản lý mạng cho các pod trên worker node.
Cung cấp dịch vụ cân bằng tải để phân phối lưu lượng truy cập đến các pod.
Đảm bảo rằng các pod có thể giao tiếp với nhau và với các dịch vụ bên ngoài.
Container runtime:
Chịu trách nhiệm thực thi và quản lý các container trên node, ví dụ như Docker hoặc containerd.
Chịu trách nhiệm thực thi và quản lý các container trên worker node.
Cung cấp môi trường để khởi động, chạy và dừng các container.
Quản lý tài nguyên CPU, RAM và lưu trữ cho các container.
Phổ biến container runtime bao gồm Docker và containerd
3. Pods:
Là đơn vị cơ bản triển khai trong Kubernetes, đại diện cho một nhóm container được nhóm lại với nhau và được triển khai cùng nhau.
Mỗi pod có thể chứa một hoặc nhiều container và có thể có các tài nguyên riêng như CPU, RAM và bộ nhớ.
Là đơn vị triển khai cơ bản trong Kubernetes, đại diện cho một nhóm container được nhóm lại với nhau và được triển khai cùng nhau.
Mỗi pod có thể chứa một hoặc nhiều container và có thể có các tài nguyên riêng như CPU, RAM và bộ nhớ.
Pod được tạo ra từ template deployment hoặc replication controller.
Pod có thể được tạo thủ công bằng kubectl run hoặc kubectl create.
Pod có vòng đời riêng và có thể bị hủy thủ công hoặc tự động bởi Kubernetes.
4. Labels và Selectors:
Được sử dụng để gán metadata cho các pod, service và các đối tượng Kubernetes khác.
Selector cho phép chọn các đối tượng dựa trên nhãn của chúng để thực hiện các thao tác như áp dụng nhãn, xóa hoặc triển khai pod.
5. Services:
Định nghĩa cách các ứng dụng giao tiếp với nhau trong cụm Kubernetes.
Cung cấp một lớp trừu tượng cho các pod, cho phép người dùng truy cập pod bằng tên dịch vụ thay vì địa chỉ IP cụ thể.
Có thể sử dụng các loại dịch vụ khác nhau như ClusterIP, NodePort và LoadBalancer.
6. Deployment:
Tự động hóa việc tạo, quản lý và mở rộng các pod.
Cho phép người dùng xác định số lượng pod mong muốn cho một ứng dụng và Kubernetes sẽ đảm bảo số lượng pod đó được duy trì.
7. Persistent Volumes:
Cung cấp dung lượng lưu trữ bền vững cho các container.
Cho phép các container lưu trữ dữ liệu một cách lâu dài, ngay cả khi pod bị hủy hoặc di chuyển sang node khác.
8. ConfigMaps và Secrets:
Cung cấp cách thức an toàn để lưu trữ và quản lý dữ liệu cấu hình và bí mật cho các ứng dụng.
ConfigMaps được sử dụng để lưu trữ dữ liệu cấu hình dạng văn bản, trong khi Secrets được sử dụng để lưu trữ thông tin nhạy cảm như mật khẩu và token truy cập.
9. Networking:
Kubernetes cung cấp các tính năng mạng tích hợp để kết nối các pod và dịch vụ với nhau.
Hỗ trợ các plugin mạng khác nhau như Flannel và Calico để cung cấp khả năng kết nối mạng linh hoạt.
10. Monitoring và Logging:
Kubernetes cung cấp các công cụ tích hợp để theo dõi và ghi nhật ký hiệu suất của ứng dụng và cụm.
Cho phép người dùng thu thập dữ liệu về việc sử dụng CPU, RAM, lưu lượng truy cập mạng và các số liệu khác để khắc phục sự cố và tối ưu hóa hiệu suất.
Quá trình xử lý yêu cầu:
Người dùng gửi yêu cầu đến API server:
- Người dùng có thể sử dụng kubectl, API REST hoặc UI để gửi yêu cầu đến API server.
API server xử lý yêu cầu:
- API server xác thực yêu cầu, ủy quyền truy cập và cập nhật trạng thái mong muốn cho các pod, service hoặc các đối tượng Kubernetes khác.
API server gửi yêu cầu đến kube-scheduler:
- Kube-scheduler chọn worker node phù hợp nhất để chạy pod dựa trên các tiêu chí như dung lượng tài nguyên sẵn có, yêu cầu affinity và anti-affinity, và trạng thái hiện tại của node.
Kube-scheduler gửi yêu cầu đến kubelet trên worker node đã chọn:
- Kubelet nhận yêu cầu từ kube-scheduler và giao tiếp với container runtime để khởi động pod trên worker node.
Container runtime khởi động pod:
- Container runtime tải xuống hình ảnh container từ registry, giải nén hình ảnh và khởi động container.
Kube-proxy cập nhật quy tắc định tuyến mạng:
- Kube-proxy cập nhật quy tắc định tuyến mạng để cho phép lưu lượng truy cập đến pod.
Pod bắt đầu xử lý yêu cầu:
- Pod khởi động các container bên trong và bắt đầu xử lý yêu cầu từ người dùng.