[K8S] – Phần 1: K8S là gì ?

K8S là gì ? Kubernetes được thiết kế bởi Google, về ngữ nghĩa thì tên này là tiếng Hy Lạp có nghĩa là tài công. K8S là một phần mềm mã nguồn mở, có vai trò là một hệ quản trị các Container và các thành phần liên quan. Nó khá tương đương với Docker

K8S là gì ?

Kubernetes được thiết kế bởi Google, về ngữ nghĩa thì tên này là tiếng Hy Lạp có nghĩa là tài công.
K8S là một phần mềm mã nguồn mở, có vai trò là một hệ quản trị các Container và các thành phần liên quan. Nó khá tương đương với Docker Swarm nhưng chứa nhiều tính năng ưu việt và mạnh mẽ hơn. Nếu bạn đọc được bài viết này chắc hẳn cũng đã có những khái niệm cơ bản về container, docker. (Nếu chưa các bạn có thể xem qua series Docker Swarm của mình)

Khi nào nên dùng K8S

Nếu như bạn đã dùng Docker Swarm, Docker Compose cho các dự án thực tế của mình thì sẽ thấy khi số lượng container lớn sẽ gặp không ít khó khăn trong việc kiểm soát, monitor cũng như auto scale hệ thống của mình… Khi đó K8S là một giải pháp thay thế tuyệt vời khi có thể kiểm soát linh hoạt và mạnh mẽ khi so sánh với Docker Swarm.

Kiến trúc và các thành phần của K8S

image.png

Trên master node gồm có các thành phần

Master Server là máy chính của cluster, tại đây điều khiển cả cụm máy.

etct là thành phần cơ bản cần thiết cho Kubernetes, nó lưu trữ các cấu hình chung cho cả cụm máy, etct chạy tại máy master. etct là một dự án nguồn mở (xem tại etcd) nó cung cấp dịch vụ lưu dữ liệu theo cặp key/value

kube-apiserver chạy tại máy master, cung cấp các API Restful để các client (như kubectl) tương tác với Kubernetes

kube-scheduler chạy tại master, thành phần này giúp lựa chọn Node nào để chạy các ứng dụng căn cứ vào tài nguyên và các thành phần khác sao cho hệ thống ổn định.

kube-controller chạy tại master, nó điều khiển trạng thái cluster, tương tác để thực hiện các tác vụ tạo, xóa, cập nhật … các tài nguyên

Trên worker node gồm các thành phần

Kubelet dịch vụ vụ chạy trên tất cả các máy (Node), nó đảm đương giám sát chạy, dừng, duy trì các ứng dụng chạy trên node của nó.

Kube-proxy: cung cấp mạng proxy để các ứng dụng nhận được traffic từ ngoài mạng vào cluster.

Đương nhiên nếu bạn triển khai các thành phần worker trên master, nó vẫn sẽ hoạt động bình thường

Cách hoạt động của K8S

Để thao tác với cụm K8S chúng ta sử dụng kubectl, Vậy kubectl là gì ?
Kubectl là công cụ quản trị Kubernetes thông qua giao diện dòng lệnh, cho phép bạn thực thi các câu lệnh trong Kubernetes cluster. Kubectl sử dụng Kubernetes API để tương tác với Kubernetes cluster.

Để khởi tạo một pod, chúng ta chạy lệnh.

kubectl run myhttpd –generator=run-pod/v1 –image=httpd –restart=”Always”

image.png

Bước 1: Receive Request

Kubectl sẽ kết nối với API Server và gửi lệnh tạo một pod mới với tên myhttpd, khi đó thông tin này được API Server tiếp nhận và ghi thông tin xuống etcd và etc sẽ phản hồi khi dữ liệu được ghi thành công là 1 pod đã được tạo.
Trên thực tế tại thời điểm response thì chưa có pod nào được tạo mới mà sẽ cần chờ các thành phần phía sau đó thực hiện.

Bước 2: Select Worker

Scheduler sẽ định kỳ hỏi API Server xem có y/c tạo pod mới hay không, nếu có Scheduler sẽ kiểm tra tất cả các worker và chọn ra một node tối ưu nhất để triển khai pod lên trên đó và thông báo lại cho API Server

Bước 3: Update Info

Khi nhận được phản hồi từ Scheduler, API Server sẽ ghi nhận pod được tạo trên worker nào và ghi thông tin đó xuống etcd

Bước 4: Update status

Kubelet sẽ định kỳ kết nối tới API server để cung cấp thông tin các pod do nó quản lý ở worker cũng như tiếp nhận các y/c mới.

Bước 5: Create container

kubelet đã nhận thông tin từ api-server, nó làm việc với CRI (Container Runtime Interface) để tạo một Pod mới theo yêu cầu (CRI có thể là Docker hoặc ContainerD) và cập nhật thông tin về cho API Server.

Bước 6: Controller Manager

Đến đây việc tạo pod đã thành công tuy nhiên quá trình xóa bỏ cũng như thay thế pod hiện tại cần một thành phần nữa là Controller Manager
image.png
Controller định kỳ sẽ gọi api-server để biết trạng thái hiện tại (current state) và trạng thái mong muốn (desired state). Trạng thái mong muốn là có 1 Pod myhttpd chạy trên worker1, còn hiện tại thì không có Pod myhttpd nào đang chạy --> Controller Manager sẽ yêu cầu tạo lại Pod để đảm bảo trạng thái hiện tại phải giống với trạng thái mong muốn.

Tổng kết

Trong bài này mình đã cung cấp cho các bạn các khái niệm cơ bản về K8S cũng như vòng đời của 1 pod được tạo ra như thế nào.
Trong phần tiếp theo mình sẽ hướng dẫn các bạn cài đặt một cụm K8S cơ bản gồm các thành phần như trên.

Hẹn các bạn ở phần tiếp theo nhé.

Nguồn: viblo.asia

Bài viết liên quan

WebP là gì? Hướng dẫn cách để chuyển hình ảnh jpg, png qua webp

WebP là gì? WebP là một định dạng ảnh hiện đại, được phát triển bởi Google

Điểm khác biệt giữa IPv4 và IPv6 là gì?

IPv4 và IPv6 là hai phiên bản của hệ thống địa chỉ Giao thức Internet (IP). IP l

Check nameservers của tên miền xem website trỏ đúng chưa

Tìm hiểu cách check nameservers của tên miền để xác định tên miền đó đang dùn

Mình đang dùng Google Domains để check tên miền hàng ngày

Từ khi thông báo dịch vụ Google Domains bỏ mác Beta, mình mới để ý và bắt đầ