Các thành phần của Kubernetes

Khi bạn triển khai Kubernetes, bạn sẽ nhận được một Cluster (cụm).

Một Cluster Kubernetes bao gồm một tập hợp các máy worker, được gọi là Node, chạy các ứng dụng được đóng gói. Mỗi Cluster có ít nhất một Node.

(Các) Node lưu trữ các Pod - là các thành phần của application workload. Các Control Plane quản lý các Node và các Pod trong Cluster. Trong môi trường production, Control Plane thường chạy trên nhiều máy tính và một Cluster thường chạy nhiều Node, mang lại khả năng chịu lỗi và tính sẵn sàng cao.

Đây là sơ đồ của một cụm Kubernetes với tất cả các thành phần được gắn với nhau.

Các thành phần của Kubernetes

Các thành phần Control Plane

Các thành phần Control Plane đưa ra các quyết định chung về Cluster (ví dụ: lập lịch), cũng như phát hiện và phản hồi các sự kiện của Cluster (ví dụ: khởi động một Pod mới khi trường replicas của một triển khai không được thỏa mãn).

Các thành phần Control Plane có thể được chạy trên bất kỳ máy nào trong Cluster. Tuy nhiên, để đơn giản, thiết lập tập lệnh thường khởi động tất cả các thành phần Control Plane trên cùng một máy và không chạy các container của người dùng trên máy này.

kube-apiserver

API Server là một thành phần của Control Plane, nó đưa ra các Kubernetes API. API Server là giao diện người dùng cho Control Plane Kubernetes.

Triển khai chính của máy chủ Kubernetes API là kube-apiserver. kube-apiserver được thiết kế để mở rộng quy mô theo chiều ngang — nghĩa là, nó mở rộng quy mô bằng cách triển khai nhiều phiên bản hơn. Bạn có thể chạy một số phiên bản kube-apiserver và cân bằng lưu lượng truy cập giữa các phiên bản đó.

etcd

Kho lưu trữ giá trị khóa nhất quán và có tính khả dụng cao được sử dụng làm kho dự phòng của Kubernetes cho tất cả dữ liệu cụm.

Nếu cụm Kubernetes của bạn sử dụng etcd làm nơi lưu trữ sao lưu, hãy đảm bảo rằng bạn có kế hoạch sao lưu cho những dữ liệu đó.

Bạn có thể tìm thấy thông tin chuyên sâu về etcd trong tài liệu chính thức.

kube-scheduler

kube-scheduler là thành phần của Control Plane theo dõi những Pod mới được tạo nhưng không được chỉ định Node và chọn một Node để chúng chạy.

Các yếu tố được tính đến để đưa ra quyết định lập lịch bao gồm: yêu cầu tài nguyên cá nhân và tập thể, các ràng buộc về phần cứng / phần mềm / chính sách, thông số kỹ thuật về mối quan hệ và chống mối quan hệ, vị trí dữ liệu, can thiệp giữa khối lượng công việc và thời hạn.

kube-controller-manager

kube-controller-manager là thành phần của Control Plane chạy các bộ điều khiển quy trình.

Về mặt logic, mỗi bộ điều khiển 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 duy nhất 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: Kiểm soát các tác vụ được lập lịch, sau đó tạo các Pod để chạy các tác vụ đó đến khi hoàn thành.
  • Endpoints controller: Điền khiển đối tượng Điểm cuối (nghĩa là tham gia Dịch vụ & Nhóm).
  • Service Account & Token controllers: Tạo tài khoản mặc định và mã thông báo truy cập API cho không gian tên mới.

cloud-controller-manager

Một thành phần Control Plane nhúng logic điều khiển dành riêng cho đám mây. Trình quản lý bộ điều khiển đám mây cho phép bạn liên kết cụm của mình với API của nhà cung cấp đám mây và tách các thành phần tương tác với nền tảng đám mây đó khỏi các thành phần chỉ tương tác với cụm của bạn.

Cloud-controller-manager chỉ chạy các bộ điều khiển dành riêng cho nhà cung cấp dịch vụ đám mây của bạn. Nếu bạn đang chạy Kubernetes tại cơ sở của riêng mình hoặc trong môi trường học tập bên trong PC của riêng bạn, cụm không có trình quản lý bộ điều khiển đám mây.

Cũng như với kube-controller-manager, cloud-controller-manager kết hợp một số vòng điều khiển độc lập về mặt logic thành một tệp nhị phân duy nhất mà bạn chạy như một quy trình duy nhất. Bạn có thể chia tỷ lệ theo chiều ngang (chạy nhiều hơn một bản sao) để cải thiện hiệu suất hoặc để giúp tăng khả năng chịu lỗi.

Các bộ điều khiển sau có thể có các phần phụ thuộc của nhà cung cấp dịch vụ đám mây:

  • Node controller: Để kiểm tra nhà cung cấp đám mây để xác định xem một Node đã bị xóa trong đám mây sau khi nó ngừng phản hồi hay chưa.
  • Route controller: Để thiết lập định tuyến trong cơ sở hạ tầng đám mây cơ bản.
  • Service controller: Để tạo, cập nhật và xóa bộ cân bằng tải của nhà cung cấp dịch vụ đám mây.

Các thành phần Node

Các thành phần Node chạy trên mọi Node, duy trì các nhóm đang chạy và cung cấp môi trường runtime cho Kubernetes.

kubelet

Một tác nhân chạy trên mỗi Node trong cụm. Nó đảm bảo rằng các container đang chạy trong một Pod.

Kubelet lấy một tập hợp các PodSpec được cung cấp thông qua các cơ chế khác nhau và đảm bảo rằng các vùng chứa được mô tả trong các PodSpec đó đang chạy và hoạt động tốt. Kubelet không quản lý các vùng chứa không được tạo bởi Kubernetes.

kube-proxy

kube-proxy là một proxy mạng chạy trên mỗi Node trong cụm của bạn, triển khai một phần của khái niệm Kubernetes Service.

kube-proxy duy trì các quy tắc mạng trên các Node. Các quy tắc mạng này cho phép giao tiếp mạng với Pod của bạn từ các phiên mạng bên trong hoặc bên ngoài cụm của bạn.

kube-proxy sử dụng lớp lọc gói của hệ điều hành nếu có và nó có sẵn. Nếu không, kube-proxy sẽ tự chuyển tiếp lưu lượng.

Container runtime

Container runtime là phần mềm chịu trách nhiệm chạy các container.

Kubernetes hỗ trợ một số container runtime như: Docker, containerd, CRI-O và bất kỳ triển khai nào của Kubernetes CRI (CRI - Container Runtime Interface - Giao diện thời gian chạy vùng chứa) .

Addons

Addon sử dụng tài nguyên Kubernetes (DaemonSet, Deployment, v.v.) để triển khai các tính năng cụm. Bởi vì chúng cung cấp các tính năng cấp cụm, các tài nguyên vùng chứa tên cho các phần bổ trợ thuộc về không gian tên kube-system.

Addon mở rộng chức năng của Kubernetes. Dưới đây liệt kê một số tiện ích bổ sung có sẵn.

DNS

Trong khi các addon khác không được yêu cầu nghiêm ngặt, tất cả các cụm Kubernetes phải có Cluster DNS, vì nhiều ví dụ dựa vào nó.

Cluster DNS là một máy chủ DNS, cùng với (các) máy chủ DNS khác trong môi trường của bạn, phục vụ các bản ghi DNS cho các dịch vụ Kubernetes.

Các container được chạy tự động bởi Kubernetes bao gồm máy chủ DNS này trong các tìm kiếm DNS của chúng.

Web UI (Dashboard)

Dashboard là một giao diện người dùng dựa trên web cho các cụm Kubernetes. Nó cho phép người dùng quản lý và khắc phục sự cố các ứng dụng đang chạy trong cụm, cũng như chính cụm.

Container Resource Monitoring

Container Resource Monitoring giám sát tài nguyên container. Nó ghi lại các số liệu chuỗi thời gian chung về container trong cơ sở dữ liệu trung tâm và cung cấp giao diện người dùng để duyệt dữ liệu đó.

Cluster-level Logging

Cluster-level Logging có trách nhiệm lưu nhật ký của các container tới một nơi lưu trữ log trung tâm với giao diện tìm kiếm / duyệt.

KubernetesDevOps
Bài Viết Liên Quan:
Sổ tay Kubernetes: làm việc với Ingress Controller (p2)
Trung Nguyen 30/05/2021
Sổ tay Kubernetes: làm việc với Ingress Controller (p2)

Trong phần này, bạn sẽ tìm hiểu cách sử dụng Secret, ConfigMap để lưu trữ thông tin cấu hình, phát hành các bản cập nhật và xử lý sự cố trong Kubernetes.

Sổ tay Kubernetes: làm việc với Ingress Controller (p1)
Trung Nguyen 30/05/2021
Sổ tay Kubernetes: làm việc với Ingress Controller (p1)

Trong hướng dẫn này, bạn sẽ tìm hiểu về Ingress Controller và cách sử dụng NGINX Ingress Controller để cấu hình định tuyến trong Kubernetes.

Sổ tay Kubernetes: Triển khai ứng dụng đa container (p3)
Trung Nguyen 30/05/2021
Sổ tay Kubernetes: Triển khai ứng dụng đa container (p3)

Ở phần 3 này, chúng ta sẽ tìm hiểu cách cung cấp động Persistent Volume, kết nối volume với pod và kết nối các thành phần trong cụm với nhau.

Sổ tay Kubernetes: Triển khai ứng dụng đa container (p2)
Trung Nguyen 30/05/2021
Sổ tay Kubernetes: Triển khai ứng dụng đa container (p2)

Ở phần 2 này, chúng ta sẽ tìm cách khắc phục những lỗi xảy ra khi triển khai. Chúng ta cũng tìm hiểu thêm về Persistent Volume, Persistent Volume Claim.