Triển khai hệ thống theo kiến trúc Kubernetes

 Kiến trúc Kubernetes / Các thành phần Kubernetes


Kiến trúc Kubernetes có các thành phần chính sau:

  • Master Node
  • Worker / Slave Node
  • Key-value Store (v.v.)

Master node

Master node (hay node chính) là nơi đảm nhiệm tất cả các tác vụ quản trị chịu trách nhiệm quản lý cụm Kubernetes. Có thể có nhiều hơn một node chính trong cụm để tăng khả năng chịu lỗi. Việc có nhiều hơn một node master giúp cụm kubernetes có tính sẵn sàng cao, trong đó một trong số chúng sẽ là node chính mà chúng ta thực hiện tất cả các tác vụ.

Để quản lý trạng thái cụm, nó sử dụng etcd  trong đó tất cả các node master kết nối với nó.

Chúng ta hãy thảo luận về các thành phần của một nút chính nào. Như bạn có thể thấy trong sơ đồ, nó bao gồm 4 thành phần:

  • etcd cluster – Là một kho lưu trữ giá trị khóa phân tán, đơn giản được sử dụng để lưu trữ dữ liệu cụm Kubernetes (chẳng hạn như số lượng pod, trạng thái của chúng, namespace, v.v.), các API object và chi tiết service discovery. Nó chỉ có thể truy cập được từ API Server vì lý do bảo mật. etcd bật thông báo cho cụm về các thay đổi cấu hình với sự trợ giúp của những watcher. Thông báo là các yêu cầu API trên mỗi node của cụm etcd để kích hoạt cập nhật thông tin trong bộ nhớ của node.
  • kube-apiserver – Kubernetes API là thực thể quản lý trung tâm nhận tất cả các yêu cầu REST để sửa đổi (đối với pod, service, bộ sao chép / bộ điều khiển và những thứ khác), đóng vai trò là giao diện người dùng cho cụm. Ngoài ra, đây là thành phần duy nhất giao tiếp với cụm etcd, đảm bảo dữ liệu được lưu trữ trong etcd và phù hợp với chi tiết dịch vụ của các pod được triển khai.
  • kube-controller-manager – Là tiến trình chạy các controller để xử lý các background task của Cluster, giúp căn chỉnh cluster vào đúng với trạng thái đã khai báo (declare) ở Resource.
  • cloud-controller-manager – Chịu trách nhiệm quản lý các tiến trình của bộ điều khiển với sự phụ thuộc vào nhà cung cấp cloud (nếu có). Ví dụ: khi một bộ điều khiển cần kiểm tra xem một node đã được kết thúc hoặc thiết lập các route, load-balancer hoặc volume trong cơ sở hạ tầng cloud hay chưa, tất cả những gì được xử lý bởi cloud-controller-manager.
  • kube-Scheduler – Giúp lập lịch các pod trên các node khác nhau dựa trên việc sử dụng tài nguyên. Nó đọc các yêu cầu hoạt động của dịch vụ và lên lịch trên node phù hợp nhất. Ví dụ: nếu ứng dụng cần 1GB bộ nhớ và 2 core CPU, thì các nhóm cho ứng dụng đó sẽ được lên lịch trên một node có tài nguyên phù hợp. Bộ lập lịch chạy mỗi khi có nhu cầu lập lịch nhóm. Bộ lập lịch phải biết tổng tài nguyên hiện có cũng như tài nguyên được phân bổ cho khối lượng công việc hiện có trên mỗi node

Bây giờ bạn đã hiểu chức năng của node Master. Hãy xem node Worker / Minions là gì và các thành phần của nó.

Worker Node

Nó là một máy chủ hay bạn có thể nói là một máy ảo chạy các ứng dụng sử dụng các Pod được điều khiển bởi node Master. Trên node worker, các pod được lập lịch. Để truy cập  các ứng dụng từ thế giới bên ngoài, chúng ta kết nối với chúng qua các node. 

Hãy xem các thành phần của worker node là gì:

  • kubelet – Là service chính trên mỗi node, thường xuyên nhận các thông số của pod mới hoặc được sửa đổi (chủ yếu thông qua kube-apiserver) và đảm bảo rằng các pod và container của chúng không có vấn đề gì và chạy ở trạng thái mong muốn. Thành phần này cũng báo cáo cho master về tình trạng của node nơi mà nó đang chạy.
  • kube-proxy – một dịch vụ proxy chạy trên mỗi worker node để xử lý vấn đề về mạng trên mỗi worker node và expose các port của service với bên ngoài internet. Nó thực hiện chuyển tiếp yêu cầu đến các pod / container chính xác trên các network bị cô lập khác nhau trong một cụm.

Các khái niệm trong Kubernetes

Việc sử dụng Kubernetes đòi hỏi phải hiểu các khái niệm khác nhau mà nó sử dụng để biểu thị trạng thái của hệ thống, chẳng hạn như service, pod, volume, namespace và deployment.

Pod

Một pod là một mức độ trừu tượng cao hơn nhóm các thành phần trong container. Một pod bao gồm một hoặc nhiều container được đảm bảo nằm chung trên một server và có thể chia sẻ tài nguyên . Đơn vị cơ bản trong Kubernetes là một pod .

Mỗi pod trong Kubernetes được gán một địa chỉ IP Pod duy nhất trong cụm, cho phép các ứng dụng sử dụng các port mà không có nguy cơ xung đột.Trong pod, tất cả các container có thể gọi lẫn nhau trên localhost, nhưng một container trong một pod không có cách nào connect trực tiếp một container khác trong một pod khác; vì vậy, nó phải sử dụng Địa chỉ IP Pod. Tuy nhiên, nhà phát triển ứng dụng không nên sử dụng Địa chỉ IP Pod để tham chiếu / gọi đến một pod khác, vì địa chỉ IP Pod là tạm thời – pod cụ thể mà họ đang tham chiếu có thể được gán cho một địa chỉ IP Pod mới khi pod được tạo lại hoặc restart. Thay vào đó, họ nên sử dụng service của kubernetes liên kết trực tiếp đến pod đích.

Service

Service là một thành phần trừu tượng trong kubernetes. Nó sẽ bao gồm một nhóm các pod và các cách để connect tới nhóm pod này. Service xác định các pod nằm trong nhóm liên kết với service đó thông qua label và selector.

Như hình bên dưới bạn có thể thấy service Frontend Service có 2 label là: app=webapp và role=frontend khi bạn truy cập vào service này nó sẽ forward request của bạn tới các pod có label giống với nó.

Service sẽ có một ip và dns riêng và cố định trừ khi bạn xóa đi tạo lại thì sẽ có một ip mới, dns vẫn được giữ nguyên. Bên cạnh đó service sẽ tự động cân bằng tải request tới các pod nhưng hiện tại chỉ hỗ trợ thuật toán cân bằng tải random request tới các pod.

Controller

Trong hệ thống Kubernetes, các bộ controllers là các vòng lặp điều khiển theo dõi trạng thái của mỗi cluster, sau đó chúng sẽ tạo hoặc yêu cầu sự thay đổi cần thiết. Mỗi controller cố thực hiện việc thay đổi để giúp hệ thống chuyển từ trạng thái hiện tại sang trạng thái mong muốn.

Vòng điều khiển lặp lại theo dõi trạng thái chung của cluster thông qua Kubernetes API server (một thần phần của Control Plane).

Một vài controllers chạy bên trong control plan, cung cấp các vòng lặp điều khiển vận hành nhân gốc của các hoạt động trong hệ thống Kubernetes. Ví dụ: với deployment controller, daemonset controller, namespace controller, và persistent volume controller (và một vài controller còn lại) đều chạy bên trong kube-controller-manager. Dưới đây là một vài các controller chúng ta thường sử dụng:

  • Deployments
  • ReplicaSet
  • StatefulSets
  • DaemonSet
  • Jobs
  • Garbage Collection
  • Ingress Controller
  • CronJob
  • ReplicationController

Namespace

Namespace được sinh ra để nhằm mục đích phân chia các service với các user, các môi trường như developo-staging-production,hoặc để cô lập các service với nhau.

Các service trong cùng một namespace không được trùng tên nhưng có thể trùng với các namespace khác. Bên cạnh đó chúng ta có thể giới hạn truy cập của service chỉ có quyền trong namespace đó tránh ảnh hưởng đến các service trong namespace khác.

Mặc định kubernetes có 3 namespace: default, kube-system và kube-public.

Lable và selector

Volume

Khi triển khai ứng dụng trên kubernetes, trong quá trình hoạt động các service có thể có sự phát sinh về thay đổi dữ liệu hoặc cấu hình, nhưng các container tạo ra và có thể bị xóa đi dẫn đến dữ liệu có thể bị mất mát. Để khắc phục vấn đề này, chúng ta có thể mount vào trong container volume chứa dữ liệu đó, khi container bị xóa đi và tạo lại volume sẽ được mount lại vào container và tiếp tục sử dụng data cũ.

Nguyên tắc thiết kế Kubernetes

Kubernetes được thiết kế để hỗ trợ các tính năng được yêu cầu bởi các hệ thống phân tán có tính khả dụng cao , chẳng hạn như tự động mở rộng, tính sẵn sàng cao, bảo mật và tính di động.

Kubernetes có nhiều tính năng khác nhau. Dưới đây là một số tính năng quan trọng của Kubernetes:

Linh hoạt và 100% mã nguồn mở – Kubernetes tương thích trên nhiều nền tảng. Đây là dự án mã nguồn mở 100% và do đó, cung cấp tính linh hoạt cao hơn.

Khả năng scale – Kubernetes được biết đến là rất hiệu quả. Node mới được thêm vào và gỡ bỏ dễ dàng, nó tự động thay đổi số lượng container đang chạy và chia tỷ lệ container dựa trên resource như cpu hoặc memory. Nó hỗ trợ 2 loại mở rộng hệ thống: theo chiều ngang và theo chiều dọc, cả với node và số lượng pod đang chạy. Vì thế việc sử dụng tài nguyên sẽ vô cùng tối ưu và tiết kiệm chi phí một các tối đa.

Tính sẵn sàng cao – Kuberentes sinh ra để đảm bảo tính sẵn sàng cao của hệ thống với các tính năng đi kèm, nó giúp cho các dịch vụ chạy ổn định và giảm thời gian downtime khi có sự cố hoặc khi bảo trì hệ thống. Nó có độ tin cậy cao và có thể được triển khai trên cloud hoặc vật lý.

Điều phối lưu trữ – Kubernetes tự động gắn kết các hệ thống lưu trữ như local storage và public cloud provider và nhiều loại hệ thống lưu trữ dữ liệu khác.

Tự phục hồi – Kubernetes khởi động lại các container nếu không thành công, thay thế các container, kill các container không phản hồi hoặc lỗi để kiểm tra kịp thời.

Tự động deploy và rollback – Triển khai image mới hoặc rollback lại version cũ rất nhanh chóng và dễ dàng, giảm khả năng downtime trong quá trình triển khai đảm bảo tính sẵn sàng cao của hệ thống.

Post a Comment

Mới hơn Cũ hơn