HomeBlogKubernetes architecture là gì? Tổng quan về kiến trúc của Kubernetes

Kubernetes architecture là gì? Tổng quan về kiến trúc của Kubernetes

Locker blog reading time20 phút để đọc
Locker Avatar

anhtp

17/07/2024
Locker logo social

Winston is a highly experienced digital marketing professional, specializing in Cybersecurity, IT services, and Software as a Service (SaaS).

Reading Time: 20 minutes

Nắm vững kiến trúc Kubernetes (Kubernetes architecture) là điều cần thiết để tận dụng tối đa sức mạnh và sự linh hoạt của nó. Bài viết này sẽ cung cấp cho bạn tổng quan toàn diện về kiến trúc Kubernetes, bao gồm các thành phần chính, chức năng và cách thức hoạt động để quản lý các container một cách hiệu quả.

Kubernetes là gì?

Kubernetes, thường được gọi tắt là k8s, là một nền tảng mã nguồn mở được sử dụng để tự động hóa việc triển khai, mở rộng và quản lý các ứng dụng được đóng gói trong container. Nó được ví như “người lái tàu” hoặc “hoa tiêu” cho các container, giúp đơn giản hóa việc vận hành các ứng dụng phức tạp trên quy mô lớn.

Kubernetes architecture

Kiến trúc của Kubernetes

Hình ảnh mô tả kiến trúc Kubernetes một cách tổng quan, bao gồm các thành phần chính và tương tác giữa chúng.

Thành phần chính:

  1. Cluster: Đại diện cho toàn bộ hệ thống Kubernetes, bao gồm nhiều node kết nối với nhau.
  2. Control Plane: Bộ não của Kubernetes, chịu trách nhiệm quản lý trạng thái và vận hành cụm. Bao gồm:
    • kube-apiserver: Tiếp nhận yêu cầu, xử lý logic và điều phối các tác vụ cho Control Plane.
    • kube-scheduler: Phân bổ workload mới cho các node worker phù hợp.
    • kube-controller-manager: Chạy các controller để điều tiết trạng thái cụm.
    • etcd: Kho lưu trữ dữ liệu dạng key-value phân tán, lưu trữ thông tin cấu hình và trạng thái của cụm.
  3. Worker Node: Chạy các workload (pod) của ứng dụng. Bao gồm:
    • kubelet: Quản lý lifecycle của pod trên node.
    • kube-proxy: Cung cấp dịch vụ mạng cho pod.
    • Container Runtime: Chạy các container (đơn vị thực thi ứng dụng) trong pod.

Kiến trúc của Kubernetes

Kiến trúc Kubernetes được thiết kế để cung cấp một nền tảng linh hoạt, mở rộng và dễ sử dụng cho việc triển khai và quản lý các ứng dụng container hóa. Ngoài các thành phần chính trên, cùng khám phá chi tiết về nhiều thành phần khác trong kiến trúc Kubernetes.

Nội dung devops không nên bỏ qua: Hướng dẫn kiểm thử tự động với Selenium IDE

Nút master

Nút Master, còn được gọi là Control Plane, là trung tâm điều khiển của cụm Kubernetes, chịu trách nhiệm quản lý trạng thái và vận hành toàn bộ hệ thống. Nó đóng vai trò như bộ não, đưa ra quyết định và điều phối các tác vụ để đảm bảo Kubernetes hoạt động trơn tru và hiệu quả.

Vai trò then chốt của Nút Master:

  • Quản lý trạng thái cụm: Lưu trữ thông tin cấu hình chi tiết về tất cả các thành phần trong cụm, bao gồm pods, services, deployments, nodes v.v.
  • Lên lịch và triển khai ứng dụng: Quyết định pod nào nên chạy trên node nào, đảm bảo tài nguyên được sử dụng hiệu quả và ứng dụng luôn sẵn sàng phục vụ.
  • Giám sát và tự phục hồi: Theo dõi trạng thái sức khỏe của các thành phần, tự động khởi động lại các pod bị lỗi và khắc phục sự cố để đảm bảo tính khả dụng cao.
  • Cung cấp API: Tiếp nhận yêu cầu từ người dùng và các ứng dụng thông qua giao diện API, CLI hoặc web UI, cho phép quản lý và tương tác với Kubernetes một cách linh hoạt.

Đảm bảo tính sẵn sàng cao:

Do đóng vai trò quan trọng, việc Nút Master gặp sự cố có thể dẫn đến gián đoạn dịch vụ và ảnh hưởng nghiêm trọng đến hoạt động kinh doanh. Để đảm bảo tính sẵn sàng cao, Kubernetes sử dụng mô hình High Availability (HA):

  • Nhân bản Nút Master: Triển khai nhiều bản sao Nút Master trong cụm, đảm bảo luôn có ít nhất một nút hoạt động khi có sự cố xảy ra.
  • Đồng bộ dữ liệu: Duy trì sự đồng bộ dữ liệu giữa các Nút Master để đảm bảo nhất quán trạng thái cụm.
  • Khả năng tự phục hồi: Tự động khởi động lại Nút Master bị lỗi và chuyển giao vai trò quản lý sang nút khác.

etcd: Lưu trữ trạng thái tập trung:

etcd đóng vai trò là kho lưu trữ dữ liệu dạng key-value phân tán, lưu trữ tất cả thông tin cấu hình và trạng thái của cụm Kubernetes. Nó đảm bảo dữ liệu được truy cập và cập nhật một cách nhất quán bởi tất cả các thành phần trong hệ thống.

Lựa chọn triển khai etcd:

etcd có thể được triển khai theo 2cách:

  • Stacked topology: Cài đặt etcd trực tiếp trên Nút Master. Giải pháp đơn giản nhưng có thể dẫn đến mất dữ liệu nếu Nút Master bị lỗi.
  • External topology: Cài đặt etcd trên một máy chủ riêng biệt. Tăng khả năng bảo vệ dữ liệu nhưng yêu cầu thêm phần cứng và cấu hình phức tạp hơn.

Một nút master có thể có những thành phần control plane như sau:

  1. API Server (máy chủ API)

Kube-api-server, còn được gọi là API Server, là thành phần cốt lõi của Control Plane, đóng vai trò như trung tâm điều khiển cho toàn bộ cụm Kubernetes. Nó chịu trách nhiệm tiếp nhận yêu cầu, xử lý logic và điều phối các tác vụ để quản trị và vận hành hệ thống.

Chức năng chính của Kube-api-server:

  • Tiếp nhận yêu cầu: Nhận yêu cầu RESTful từ người dùng, các tác vụ khác trong Control Plane hoặc các ứng dụng bên ngoài thông qua giao diện API.
  • Xác thực và xử lý: Xác minh tính hợp lệ của yêu cầu, giải mã dữ liệu và thực hiện các hành động cần thiết dựa trên yêu cầu.
  • Truy cập và cập nhật dữ liệu: Đọc trạng thái hiện tại của cụm Kubernetes từ kho lưu trữ dữ liệu etcd và cập nhật trạng thái mới sau khi xử lý yêu cầu thành công.
  • Giao diện trung gian: Hoạt động như điểm truy cập trung tâm cho tất cả các tác vụ quản trị, cho phép các thành phần khác trong Control Plane tương tác với trạng thái của cụm.
  • Cấu hình và mở rộng: Dễ dàng cấu hình và tùy chỉnh để đáp ứng nhu cầu cụ thể. Hỗ trợ mở rộng theo chiều ngang hoặc bổ sung API Server phụ tùy chỉnh để tăng hiệu suất và tính linh hoạt.

Điểm nổi bật:

  • Tính trung tâm: Kube-api-server là điểm liên lạc duy nhất cho các tác vụ quản trị, đảm bảo tính nhất quán và đồng bộ dữ liệu trong toàn cụm.
  • Khả năng mở rộng: Hỗ trợ mở rộng theo chiều ngang bằng cách triển khai nhiều bản sao Kube-api-server, đáp ứng nhu cầu xử lý khối lượng lớn yêu cầu.
  • Tính linh hoạt: Dễ dàng cấu hình và tùy chỉnh để phù hợp với các trường hợp sử dụng cụ thể, đồng thời hỗ trợ bổ sung API Server phụ để tăng hiệu quả.
  • Tính bảo mật: Cung cấp các cơ chế xác thực và ủy quyền mạnh mẽ để bảo vệ cụm Kubernetes khỏi các truy cập trái phép.
  1. Scheduler (Bộ lập lịch)

Kube-scheduler, còn được gọi là Scheduler, là thành phần quan trọng trong Control Plane, chịu trách nhiệm phân bổ các đối tượng workload mới, chẳng hạn như pods, cho các nút worker phù hợp trong cụm Kubernetes. Quá trình lập lịch này đảm bảo tối ưu hóa việc sử dụng tài nguyên, cân bằng tải và đáp ứng yêu cầu hiệu suất cho các ứng dụng.

Cách thức hoạt động của Kube-scheduler:

  1. Thu thập dữ liệu: Kube-scheduler thu thập thông tin về trạng thái hiện tại của cụm Kubernetes từ API Server. Dữ liệu này bao gồm trạng thái sử dụng tài nguyên của từng nút worker, yêu cầu của các đối tượng workload mới, các ràng buộc và yêu cầu QoS (Quality of Service).
  2. Lọc các nút ứng cử viên: Dựa trên các predicate (tiêu chí đánh giá), Kube-scheduler lọc ra các nút worker phù hợp để chạy workload mới. Các predicate này có thể dựa trên các yếu tố như dung lượng CPU, bộ nhớ, dung lượng lưu trữ, nhãn (label) và taint của nút.
  3. Chọn nút tốt nhất: Sau khi lọc ra các nút ứng cử viên, Kube-scheduler sử dụng các thuật toán đánh giá (scoring) để chọn nút phù hợp nhất để chạy workload mới. Các thuật toán này có thể cân nhắc các yếu tố như hiệu suất, độ ổn định, tính đồng bộ dữ liệu và các yêu cầu QoS.
  4. Giao tiếp với API Server: Kube-scheduler thông báo kết quả lựa chọn nút cho API Server. API Server sau đó cập nhật trạng thái của workload và gửi thông tin đến kubelet trên nút được chọn để triển khai workload.

Tính năng nổi bật của Kube-scheduler:

  • Khả năng cấu hình cao: Hỗ trợ nhiều scheduling policies, plugins và profiles để đáp ứng nhu cầu đa dạng của người dùng.
  • Hỗ trợ bộ lập lịch tùy chỉnh: Cho phép người dùng phát triển và triển khai các bộ lập lịch riêng theo yêu cầu cụ thể.
  • Hiệu quả và tối ưu hóa: Sử dụng các thuật toán tiên tiến để chọn nút tốt nhất cho workload, đảm bảo hiệu suất và sử dụng tài nguyên hiệu quả.
  • Tính linh hoạt: Tích hợp với nhiều hệ thống và công cụ khác trong môi trường Kubernetes.
  1. Controller Managers (Trình quản lý các controller)

Controller Manager là một tập hợp các thành phần quan trọng trong Control Plane, được triển khai trên nút Master của cụm Kubernetes. Chức năng chính của nó là vận hành các controller, những “bộ não nhỏ” liên tục theo dõi và điều chỉnh trạng thái của cụm để đảm bảo hoạt động trơn tru và hiệu quả.

Hoạt động của Controller Manager:

  1. Quan sát trạng thái: Controller Manager liên tục thu thập thông tin từ API Server về trạng thái hiện tại của cụm, bao gồm trạng thái của các pod, service, node, v.v.
  2. So sánh với trạng thái mong muốn: Controller Manager so sánh trạng thái hiện tại với trạng thái mong muốn, được mô tả trong objects’ configuration data (dữ liệu cấu hình đối tượng). Dữ liệu này bao gồm số lượng pod mong muốn, endpoints, service accounts, API access tokens, v.v.
  3. Sửa lỗi và điều chỉnh: Nếu phát hiện ra sự khác biệt giữa trạng thái hiện tại và mong muốn, Controller Manager sẽ thực hiện các hành động sửa lỗi cần thiết để đưa cụm về trạng thái mong muốn. Ví dụ: khởi động lại pod bị lỗi, tạo thêm pod mới, cập nhật endpoints, v.v.
  4. Lặp lại: Quá trình quan sát, so sánh và sửa lỗi diễn ra liên tục, đảm bảo trạng thái của cụm luôn được cập nhật và chính xác.

Các loại Controller chính:

  • Kube-controller-manager: Chạy các controller mặc định của Kubernetes, bao gồm:
    • Node Controller: Quản lý việc thêm, xóa và cập nhật các node trong cụm.
    • Replication Controller: Đảm bảo số lượng pod mong muốn luôn được duy trì.
    • Endpoints Controller: Cập nhật endpoints cho các service, giúp các pod có thể truy cập lẫn nhau.
    • Service Account Controller: Tạo và quản lý service accounts cho các pod.
    • Token Controller: Cấp và quản lý API access tokens cho các pod.
  • Cloud-controller-manager: Chạy các controller tích hợp với các nhà cung cấp dịch vụ đám mây (cloud provider), bao gồm:
    • Node Controller: Quản lý việc thêm, xóa và cập nhật các node trong cụm trên cloud provider.
    • Cloud Storage Controller: Quản lý các container dữ liệu được cung cấp bởi cloud provider.
    • Cloud Load Balancing Controller: Quản lý quá trình cân bằng tải và điều hướng lưu lượng truy cập giữa các pod.

Lợi ích của Controller Manager:

  • Tự động hóa: Giúp tự động hóa các quy trình quản lý cụm Kubernetes, giảm thiểu sự can thiệp thủ công.
  • Hiệu quả: Đảm bảo trạng thái mong muốn của cụm luôn được duy trì, giúp các ứng dụng hoạt động trơn tru và hiệu quả.
  • Khả năng mở rộng: Hỗ trợ nhiều loại controller khác nhau, đáp ứng nhu cầu đa dạng của người dùng.
  • Tích hợp: Tích hợp với các cloud provider, giúp tận dụng tối đa các dịch vụ đám mây.
  1. Data Store (Kho dữ liệu)

etcd là một kho lưu trữ dữ liệu dạng key-value phân tán, có độ nhất quán cao, được sử dụng để đảm bảo tính bền bỉ cho trạng thái cụm Kubernetes. Nó đóng vai trò trung tâm trong việc lưu trữ và quản lý dữ liệu cấu hình, giúp Kubernetes hoạt động hiệu quả và ổn định.

Đặc điểm nổi bật của etcd:

  • Tính nhất quán cao: Dữ liệu được ghi vào etcd theo thứ tự, đảm bảo không xảy ra ghi đè dữ liệu.
  • Bền bỉ: Dữ liệu được lưu trữ an toàn, có khả năng phục hồi sau lỗi phần cứng hoặc phần mềm.
  • Khả năng mở rộng: Hỗ trợ triển khai nhiều bản sao etcd để tăng hiệu suất và khả năng chịu lỗi.
  • Dễ dàng sử dụng: Cung cấp giao diện dòng lệnh (CLI) và API để truy cập và quản lý dữ liệu.

Vai trò của etcd trong Kubernetes:

  • Lưu trữ trạng thái cụm: Lưu trữ thông tin về các pod, service, node, v.v., giúp Kubernetes theo dõi trạng thái hiện tại của cụm.
  • Quản lý dữ liệu cấu hình: Lưu trữ dữ liệu cấu hình cho các pod, service, deployment, v.v., giúp Kubernetes triển khai và quản lý các ứng dụng.
  • Hỗ trợ các tính năng khác: Cung cấp dữ liệu cho các tính năng như autoscaling, load balancing, service discovery, v.v.

Cấu hình etcd:

  • Stacked etcd: Cài đặt etcd trực tiếp trên nút master cùng với các thành phần control plane khác. Đây là cấu hình đơn giản nhưng có thể dẫn đến mất dữ liệu nếu nút master bị lỗi.
  • External etcd: Cài đặt etcd trên một máy chủ riêng biệt. Cấu hình này đảm bảo tính cách ly và khả năng phục hồi dữ liệu tốt hơn, nhưng yêu cầu thêm phần cứng và cấu hình phức tạp hơn.

Cấu hình HA (High Availability) cho etcd:

Để đảm bảo tính sẵn sàng cao, etcd có thể được triển khai với nhiều bản sao trong chế độ HA. Các bản sao này hoạt động đồng bộ với nhau và tự động bầu chọn một nút chính (leader) khi có sự cố xảy ra.

Công cụ quản lý etcd:

  • etcdctl: Công cụ CLI để quản lý etcd, bao gồm backup, snapshot, restore, v.v.
  • kubeadm: Công cụ khởi động cụm Kubernetes, hỗ trợ cấu hình etcd stacked hoặc external.

Nút worker

Worker Node đóng vai trò như nhà cung cấp môi trường chạy lý tưởng cho các ứng dụng client trong hệ thống Kubernetes. Nơi đây là điểm đến của vô số microservice đã được container hóa, được cô lập an toàn trong các Pod. Dưới sự điều khiển của các tác vụ control plane từ nút Master, các Pod được lập lịch hợp lý trên Worker Node, đảm bảo tài nguyên tính toán và lưu trữ cần thiết cho việc chạy ứng dụng và kết nối hiệu quả. Pod được xem như đơn vị lập lịch nhỏ nhất trong Kubernetes, bao gồm một hoặc nhiều container được nhóm lại dựa trên logic chung, cho phép khởi chạy, dừng hoặc tái lập lịch như một đơn vị công việc riêng biệt.

Điểm khác biệt của nút woker so với nút Master là lưu lượng mạng trực tiếp. Trên cụm Kubernetes với nhiều Worker Node, lưu lượng mạng giữa các client và ứng dụng được triển khai trên Pod sẽ được xử lý trực tiếp bởi Worker Node, không cần thông qua nút Master.

Một nút worker có các thành phần như sau:

  1. Container Runtime (môi trường chạy của container)

Mặc dù Kubernetes được mệnh danh là “bộ não” điều phối container tài ba, nó lại không thể trực tiếp xử lý các container. Để hoàn thiện vai trò quản lý vòng đời container, Kubernetes cần có sự hỗ trợ của Container Runtime trên mỗi nút mà Pod và các container của nó được lập lịch.

Hiện nay, Kubernetes hỗ trợ nhiều môi trường runtime phổ biến, bao gồm:

  • Docker: Từng là lựa chọn mặc định cho Kubernetes, tuy nhiên hiện tại Kubernetes đã ngừng hỗ trợ chính thức Docker.
  • CRI-O: Đóng vai trò runtime cho Kubernetes, đồng thời hỗ trợ Docker image registries.
  • containerd: Nổi tiếng với sự đơn giản, di động và khả năng tự động hóa đáng kể.
  • frakti: Mang đến runtime dựa trên hypervisor cho Kubernetes.

Lựa chọn Container Runtime phù hợp:

Việc lựa chọn runtime phù hợp phụ thuộc vào nhu cầu và sở thích của bạn. Mỗi runtime sở hữu những ưu điểm riêng:

  • Docker: Dễ sử dụng, cộng đồng rộng lớn.
  • CRI-O: Hỗ trợ Docker image registries, tích hợp tốt với Kubernetes.
  • containerd: Nhẹ nhàng, hiệu quả, tự động hóa cao.
  • frakti: Cung cấp khả năng cách ly cao và bảo mật tốt hơn.
  1. Tác tử nút – kubelet

Kubelet là một tác vụ quan trọng chạy trên mỗi Worker Node, đóng vai trò cầu nối kết nối Control Plane trên Master Node và quản lý các container trực tiếp trên Node.

Nhiệm vụ chính của Kubelet:

  • Nhận thông tin định nghĩa Pod: Kubelet lấy thông tin chi tiết về Pod từ API Server, bao gồm các container cần khởi chạy, tài nguyên cần thiết và các yêu cầu khác.
  • Tương tác với Container Runtime: Kubelet sử dụng Container Runtime Interface (CRI) để giao tiếp với Container Runtime cụ thể được cài đặt trên Node. CRI đóng vai trò như một lớp trừu tượng, giúp Kubelet tương tác với nhiều loại Container Runtime khác nhau mà không cần sửa đổi mã.
  • Khởi chạy và quản lý container: Dựa trên thông tin Pod nhận được, Kubelet sử dụng Container Runtime để khởi chạy các container cần thiết, đảm bảo container hoạt động đúng cách và đáp ứng yêu cầu tài nguyên.
  • Theo dõi trạng thái Pod: Kubelet liên tục theo dõi trạng thái của các Pod đang chạy, bao gồm trạng thái của từng container, tài nguyên sử dụng và các thông tin khác.
  • Báo cáo cho Control Plane: Kubelet gửi thông tin trạng thái Pod và các thông tin relevant khác lên API Server để Control Plane có thể cập nhật và điều chỉnh trạng thái cụm Kubernetes.

Lợi ích của Kubelet:

  • Giảm tải cho Master Node: Kubelet thực hiện nhiều tác vụ quản lý container trực tiếp trên Worker Node, giúp giảm tải cho Master Node và nâng cao hiệu suất tổng thể của cụm.
  • Tăng tính linh hoạt: Nhờ sử dụng CRI, Kubelet có thể tương tác với nhiều loại Container Runtime khác nhau, giúp người dùng dễ dàng lựa chọn và triển khai runtime phù hợp với nhu cầu.
  • Mở rộng khả năng: Kubelet hỗ trợ nhiều tính năng nâng cao như live migration, resource management, và security policies, giúp quản lý container hiệu quả và an toàn hơn.
  1. kubelet – CRI shims

Shim đóng vai trò như cầu nối giữa Kubelet (tác vụ quản lý Pod trên Worker Node) và Container Runtime (phần mềm tạo và quản lý container). Shim cung cấp một giao diện thống nhất cho Kubelet tương tác với nhiều loại Container Runtime khác nhau, giúp Kubernetes hỗ trợ đa dạng runtime mà không cần thay đổi mã Kubelet.

Dưới đây là một số ví dụ về Shim phổ biến:

Dockershim:

  • Sử dụng: Dockershim cho phép Kubelet tương tác với Docker, runtime container phổ biến nhất.
  • Hoạt động: Dockershim sử dụng containerd bên trong để tạo và quản lý container Docker.
  • Lợi ích: Dễ sử dụng, cộng đồng rộng lớn.
  • Hạn chế: Phụ thuộc vào Docker, không hỗ trợ trực tiếp containerd.

cri-containerd:

  • Sử dụng: cri-containerd cho phép Kubelet tương tác trực tiếp với containerd, một runtime container nhẹ và hiệu quả.
  • Hoạt động: cri-containerd sử dụng các API và giao thức của containerd để quản lý container.
  • Lợi ích: Nhẹ, hiệu quả, hỗ trợ nhiều loại container.
  • Hạn chế: Cộng đồng nhỏ hơn so với Docker.

CRI-O:

  • Sử dụng: CRI-O cung cấp shim cho phép Kubelet tương tác với bất kỳ runtime container nào tuân thủ OCI (Open Container Initiative).
  • Hoạt động: CRI-O hỗ trợ trực tiếp runC và Clear Containers, đồng thời có thể tích hợp với các runtime khác tuân theo OCI.
  • Lợi ích: Linh hoạt, hỗ trợ nhiều runtime OCI.
  • Hạn chế: Cấu hình phức tạp hơn so với Dockershim hoặc cri-containerd.

frakti:

  • Sử dụng: frakti cung cấp shim cho phép Kubelet tương tác với Kata Containers, runtime container dựa trên ảo hóa phần cứng.
  • Hoạt động: frakti sử dụng Kata Containers để tạo và quản lý container, mang lại khả năng cách ly và bảo mật cao hơn.
  • Lợi ích: Bảo mật cao, cách ly tốt.
  • Hạn chế: Hiệu suất có thể thấp hơn so với các runtime khác, cấu hình phức tạp hơn.

Lựa chọn Shim phù hợp:

Việc lựa chọn Shim phù hợp phụ thuộc vào nhu cầu và sở thích của bạn. Mỗi Shim đều có ưu và nhược điểm riêng:

  • Dockershim: Dễ sử dụng, cộng đồng lớn, nhưng phụ thuộc vào Docker.
  • cri-containerd: Nhẹ, hiệu quả, hỗ trợ nhiều loại container.
  • CRI-O: Linh hoạt, hỗ trợ nhiều runtime OCI, nhưng cấu hình phức tạp hơn.
  • frakti: Bảo mật cao, cách ly tốt, nhưng hiệu suất có thể thấp hơn và cấu hình phức tạp hơn.
  1. Proxy – kube-proxy

Kube-proxy là tác nhân mạng chạy trên mỗi Worker Node, đóng vai trò quan trọng trong việc quản lý và điều phối lưu lượng truy cập mạng cho các Pod trong cụm Kubernetes. Nó thực hiện các chức năng chính sau:

  • Cập nhật và bảo trì luật điều phối mạng: Kube-proxy theo dõi các thay đổi trong cấu hình Service và Endpoint, sau đó cập nhật luật điều phối mạng trên Node tương ứng để đảm bảo lưu lượng truy cập được định tuyến chính xác đến các Pod.
  • Trừu tượng hóa hoạt động mạng của Pod: Kube-proxy ẩn đi các chi tiết phức tạp về mạng của Pod, giúp người dùng dễ dàng sử dụng và quản lý các ứng dụng mà không cần quan tâm đến cấu hình mạng chi tiết.
  • Chuyển tiếp kết nối đến Pod: Kube-proxy thực hiện việc chuyển tiếp lưu lượng truy cập đến các Pod dựa trên các quy tắc Service được định nghĩa. Nó hỗ trợ cả chuyển tiếp dòng (TCP, UDP, SCTP) và chuyển tiếp xoay vòng để đảm bảo phân tán tải hiệu quả.
  • Áp dụng luật chuyển tiếp do người dùng định nghĩa: Kube-proxy cho phép người dùng định nghĩa các quy tắc chuyển tiếp tùy chỉnh thông qua Service API. Nhờ vậy, người dùng có thể kiểm soát chi tiết cách thức lưu lượng truy cập được định tuyến đến các Pod.

Lợi ích của Kube-proxy:

  • Giảm tải cho Master Node: Kube-proxy thực hiện các tác vụ điều phối mạng trực tiếp trên Worker Node, giúp giảm tải cho Master Node và nâng cao hiệu suất tổng thể của cụm.
  • Dễ sử dụng: Kube-proxy cung cấp một giao diện đơn giản để quản lý mạng cho các Pod, giúp người dùng dễ dàng triển khai và vận hành các ứng dụng.
  • Linh hoạt: Kube-proxy hỗ trợ nhiều loại Service khác nhau, bao gồm Service ClusterIP, Service NodePort và Service LoadBalancer, đáp ứng nhu cầu đa dạng của người dùng.
  • Mở rộng: Kube-proxy có thể được mở rộng dễ dàng để hỗ trợ cụm Kubernetes lớn với nhiều Pod.

Master server

  1. Etcd

Có thể liên kết cài đặt với từng node thông qua etcd.

  1. API Server

Như tên gọi, đây chính là server cung cấp API cho Kubernetes. Chức năng chính của nó là triển khai Pod lên Node và cung cấp REST API để quản lý và cập nhật trạng thái Pod. API Server tiếp nhận và xử lý yêu cầu cho các đối tượng Kubernetes như Pod, Service, ReplicationController, v.v.

  1. Controller Manager Service

Tương tự như kube-controller-manager, công cụ này điều phối hoạt động của các bộ điều khiển đảm nhiệm các tác vụ nền tảng trong cụm Kubernetes. Bao gồm các bộ điều khiển quan trọng như Node Controller, Replication Controller, Endpoints Controller, Service Account Controller và Token Controller. Tất cả hoạt động được ghi vào etcd, nơi kube-controller-manager theo dõi thay đổi thông qua API Server để đảm bảo trạng thái mong muốn của cụm.

  1. Scheduler Service

Scheduler Service đóng vai trò quan trọng trong việc theo dõi và quản lý việc sử dụng tài nguyên trên mỗi node trong cụm Kubernetes. Nhờ vậy, nó giúp ngăn chặn tình trạng quá tải hệ thống và đảm bảo hiệu suất hoạt động tối ưu. Scheduler Service có thông tin về tổng dung lượng tài nguyên trên mỗi node, bao gồm CPU, RAM, lưu trữ, v.v. Nó cũng biết cách các tài nguyên đó đang được sử dụng bởi các workload (như pod, container) đang chạy trên mỗi node. Dựa trên thông tin này, Scheduler Service sẽ quyết định cách phân bổ workload mới cho các node một cách hiệu quả, đảm bảo rằng không có node nào bị quá tải.

  1. Dashboard (optional)

Giao diện web Kubernetes giúp người dùng dễ dàng theo dõi và quản lý máy chủ API.

Node Server

  1. Pod

Pod là một nhóm từ một container trở lên, cùng chia sẻ không gian lưu trữ và địa chỉ IP, được triển khai để thực hiện một mục đích cụ thể (như chạy ứng dụng). Các container trong Pod có thể giao tiếp trực tiếp với nhau một cách dễ dàng. Pod được tạo và xóa theo nhu cầu sử dụng của ứng dụng, giúp đảm bảo tính linh hoạt và hiệu quả trong việc quản lý tài nguyên.

Mặc dù Pod là đơn vị triển khai cơ bản trong Kubernetes, nhưng nếu chỉ sử dụng Pod, Kubernetes sẽ giống như Docker ở mức độ cơ bản, đòi hỏi người dùng tự thiết kế và triển khai các tính năng nâng cao như:

  • Khả năng tự động mở rộng ứng dụng
  • Cân bằng tải lưu lượng truy cập
  • Phục hồi ứng dụng sau lỗi
  • Quản lý bí mật và cấu hình

Xem thêm về: Jenkins CI/CD

Để biết thông tin chi tiết về Pod, hãy sử dụng lệnh kubectl describe pod PODNAME.

  1. Service (svc)

Do Pod có tuổi thọ ngắn và địa chỉ IP không cố định, việc giao tiếp giữa các microservice gặp nhiều khó khăn. Để giải quyết vấn đề này, Kubernetes giới thiệu Service, một lớp trừu tượng nằm trên một nhóm Pod. Service có địa chỉ IP tĩnh và có thể sử dụng tên miền để truy cập. Nhờ vậy, các ứng dụng có thể dễ dàng kết nối đến Service mà không cần biết địa chỉ IP cụ thể của Pod. Service cũng hỗ trợ cân bằng tải lưu lượng truy cập giữa các Pod trong nhóm, đảm bảo hiệu suất và khả dụng cao cho ứng dụng.

Mỗi Service được gán một tên miền tùy chọn do người dùng lựa chọn. Khi ứng dụng cần kết nối đến Service, chỉ cần sử dụng tên miền này thay vì địa chỉ IP cụ thể của Pod. Tên miền được quản lý bởi hệ thống DNS nội bộ của Kubernetes (thường là CoreDNS thay vì SkyDNS), được cài đặt cùng với Kubernetes.

  1. Persistent Volumes

Lưu trữ dữ liệu bền vững là điều cần thiết cho các ứng dụng containerized. Việc lưu trữ dữ liệu trực tiếp trên container không an toàn vì dữ liệu sẽ bị mất khi container khởi động lại hoặc bị lỗi. Vấn đề này đúng với tất cả các nền tảng container, bao gồm Docker và Kubernetes.

Lưu trữ dữ liệu ứng dụng trên container trực tiếp trên máy chủ là giải pháp tạm thời và không phù hợp cho môi trường sản xuất. Việc lưu trữ dữ liệu ứng dụng trên một thư mục chung trên máy chủ có thể dẫn đến xung đột dữ liệu khi nhiều pod cùng truy cập.

Kubernetes sử dụng các hệ thống lưu trữ mạng (network storage) như NFS, GlusterFS, Ceph,… để lưu trữ dữ liệu bền vững cho các ứng dụng. PersistentVolume (PV) đại diện cho một đơn vị lưu trữ thực tế với dung lượng cụ thể (1GB, 10GB,…). PersistentVolumeClaim (PVC) mô tả nhu cầu lưu trữ của ứng dụng. Khi tìm thấy PV phù hợp với yêu cầu của PVC, Kubernetes sẽ “match” và “bound” (kết nối) hai tài nguyên này với nhau.

  1. Namespaces

Namespace là một tính năng của Kubernetes dùng để nhóm hoặc phân chia các đối tượng, giúp quản lý tài nguyên, kiểm soát truy cập và áp dụng quota hiệu quả. Nhờ Namespace, bạn có thể:

  • Phân tách các môi trường khác nhau: Ví dụ, bạn có thể sử dụng namespace riêng cho môi trường production, development, staging,…
  • Hạn chế quyền truy cập: Giới hạn quyền truy cập vào các tài nguyên trong Namespace cho từng nhóm người dùng cụ thể.
  • Áp dụng quota: Quy định mức sử dụng tài nguyên tối đa cho từng Namespace.
  1. Ingress rules

Ingress rules là bộ quy tắc định tuyến lưu lượng truy cập từ bên ngoài vào các Service và Pod trong Kubernetes. Nhờ Ingress rules, bạn có thể:

  • Lộ các Service ra bên ngoài: Cho phép người dùng bên ngoài truy cập các Service thông qua tên miền và cổng cụ thể.
  • Cân bằng tải: Phân phối lưu lượng truy cập đến nhiều Pod trong Service một cách hiệu quả.
  • Chuyển hướng lưu lượng truy cập: Chuyển hướng lưu lượng truy cập đến các Service khác dựa trên đường dẫn URL hoặc tiêu đề HTTP.
  • Bảo mật mạng: Mã hóa lưu lượng truy cập và áp dụng các biện pháp bảo mật khác.
  1. Network policies

Network Policies cho phép bạn kiểm soát lưu lượng truy cập mạng giữa các Pod trong Kubernetes. Nhờ vậy, bạn có thể:

  • Hạn chế quyền truy cập vào các Pod dựa trên nhãn, địa chỉ IP hoặc tên miền.
  • Giảm thiểu rủi ro bảo mật bằng cách cô lập các Pod.
  • Tối ưu hóa hiệu suất mạng bằng cách hạn chế lưu lượng truy cập không cần thiết.
  1. Network

Kubernetes sử dụng các mạng container để kết nối các Pod với nhau. Một số giải pháp mạng container phổ biến bao gồm Flannel và Weave. Nếu bạn sử dụng Google Cloud Kubernetes Engine (GKE), mạng container được quản lý tự động và bạn không cần phải lo lắng về việc cài đặt hoặc cấu hình.

  1. ConfigMaps and Secrets

ConfigMap: ConfigMap là giải pháp lưu trữ và quản lý cấu hình cho các Pod trong Kubernetes. Cấu hình trong ConfigMap có thể được định dạng dưới dạng key-value, hoặc là nội dung tệp tin. Pod có thể truy cập dữ liệu trong ConfigMap thông qua biến môi trường hoặc gắn kết volume. ConfigMap giúp dễ dàng chia sẻ cấu hình giữa các Pod và đơn giản hóa việc quản lý cấu hình.

Secret: Secret là giải pháp lưu trữ và quản lý thông tin nhạy cảm như mật khẩu, token, chứng chỉ SSL,… trong Kubernetes. Dữ liệu trong Secret được mã hóa để đảm bảo bảo mật. Pod có thể truy cập dữ liệu trong Secret thông qua biến môi trường hoặc gắn kết volume. Secret giúp bảo vệ thông tin nhạy cảm khỏi bị lộ và truy cập trái phép.

  1. Controllers

Kubernetes sử dụng các loại Controller khác nhau để quản lý việc triển khai và vận hành các ứng dụng. Dưới đây là một số loại Controller phổ biến:

  • Deployment: Deployment là loại Controller phổ biến nhất, dùng để triển khai và quản lý một nhóm Pod. Deployment đảm bảo rằng số lượng Pod mong muốn luôn được duy trì, tự động khởi động lại các Pod bị lỗi và cho phép bạn cập nhật phiên bản ứng dụng một cách an toàn.
  • StatefulSet: StatefulSet là loại Controller dùng để triển khai và quản lý một nhóm Pod có trạng thái, đảm bảo thứ tự khởi động và duy trì tính nhất quán dữ liệu. StatefulSet thường được sử dụng cho các ứng dụng cần lưu trữ dữ liệu bền vững, chẳng hạn như cơ sở dữ liệu.
  • DaemonSet: DaemonSet là loại Controller dùng để đảm bảo rằng một Pod luôn chạy trên mỗi Node trong cluster. DaemonSet thường được sử dụng cho các ứng dụng giám sát, thu thập log hoặc tác vụ hệ thống.

Ngoài ra, Kubernetes còn có các loại Controller khác như ReplicaSet, HorizontalPodAutoscaler, Job, CronJob,… Mỗi loại Controller có chức năng và mục đích sử dụng riêng.

  1. Helm – K8s package manager

Helm là trình quản lý gói cho Kubernetes. Helm cho phép bạn cài đặt các ứng dụng Kubernetes một cách dễ dàng bằng cách sử dụng các gói được gọi là “chart”. Chart bao gồm tất cả các tài nguyên cần thiết để triển khai một ứng dụng Kubernetes, bao gồm Pod, Service, Deployment, ConfigMap và Secret.

  1. Dashboard

Dashboard là một giao diện web cho phép bạn xem tổng quan về cluster Kubernetes của mình. Dashboard được cài đặt như một add-on và cung cấp cho bạn khả năng giám sát các Pod, Service, Deployment, Node và các tài nguyên Kubernetes khác. Tuy nhiên, Dashboard không cho phép bạn tương tác trực tiếp với các tài nguyên Kubernetes. Để thực hiện các thao tác quản lý, bạn vẫn cần sử dụng lệnh kubectl.

  1. Monitoring

Kubernetes cung cấp khả năng giám sát toàn diện, giúp bạn theo dõi hiệu suất và tình trạng sức khỏe của cluster một cách dễ dàng. Với các công cụ giám sát như Prometheus và Grafana, bạn có thể tự động thu thập và phân tích dữ liệu từ tất cả các Pod trong cluster, mà không cần phải cấu hình thủ công cho từng Pod.

  1. Create

Kubernetes sử dụng định dạng YAML để mô tả cấu hình cho các tài nguyên như Pod, Service, ConfigMap,… Việc triển khai các tài nguyên này có thể được thực hiện dễ dàng bằng lệnh kubectl create -f hoặc bằng cách sử dụng tập tin cấu hình YAML.

Có thể bạn quan tâm: Những điều cần lưu ý khi thi chứng chỉ CKA

Tin mới nhất

Locker blog

Mẹo, tin tức, hướng dẫn và các best practice độc quyền của Locker

Đăng ký nhận bản tin của chúng tôi

Hãy trở thành người nhận được các nội dung hữu ích của Locker sớm nhất

Xem chính sách của chúng tôi Chính sách bảo mật.