Kubernetes là một trong những công nghệ phổ biến trong điện toán đám mây. Nó giúp lưu trữ các ứng dụng phức tạp trên nhiều loại kiến trúc khác nhau. Vậy Kubernetes là gì? Sau đây hãy cùng mình tìm hiểu qua bài viết dưới đây nhóe.
Xem thêm:
1. Kubernetes là gì?
Kubernetes gọi tắt là K8s là orchestration tools (công cụ tạo, thêm, xóa, điều phối các container). Với k8s, chúng ta có thể dễ dàng triển khai, mở rộng, quản lý các ứng dụng hỗ trợ container dễ dàng, tự động.
Kubernetes có thể được triển khai trên một hoặc nhiều máy tạo thành kubernetes cluster. K8S cluster bao gồm tập hợp các node (vật lý hoặc ảo) giúp lưu trữ các ứng dụng ở dạng container.
2. Tại sao lại cần Kubernetes?
Có rất nhiều ứng dụng được xây dựng theo Monolith Architecture. Trong kiến trúc monolith, tất cả các chức năng, bao gồm cả các thư viện được gộp chung vào 1 deployment. Với các ứng dụng nhỏ, điều này ok. Tuy nhiên việc deploy sẽ mất nhiều thời gian, do tất cả các module phải đi cùng nhau, hoặc phải cùng công nghệ. Khi muốn nâng cấp thì mình sẽ phải update tất cả các module, nên hệ thống xảy ra rất nhiều rủi ro.
Để giảm thiểu rủi ro đó, nhiều hệ thống chuyển sang kiến trúc microservices. Trong kiến trúc này, một chức năng lớn được chia thành nhiều chức năng nhỏ hơn, được gọi là các service. Việc scale hệ thống sẽ dễ dàng hơn vì chỉ cần update service nào có liên quan, không phải cập nhật tất cả các service.
Ở đây có 1 vấn đề là “1 machine – 1 service”, nghĩa là mỗi service cần phải chạy trên 1 machine riêng biệt. Vậy nên nếu hệ thống của ta có nhiều services thì số lượng machine cũng tăng lên theo, rất tốn kém.
Để giải quyết vấn đề này, chúng ta có khái niệm containers, các services thay vì được chứa vào machine, sẽ được chứa vào container.
Container giống như một cái thùng chứa sẽ đóng gói tất cả những thứ cần thiết để chạy chương trình như thư viện, source code, hệ điều hành. Sau này cần chạy thay vì cần cài lại từ đầu thì mình sẽ chỉ cần chạy container.
Vậy bây giờ mình có nhiều container thì làm sao có thể quản lý và cập nhật chúng. Từ đó Kubernetes ra đời.
3. K8s dùng trong các trường hợp nào?
- K8s phù hợp với hệ thống có nhiều máy chủ có sử dụng container, hoặc hệ thống có số lượng container lớn.
- Các ứng dụng cần đảm bảo khả năng sẵn sàng cao: khi số lượng request tăng lên, k8s sẽ tự động sinh ra các container hoặc các container bị ngưng hoạt động thì k8s sẽ tự động bổ sung thay thế.
- Nhu cầu về tự động cài đặt, triển khai hoặc tích hợp giải pháp CI/CD.
4. Kiến trúc kubernetes cluster
Kiến trúc kubernetes cluster gồm 2 phần:
- Master node
- Worker node
4.1 Master node
Master node đóng vai trò điều khiển các hoạt động chung và kiểm soát các container trên worker node. Nếu như hệ thống cần khả năng High Availablility thì chúng ta cần triển khai nhiều node master.
Các thành phần trong master node:
4.1.1 API ServeR
- API Server là thành phần quản lý chính trong kubernetes chịu trách nhiệm điều phối tất cả các hoạt động trong cluster: tiếp nhận yêu cầu, xác thực, truy xuất và cập nhật dữ liệu trong Etcd.
- Khi chạy lệnh
kubectl
thì api server tiếp nhận yêu cầu và lấy dữ liệu từ etcd và trả về cho user. - API-server hoạt động trên cổng 6443 (HTTPS) và 8080(HTTP).
4.1.2 Kube Controller Manager
- Kube Controller Manager là thành phần quản lý của Kubernetes Cluster. Nó theo dõi trạng thái của các tài nguyên thông qua API Server và thực hiện các thay đổi nếu cần nhằm chuyển đổi thành các trạng thái mong muốn.
- Có nhiệm vụ xử lý các yêu cầu của người dùng hoặc ứng dụng. Đảm bảo các tiến trình, service chạy trong K8S hoạt động chính xác.
- Sử dụng cổng 10252
- Các thành phần bên trong controller manager:
- Node Controller: Node-Controller theo dõi trạng thái của các node mỗi 5s. Nếu có một node không phản hồi, nó sẽ gửi lại request sau 40s trước khi đánh dấu là không truy cập được. Sau khi một node bị đánh dấu là không truy cập được, node đó sẽ có 5 phút để quay lại.
- Replication Controller: Chịu trách nhiệm giám sát trạng thái của toàn bộ bản sao và đảm bảo số lượng POD mong muốn luôn sẵn sàng, nếu một POD bị ngưng hoạt động, nó sẽ tạo ra một POD khác.
- Endpoints Controller: Populates the Endpoints object (i.e., join Services & Pods).
- Service Account & Token Controllers: Tạo ra các accounts và token để có thể sử dụng được các API cho các namespaces.
4.1.3 Scheduler
- Scheduler điều phối các Pods tới các woker node. Scheduler sẽ đảm bảo các Pod sẽ được đặt tới các Worker Node có đủ tài nguyên để chứa nó. Hay hướng các Pod tới các Worker Node theo các tiêu chí nhất định.
- Sử dụng cổng 10251.
- Ví dụ, tập hợp các yêu cầu về CPU. Đầu tiên Scheduler sẽ lọc các Node không hợp lệ. Còn hai cái thì 12, 16 thì Scheduler sẽ chọn cái nào? Nó sẽ xếp hạng các Node. Khi đặt vào thì cái thứ 2 nó sẽ thừa 6 CPU. Vậy nên Node có 16 CPU sẽ được chọn.
4.1.4 Etcd
- Etcd là database phân tán được sử dụng để ghi dữ liệu theo cơ chế key/value trong K8S cluster.
- Etcd được cài trên node master và lưu tất cả thông tin trong cluster: Nodes, PODs, Configs, Secrets, Accounts, Roles, Binding, Others.
- Mọi thông tin khi chạy lệnh kubectl đều được lấy từ etcd.
- Mọi thay đổi với cluster như thêm, triển khai, đều được update trong etcd. Chỉ khi được update trong etcd thì thay đổi mới được hoàn tất.
- Etcd sử dụng cổng 2380 để lắng nghe các yêu cầu và cổng 2379 để client gửi yêu cầu tới.
4.2 Worker node
Worker node đóng vai trò là môi trường để chạy các container mà người dùng yêu cầu.
4.2.1 Kubelet
Kubelet nhận lệnh từ master node, để tạo mới, tắt bật các container ứng dụng theo yêu cầu người dùng. Sử dụng cổng 10250 và 10255.
4.1.2 Kube proxy
Kube proxy là một process chạy trên mỗi node trong kubernetes cluster. Nó có nhiệm vụ tìm kiếm các dịch vụ mới và mỗi khi dịch vụ mới được tạo ra nó sẽ tạo ra các quy tắc thích hợp trên mỗi node để chuyển tiếp lưu lượng truy cập đến dịch vụ đó đến backend pod. Tóm lại, kube-proxy cho phép người dùng truy cập vào các ứng dụng đang chạy trong Kubernetes Cluster. Sử dụng cổng 31080.
4.2.3 Docker
Docker là môi trường chạy các thành phần của k8s trên các container.
Mục đích của kubernetes là lưu trữ dữ liệu của bạn dưới dạng vùng chứa (container) theo cách tự động để bạn có thể dễ dàng triển khai nhiều phiên bản ứng dụng theo yêu cầu và giao tiếp giữa các dịch vụ khác nhau trong ứng dụng. Hy vọng bài viết này đã giúp bạn có cái nhìn tổng quan và hiểu rõ hơn về K8S. Cảm ơn bạn đã tham khảo kubernetes cơ bản trên ttnguyen.net.
Bài viết liên quan:
Containerd là gì ? So sánh Docker và Containerd
Container runtime là gì ? 2 loại phổ biến