Kubernetes được xây dựng với 3 thành phần chính là Master, Node và các Addons, cụ thể như thế nào? Chúng ta sẽ cùng nhau tìm hiểu trong bài viết này các bạn nhé!
Đầu tiên là về thành phần Master.
Thành phần này có thể xem là trái tim của Kubernetes, được xây dựng để quản lý tất cả các hoạt động, thao tác với các containers trong cluster. Nó bao gồm API Server (kube-apiserver), etcd, Scheduler (kube-scheduler), Controller Manager (kube-controller-manager) và Cloud Controller Manager (cloud-controller-manager).
API Server cung cấp các RESTful APIs cho các thành phần khác trong Kubernetes Master. Chúng ta có thể lấy thông tin về một resource trong Kubernetes, theo dõi sự thay đổi của chúng hoặc tạo mới một resource sử dụng các APIs này. API Server lưu thông tin của các đối tượng trong Kubenetes vào etcd.
etcd là một hệ thống phân tán, mã nguồn mở, dùng để lưu trữ các giá trị key-value. Kubernetes dùng etcd để lưu, cập nhập và nhân bản các data của nó.
Scheduler có nhiệm vụ là determine node nào trong cluster có thể sử dụng để chạy các pods.
Controller Manager là tập hợp các vòng điều khiển quan sát các sự thay đổi từ API Server để make sure rằng cluster luôn ở trạng thái mà nó mong muốn.
Cloud Controller Manager được sử dụng để tương tác với các Cloud Provider.
Tiếp theo là về thành phần Node.
Thành phần Node được xây dựng để chạy trên tất cả các node của Kubenetes cluster, chịu trách nhiệm quản lý và báo cáo tình trạng của các Pods cho Kubernetes Master.
Để làm được điều này, trong mỗi node, chúng ta sẽ có một agent tên là kubelet, chịu trách nhiệm quản lý và báo cáo các hoạt động của node về API Server của Kubernetes Master. kubelet sẽ chạy các container sử dụng container runtime như Docker. Nó sẽ không quản lý các container không được tạo bởi Kubernetes.
Một thành phần nữa trong Node đó là kube-proxy đảm nhiệm vai trò routing giữa service và các pods.
Ở mỗi node, chúng ta cũng sẽ có các Container Runtime đảm nhận việc chạy các containers. Kubernetes hỗ trợ một vài container runtime như: Docker, rkt, …
Thành phần cuối cùng của Kubernetes là các Addons.
Thành phần này là các pods và service hiện thực các chức năng của một cluster như DNS Server, Web UI (Dashboard) hỗ trợ quản lý Kubernetes cluster bằng giao diện, Container Resource Monitoring (record các thông tin về hệ thống vào database và cho phép chúng ta phân tích các thông tin đó sử dụng UI) và Cluster-level Logging (lưu log của các container để chúng ta có thể xem thông tin log của chúng).
Mối tương quan giữa Kubernetes Master và Kubernetes Node có thể biễu diễn qua hình vẽ sau:
Khi chúng ta thực hiện một câu lệnh sử dụng công cụ kubectl là có nghĩa kubectl sẽ gửi một request tới API Server, API Server sẽ chịu trách nhiệm response về cho kubectl, nó sẽ push và pull các thông tin từ etcd. Tuỳ theo yêu cầu của request, ví dụ nếu các bạn muốn chạy một pod thì scheduler sẽ chịu trách nhiệm xác định node nào sẽ thực hiện yêu cầu này. Controller Manager sẽ giám sát tác vụ và report nếu bất kỳ vấn đề gì xảy ra. API Server sẽ lấy log từ các pods thông qua kubelet.