Kubernetes là một công cụ quản lý container mã nguồn mở, tự động hóa việc deploy container, scaling container và load balancing container.
- Được viết trên Golang, có một cộng đồng lớn vì được phát triển đầu tiên bởi Google và sau đó là CNCF
- Có thể nhóm nhiều container thành một đơn vị logic để quản lý và deploy chúng dễ dàng.
Note: Kubernetes không phải là một nền tảng container. Nó là một giải pháp quản lý multi container
Kiến trúc Kubernetes có các thành phần chính sau:
- Master nodes
- Worker/Slave nodes
- Distributed key-value store(etcd)
Là điểm vào cho tất cả các nhiệm vụ quản trị chịu trách nhiệm quản lý Kubernetes cluster. Có thể có nhiều hơn một master node trong cluster để kiểm tra khả năng chịu lỗi. Nhiều hơn một master node đặt hệ thống ở chế độ high availability, trong đó một trong số chúng sẽ là node chính mà se thực hiện tất cả các tác vụ.
Để quản lý trạng thái cluster, nó sử dụng etcd
trong đó tất cả các master node kết nối với nó.
Như bạn có thể thấy trong sơ đồ trên, master node bao gồm 4 thành phần:
API server
- Thực hiện tất cả các tác vụ quản trị thông qua API server trong master node
- Cac lenh REST được gửi đến API server để xác thực và xử lý các yêu cầu.
- Sau khi yêu cầu, trạng thái kết quả của cluster đựợc lưu trữ trong
distributed key-value store
Scheduler
- Scheduler lập lịch các tác vụ cho các worker node. Nó lưu trữ thông tin sử dụng tài nguyên cho mỗi worker node
- Nó lên lịch cho công việc dưới dạng Pods và Services
- Trước khi lên lịch cho các tác vụ, scheduler cũng phải tính đến chất lượng của các service yêu cầu, dữ liệu local,...
Controller manager
- Còn được gọi là
controllers
- Nó là một daemon điều chỉnh Kubernetes cluster quản lý các vòng điều khiển khác nhau.
- Nó cũng thực hiện các chức năng vòng đời như tạo không gian tên và vòng đời, thu gom rác sự kiện, thu gom rác các node...
- Về cơ bản,
controllers
theo dõi trạng thái mong muốn của các đối tượng mà nó quản lý và theo dõi trạng thái hiện tại của chúng thông qua API server. Nếu trạng thái hiện tại của các đối tượng mà nó quản lý không đáp ứng trạng thái mong muốn, thì vòng điều khiển sẽ thực hiện các bước khắc phục để đảm bảo rằng trạng thái hiện tại giống với trạng thái mong muốn.
ETCD là gì
- etcd là distributed key-value store lưu trữ trạng thái cluster
- Nó có thể là một phần của Kubernetes master, hoặc nó có thể được cấu hình bên ngoài.
- etcd được viết bằng ngôn ngữ Go. Trong Kubernetes, ngoài việc lưu trữ trạng thái cluster, nó còn được sử dụng để lưu trữ các chi tiết cấu hình như subnets, ConfigMaps, Secrets...
Nó là một máy chủ vật lý hoặc bạn có thể nói một VM chạy các ứng dụng bằng Pods được điều khiển bởi master node. Trên một máy chủ vật lý, các pod được lên lịch. Để truy cập ứng dụng từ bên ngoài, chúng ta cần kết nối tới các node.
Worker node bao gồm các thành phần sau:
Container runtime:
- Để chạy và quản lý vòng đời của container, chúng ta cần
container runtime
trên các worker node - Đôi khi, Docker cũng được gọi là
container runtime
, nhưng chính xác hơn, Docker là một nền tảng sử dụng containers nhưcontainer runtime
Kubelet:
- Nó là một agent giao tiếp với Master node và thực thi các trên các node hoặc worker node. Nó nhận được các thông số kỹ thuật của Pod thông qua API server và thực thi container liên kết với Pod và đảm bảo rằng các container chứa Pod đó đang chaỵ và healthy.
Kube-proxy:
- Kube-proxy chạy trên mỗi node để xử lý sub-netting host và đảm bảo rằng các services luôn sẵn sàng cho bên ngoài
- Nó phục vụ như một network proxy và load balancing cho một service trên một worker node và quản lý định tuyến mạng cho các gói TCP và UDP
- Đó là network proxy chạy trên mỗi worker node và lắng nghe API server cho mỗi lần tạo/xóa Service
- Đối với mỗi Service, kube-proxy sẽ thiết lập các routes để có thể tiếp cận với nó.
Reference document https://medium.com/edureka/kubernetes-architecture-c43531593ca5