Kubernetes là công cụ điều phối phổ biến nhất để triển khai và nhân rộng các hệ thống được đóng gói(docker…). Bạn có thể sử dụng Kubernetes để xây dựng và phân phối các ứng dụng của mình trên cloud một cách đáng tin cậy.
Trong bài hướng dẫn dành cho người mới bắt đầu này, bạn sẽ tìm hiểu những gì Kubernetes có thể làm và cách bắt đầu sử dụng K8S qua một số ví dụ cụ thể.
1. Kubernetes là gì?
Kubernetes, hoặc k8s là một nền tảng mã nguồn mở tự động hoá việc quản lý, scaling và triển khai ứng dụng dưới dạng container hay còn gọi là Container orchestration engine. Nó loại bỏ rất nhiều các quy trình thủ công liên quan đến việc triển khai và mở rộng các containerized applications.
Gần đây, nhiều ứng dụng đã thực hiện container hoá bằng cách sử dụng docker và sử dụng nó như là môi trường production ngày càng tăng. Trên môi trường production, việc cấu trúc hệ thống chạy bằng container chỉ sử dụng docker là rất khó khăn. Cho nên việc sử dụng một nền tảng Container orchestration engine như là k8s thì khá phổ biến hiện nay.
Các ứng dụng production thực tế mở rộng nhiều containers. Các containers đó phải được triển khai trên nhiều server hosts. Kubernetes cung cấp khả năng phối hợp và quản lý cần thiết để triển khai các containers theo quy mô cho các workloads đó.
2. Tính năng
Bằng việc sử dụng docker, trên 1 host bạn có thể tạo ra nhiều container. Tuy nhiên nếu bạn có ý định sử dụng trên môi trường production thì phải bắt buộc phải nghĩ đến những vấn đề dưới đây:
- Việc quản lý hàng loạt docker host
- Container Scheduling
- Rolling update
- Scaling/Auto Scaling
- Monitor vòng đời và tình trạng sống chết của container.
- Self-hearing trong trường hợp có lỗi xãy ra. (Có khả năng phát hiện và tự correct lỗi)
- Service discovery
- Load balancing
- Quản lý data, work node, log
- Infrastructure as Code
- Sự liên kết và mở rộng với các hệ thống khác
3. Kubernetes hoạt động như thế nào?
Container thiết lập ứng dụng dưới hình thức di động và kiến trúc K8s được sử dụng để chạy các ứng dụng đó. Một cụm K8s bao gồm một Control Plan và một nút thực thi. Trong đó, Control Plan có nhiệm vụ hiển thị API K8s và quản lý các nút.
Đơn vị thực thi nhỏ nhất cho một ứng dụng đang chạy trong Kubernetes là Kubernetes Pod, bao gồm một hoặc nhiều container. Kubernetes Pods chạy trên các nút thực thi.
Các chức năng của K8s cũng là thành phần của Control Plan và thực thi trên các nút K8s.
Control Plan có bốn thành phần chính
- Kube-apiserver giúp hiển thị API Kubernetes.
- etcd. là kho lưu trữ khóa-giá trị nơi lưu trữ tất cả dữ liệu liên quan đến cụm Kubernetes.
- Kube-scheduler giúp theo dõi các Kubernetes Pods linh hoạt không cần nút.
- Kube-controller-manager được sử dụng để quản lý và điều khiển các chức năng.
Nút K8s có ba thành phần chính
- Kubelet đảm bảo các container cần thiết cho Kubernetes Pod.
- Kube-proxy giúp duy trì các quy tắc mạng và cho phép giao tiếp.
- Container runtime là các phần mềm chạy container tuân thủ Kubernetes CRI.
Một số điều khoản bổ sung cần lưu ý
- Kubernetes service sử dụng một chức năng để thực hiện các nhiệm vụ được yêu cầu.
- Controller đảm bảo trạng thái hiện tại của Kubernetes đáp ứng với mong muốn sử dụng.
- Operator có khả năng tự động hoá các tác vụ độc quyền giúp triển khai và quản lý ứng dụng trên K8s dễ dàng hơn.
4. Thuật ngữ và khái niệm cơ bản
Master node
Là server điều khiển các máy Worker chạy ứng dụng. Master node bao gồm 4 thành phần chính:
- Kubernetes API Server: là thành phần giúp các thành phần khác liên lạc nói chuyện với nhau. Lập trình viên khi triển khai ứng dụng sẽ gọi API Kubernetes API Server này.
- Scheduler: Thành phần này lập lịch triển khai cho các ứng dụng, ưng dụng được đặt vào Worker nào để chạy
- Controler Manager: Thành phần đảm nhiệm phần quản lý các Worker, kiểm tra các Worker sống hay chết, đảm nhận việc nhân bản ứng dụng…
- Etcd: Đây là cơ sở dữ liệu của Kubernetes, tất cả các thông tin của Kubernetes được lưu trữ cố định vào đây.
Worker node
Là server chạy ứng dụng trên đó. Bao gồm 3 thành phần chính:
- Container runtime: Là thành phần giúp chạy các ứng dụng dưới dạng Container. Thông thường người ta sử dụng Docker.
- Kubelet: đây là thành phần giao tiếp với Kubernetes API Server, và cũng quản lý các container
- Kubernetes Service Proxy: Thành phần này đảm nhận việc phân tải giữa các ứng dụng
kubectl
Tool quản trị Kubernetes, được cài đặt trên các máy trạm, cho phép các lập trình viên đẩy các ứng dụng mô tả triển khai vào cụm Kubernetes, cũng như là cho phép các quản trị viên có thể quản trị được cụm Kubernetes.
Pod
Pod là khái niệm cơ bản và quan trọng nhất trên Kubernetes. Bản thân Pod có thể chứa 1 hoặc nhiều hơn 1 container. Pod chính là nơi ứng dụng được chạy trong đó. Pod là các tiến trình nằm trên các Worker Node. Bản thân Pod có tài nguyên riêng về file system, cpu, ram, volumes, địa chỉ network…
Image
Là phần mềm chạy ứng dụng đã được gói lại thành một chương trình để có thể chạy dưới dạng container. Các Pod sẽ sử dụng các Image để chạy.
Các Image này thông thường quản lý ở một nơi lưu trữ tập trung, ví dụ chúng ta có Docker Hub là nơi chứa Images của nhiều ứng dụng phổ biến như nginx, mysql, wordpress…
Deployment
Là cách thức để giúp triển khai, cập nhật, quản trị Pod.
Replicas Controller
Là thành phần quản trị bản sao của Pod, giúp nhân bản hoặc giảm số lượng Pod.
Service
Là phần mạng (network) của Kubernetes giúp cho các Pod gọi nhau ổn định hơn, hoặc để Load Balancing giữa nhiều bản sao của Pod, và có thể dùng để dẫn traffic từ người dùng vào ứng dụng (Pod), giúp người dùng có thể sử dụng được ứng dụng.
Label
Label ra đời để phân loại và quản lý Pod,. Ví dụ chúng ta có thể đánh nhãn các Pod chạy ở theo chức năng frontend, backend, chạy ở môi trường dev, qc, uat, production…
5. Sử dụng Kubectl để tương tác với Kubernetes
Còn tiếp…