Tracks
Nếu bạn quan tâm đến sự trỗi dậy của điện toán đám mây, hẳn bạn đã nghe đến Kubernetes. Trong phát triển ứng dụng hiện đại, đây là một công cụ then chốt để quản lý nhiều cấu hình hạ tầng khác nhau.
Trong bài viết nhập môn này, chúng tôi sẽ cung cấp tổng quan về Kubernetes và các thành phần của nó, cùng một hướng dẫn toàn diện để triển khai cục bộ. Nếu bạn muốn học thực hành bổ trợ cho bài hướng dẫn này, hãy xem khóa học Introduction to Kubernetes của chúng tôi.
Kubernetes là gì?
Kubernetes là một nền tảng điều phối container mã nguồn mở, tự động hóa việc triển khai, mở rộng và quản lý các ứng dụng đóng gói dưới dạng container. Ban đầu do Google phát triển, nó đã trở thành tiêu chuẩn thực tế để vận hành container ở quy mô lớn.
Kubernetes trừu tượng hóa sự phức tạp trong việc quản lý từng container riêng lẻ, cho phép nhà phát triển tập trung vào xây dựng và triển khai ứng dụng.
Vì sao nên dùng Kubernetes?
Dưới đây là một số lợi ích chính khi sử dụng Kubernetes:
- Điều phối container: Tự động phân phối và lập lịch các container trên toàn cụm.
- Khả năng mở rộng và tự phục hồi: Đơn giản hóa mở rộng ngang (nhân bản container) và mở rộng dọc (điều chỉnh phân bổ tài nguyên) kèm khả năng tự phục hồi.
- Sẵn sàng cao: Đảm bảo container (và do đó là dịch vụ của bạn) vẫn hoạt động ngay cả khi một số nút gặp sự cố.
- Tính di động: Trừu tượng hóa hạ tầng bên dưới, giúp dễ dàng chạy tại chỗ và trên các nhà cung cấp đám mây khác nhau.
- Tối ưu sử dụng tài nguyên: Thay đổi kích thước container dựa trên mức sử dụng tài nguyên, tối ưu phân bổ và giảm chi phí.
Kubernetes hữu ích trong nhiều ứng dụng như:
- DevOps: Tự động triển khai, mở rộng và quản lý các ứng dụng đóng gói container.
- Microservices: Chia nhỏ ứng dụng khối đơn lớn thành các dịch vụ nhỏ, dễ quản lý để tăng linh hoạt và khả năng mở rộng.
- Big data: Đơn giản hóa triển khai và quản lý các hệ thống dữ liệu lớn phức tạp bằng container.
- Điện toán biên: Cho phép chạy Kubernetes trên thiết bị biên để xử lý và phân tích dữ liệu gần nơi dữ liệu được tạo ra, giảm độ trễ và cải thiện hiệu năng.
- Phân phối liên tục: Tích hợp với các công cụ như Jenkins và GitLab để tự động hóa pipeline phân phối liên tục.
- Machine learning: Cung cấp nền tảng có khả năng mở rộng để huấn luyện và triển khai mô hình học máy, xử lý bộ dữ liệu lớn và tính toán phức tạp.
Các khái niệm chính trong Kubernetes
Để hiểu cách Kubernetes hoạt động, bạn cần nắm vững các khái niệm then chốt của nó.
Bao gồm 4 khái niệm chính:
- Cluster
- Pod
- Namespace
- Operator
Chúng ta sẽ tìm hiểu thêm bên dưới.
Cluster
Cluster Kubernetes là tập hợp các node, tức là những máy riêng lẻ chạy phần mềm Kubernetes. Cluster đóng vai trò mặt phẳng điều khiển để quản lý ứng dụng và dịch vụ.
Trong cấu hình điển hình, một cluster có một master node và nhiều worker node. Master node chịu trách nhiệm điều phối mọi hoạt động trong cluster, còn các worker node đảm nhận việc chạy và quản lý container.
Pod
Pod là đơn vị triển khai nhỏ nhất trong Kubernetes. Pod có thể chứa một hoặc nhiều container, cùng tài nguyên lưu trữ và thiết lập mạng dùng chung.
Mỗi pod có địa chỉ IP riêng và có thể giao tiếp với các pod khác trong cùng cluster qua địa chỉ này. Điều đó cho phép các thành phần khác nhau của một ứng dụng liên lạc hiệu quả.
Pod có thể là pod một container hoặc nhiều container, và mỗi loại có trường hợp sử dụng riêng.
- Pod một container: Loại phổ biến nhất, chỉ chạy một container bên trong. Hữu ích cho ứng dụng đơn giản hoặc microservice chỉ cần một container.
- Pod nhiều container: Nhiều container được đặt đồng vị trí và chạy cùng nhau. Có lợi cho ứng dụng phức tạp khi các container khác nhau cần giao tiếp và chia sẻ tài nguyên.
Namespace
Namespace cung cấp cách phân vùng logic tài nguyên trong một cluster. Điều này giúp tổ chức và quản lý tài nguyên tốt hơn, đồng thời siết chặt kiểm soát bảo mật.
Namespace cũng có thể dùng để quản lý các môi trường khác nhau, như phát triển, kiểm thử trung gian và sản xuất. Điều này đảm bảo tài nguyên được cô lập và không bị ảnh hưởng bởi thay đổi ở môi trường khác.
Để xem các namespace trong cluster, bạn có thể dùng lệnh:
kubectl get namespaces
Để chuyển đổi giữa các namespace, dùng lệnh sau
kubectl config set-context --current --namespace <namespace name>
Operator
Operator là các phần mở rộng phần mềm giúp tự động hóa quản lý tài nguyên Kubernetes. Chúng sử dụng controller tùy chỉnh và mở rộng API để quản lý các tác vụ phức tạp hiệu quả và tự động hơn.
Một số operator phổ biến gồm:
- Prometheus để giám sát
- Operator etcd để quản lý các cụm etcd
Sử dụng operator có thể đơn giản hóa đáng kể việc quản lý ứng dụng và tài nguyên trong cluster. Nhờ khả năng tự động hóa và cung cấp tính năng nâng cao, chúng ngày càng được người dùng Kubernetes ưa chuộng.
Các thành phần lõi của Kubernetes
Trong hầu hết môi trường Kubernetes có một tập các thành phần cốt lõi.

Nguồn: Kubernetes
Danh sách các thành phần và chức năng của chúng:
- API Server: Thành phần này đóng vai trò điểm quản lý trung tâm cho tất cả tài nguyên Kubernetes. Nó nhận yêu cầu từ người dùng và các thành phần khác, rồi áp dụng chính sách để quản lý cluster.
- Controller manager: Chịu trách nhiệm duy trì trạng thái mong muốn của cluster bằng cách liên tục theo dõi và điều hòa các thay đổi trên đối tượng trong cluster.
- etcd: Kho khóa-giá trị phân tán đóng vai trò là datastore chính cho Kubernetes. Nó lưu trữ toàn bộ dữ liệu cluster và đảm bảo tính nhất quán, sẵn sàng của dữ liệu.
- kubelet: Tác tử chạy trên mỗi node trong cluster, chịu trách nhiệm quản lý container, đảm bảo chúng chạy theo cấu hình đã chỉ định.
- Kube Proxy: Thành phần chạy trên mỗi node, chịu trách nhiệm định tuyến lưu lượng mạng đến đúng container.
Kubernetes hoạt động như thế nào
Như đã đề cập, Kubernetes tự động hóa việc triển khai, mở rộng và quản lý ứng dụng container trên các cluster. Nó đảm bảo tính sẵn sàng cao, sử dụng tài nguyên hiệu quả và tự phục hồi mà không cần can thiệp thủ công.
Thay vì quản lý từng container, Kubernetes nhóm chúng thành Pod và phân phối trên các worker node, các node này giao tiếp với control plane để duy trì trạng thái mong muốn của hệ thống.
Tóm lược cách Kubernetes hoạt động:
- Định nghĩa triển khai ứng dụng: Bạn chỉ định trạng thái mong muốn trong tệp YAML, bao gồm số bản sao, giới hạn tài nguyên và quy tắc mạng.
- Lập lịch khối lượng công việc: Scheduler gán Pod cho các worker node dựa trên tài nguyên sẵn có.
- Quản lý trạng thái cluster: Controller Manager đảm bảo hệ thống duy trì đúng số lượng Pod, thay thế những Pod gặp lỗi.
- Xử lý mạng: Kubernetes quản lý giao tiếp giữa các dịch vụ và truy cập bên ngoài thông qua Service và Ingress controller.
- Mở rộng và tự phục hồi: Kubernetes điều chỉnh số Pod đang chạy theo nhu cầu và tự động khởi động lại container bị lỗi.
Bằng cách xử lý sự phức tạp của hạ tầng, Kubernetes giúp các nhóm tập trung xây dựng ứng dụng thay vì quản lý triển khai, trở thành yếu tố thiết yếu cho các khối lượng công việc quy mô lớn, bền bỉ trên nhiều ngành.
Thuật ngữ và khái niệm thường gặp
Hãy xem một số thuật ngữ quan trọng bạn cần biết và định nghĩa của chúng:
- YAML manifest: Các tệp cấu hình xác định trạng thái mong muốn của ứng dụng hoặc hạ tầng. Chúng có thể dùng để tạo, cập nhật và xóa tài nguyên trong Kubernetes.
- StatefulSet so với Deployment: Hai loại controller trong Kubernetes quản lý vòng đời của pod. Deployment thường dùng cho ứng dụng không trạng thái, còn StatefulSet dùng cho ứng dụng có trạng thái.
- Service: Cung cấp địa chỉ IP ổn định và tên DNS để truy cập ứng dụng trong cluster. Chúng cũng cho phép giao tiếp giữa các pod.
- ConfigMap: Dùng để lưu trữ dữ liệu cấu hình theo cặp khóa-giá trị mà ứng dụng có thể truy cập.
- Secret: Tương tự ConfigMap, dùng để lưu trữ thông tin nhạy cảm như mật khẩu hoặc khóa API.
Bắt đầu với Kubernetes
Làm việc với Kubernetes có thể gây choáng ngợp, đặc biệt khi phải hiểu nhiều thuật ngữ và khái niệm. Tuy nhiên, khi đã nắm vững các thuật ngữ thiết yếu này, việc sử dụng nền tảng sẽ trở nên dễ dàng hơn nhiều.
Hãy bắt đầu bằng cách xem một số công cụ dùng với Kubernetes.
Công cụ cho người mới bắt đầu
Với người mới dùng Kubernetes, việc phải triển khai ứng dụng lên đám mây có thể quá tải. Vì vậy, bạn có thể dùng một số công cụ phổ biến để triển khai cục bộ.
Dưới đây là 2 công cụ được dùng nhiều nhất:
1. Minikube
Minikube là triển khai Kubernetes gọn nhẹ có thể chạy trên một máy chủ duy nhất. Thường chạy một cluster một nút trong máy ảo (VM) trên laptop hoặc máy trạm của bạn.
Vì sao dùng:
- Thiết lập và gỡ bỏ dễ dàng.
- Tuyệt vời cho phát triển cục bộ và thử nghiệm ý tưởng.
- Tốn ít tài nguyên hơn so với một cluster đầy đủ.
Cách cài Minikube (Ví dụ trên Windows):
# Cài đặt qua Windows Package Manager
winget install Kubernetes.minikube
Bạn sẽ thấy thông báo cài đặt như sau. Đồng ý các điều khoản nếu được hỏi bằng "Y".

Tiếp theo, để khởi động một cluster đơn giản trên minikube, dùng lệnh start sau:
# Khởi động cluster một nút
minikube start
Để kiểm tra node của cluster đã khởi động thành công, chạy lệnh get:
# Xác minh cluster đang chạy
kubectl get nodes
Lưu ý: Bạn cần cài đặt máy chủ API kubectl trên máy cục bộ (Trong nhiều trường hợp Minikube sẽ cài sẵn).
2. Kind (Kubernetes in Docker)
Kind là viết tắt của Kubernetes in Docker. Nó dùng container Docker làm "node" trong một cluster Kubernetes, cung cấp môi trường cluster cục bộ đơn giản dựa trên container.
Vì sao dùng:
- Khởi động nhanh hơn Minikube trong nhiều tình huống.
- Dễ dàng bật nhiều cluster thử nghiệm đồng thời, lý tưởng cho pipeline CI/CD.
- Thường dùng trong môi trường kiểm thử tự động nhờ chi phí tài nguyên thấp.
Cách cài Kind (Ví dụ trên Windows):
# Cài Kind bằng Windows Package Manager
winget install Kubernetes.kind
Sau khi cài, bạn có thể tạo một cluster đơn giản bằng lệnh create cluster và đặt tên.
# Tạo cluster cơ bản
kind create cluster --name example-cluster
Để kiểm tra cluster kind của bạn đã khởi động, dùng lệnh get sau.
# Kiểm tra các cluster đang chạy
kind get clusters
Bạn cũng có thể tương tác với cluster thông qua giao diện kubectl:
# Tương tác với cluster Kind bằng kubectl
kubectl get nodes
Lưu ý: Hãy đảm bảo bạn đã cài và chạy Docker.
Nhà cung cấp đám mây (EKS, GKE, AKS)
Khi chạy Kubernetes trên đám mây, dưới đây là một số nhà cung cấp để lựa chọn:
1. Amazon EKS (Elastic Kubernetes Service)
Amazon EKS là dịch vụ quản lý giúp dễ dàng chạy Kubernetes trên AWS mà không cần tự quản lý control plane hay worker node. Nó tích hợp với các dịch vụ AWS khác để có thêm tính năng như cân bằng tải, lưu trữ, tự động mở rộng và giám sát.
Một số tính năng bổ sung:
- Cung cấp tích hợp với các dịch vụ AWS khác (ví dụ: IAM, CloudWatch, ECR).
- Khả năng mở rộng và sẵn sàng cao được tích hợp sẵn.
2. Google GKE (Google Kubernetes Engine)
Google GKE là dịch vụ quản lý hoàn toàn để chạy Kubernetes trên Google Cloud Platform. Nó cung cấp tự động mở rộng, khả năng tự phục hồi và tích hợp với các dịch vụ Google Cloud khác.
Một số tính năng bổ sung:
- Tích hợp sâu với các dịch vụ GCP như Cloud Logging, Cloud Monitoring và Container Registry.
- Cung cấp chế độ autopilot, tự động quản lý hạ tầng cluster.
3. Azure AKS (Azure Kubernetes Service)
Azure AKS cung cấp các cluster Kubernetes dạng serverless, tích hợp hoàn toàn với các dịch vụ Azure khác như Storage, Networking và Load Balancing. Nó cũng hỗ trợ sẵn các công cụ DevOps như Helm và Prometheus.
Một số tính năng bổ sung:
- Tích hợp với Azure Active Directory, Azure Monitor, Container Registry, v.v.
- Cung cấp Kubernetes serverless (Virtual Nodes) sử dụng Azure Container Instances.
Tài nguyên học Kubernetes
Học Kubernetes lần đầu có thể khiến bạn choáng ngợp, nhưng có rất nhiều tài nguyên giúp bạn bắt đầu.
Một số tài nguyên khuyến nghị:
- Khóa học và tài nguyên DataCamp: Khóa học Introduction to Kubernetes và hướng dẫn về Containerization là những điểm khởi đầu tuyệt vời.
- Các hướng dẫn khởi đầu Kubernetes chuyên biệt của chúng tôi: Được tạo để cung cấp cho bạn những điều cơ bản.
Ví dụ triển khai Kubernetes
Để chạy ứng dụng trong Kubernetes, bạn theo một quy trình có cấu trúc gồm thiết lập cluster, triển khai ứng dụng dạng container, xuất bản dưới dạng service và mở rộng khi cần.
Chúng tôi đã trình bày chi tiết quy trình này trong hướng dẫn Kubernetes, dưới đây là tóm tắt ở mức cao:
Thiết lập một cluster Kubernetes
Sử dụng Minikube để tạo cluster cục bộ cho thử nghiệm và phát triển. Cài đặt Minikube và khởi động cluster bằng:
minikube start --driver=docker
kubectl get nodes
Triển khai một ứng dụng
Định nghĩa trạng thái mong muốn của ứng dụng trong tệp Deployment YAML. Ví dụ, triển khai máy chủ web Nginx như sau:
apiVersion: apps/v1
kind: Deployment
metadata:
name: hello-deployment
spec:
replicas: 1
selector:
matchLabels:
app: hello
template:
metadata:
labels:
app: hello
spec:
containers:
- name: hello-container
image: nginx:latest
ports:
- containerPort: 80
Áp dụng deployment bằng:
kubectl apply -f hello-deployment.yaml
Xuất bản ứng dụng dưới dạng service
Để ứng dụng có thể truy cập, tạo một Service bằng:
kubectl expose deployment hello-deployment --type=NodePort --port=80 --name=hello-service
Lấy URL bên ngoài và mở ứng dụng trong trình duyệt:
minikube service hello-service
Mở rộng và giám sát ứng dụng
Kubernetes cho phép bạn mở rộng ứng dụng một cách dễ dàng. Để tăng số bản sao:
kubectl scale deployment hello-deployment --replicas=3
Kiểm tra các Pod đang chạy:
kubectl get pods
Xem log để gỡ lỗi:
kubectl logs -f <pod-name>
Dưới đây là một số ví dụ để khám phá thêm cho các dự án nâng cao:
- Chạy các tác vụ streaming trong container (ví dụ: Spark trên Kubernetes, Kafka trên Kubernetes).
- Sử dụng Persistent Volume để gắn các giải pháp lưu trữ ngoài như AWS EBS, Azure Disks hoặc NFS.
- Triển khai ứng dụng phức tạp hơn (ví dụ: microservice nhiều tầng với cơ sở dữ liệu).
- Khám phá các tính năng nâng cao như Ingress controller, Service Mesh (ví dụ: Istio), biểu đồ Helm để quản lý gói.
Kết luận
Kubernetes là một nền tảng mạnh mẽ để triển khai và quản lý ứng dụng container ở quy mô lớn, trở thành công cụ thiết yếu cho kỹ sư dữ liệu cần môi trường đàn hồi, đáng tin cậy cho xử lý dữ liệu.
Nếu bạn muốn tìm hiểu thêm về Kubernetes, khóa học Introduction to Kubernetes của chúng tôi là điểm khởi đầu hoàn hảo.
Câu hỏi thường gặp về Kubernetes
Kubernetes có giống Docker không?
Không. Kubernetes là công cụ điều phối container, còn Docker là nền tảng đóng gói container. Chúng phối hợp để quản lý và triển khai container nhưng phục vụ những mục đích khác nhau.
Lợi ích của việc sử dụng Kubernetes là gì?
Kubernetes giúp quản lý và triển khai container dễ dàng hơn, cải thiện khả năng mở rộng và tính sẵn sàng của ứng dụng, đồng thời hỗ trợ cập nhật và hoàn tác tự động.
Kubernetes có thể dùng trong bất kỳ loại môi trường nào không?
Có. Kubernetes có thể dùng trong cả môi trường tại chỗ và đám mây. Nó rất linh hoạt và thích ứng với nhiều cấu hình hạ tầng khác nhau.
Học sử dụng Kubernetes có khó không?
Dù có đường cong học tập nhất định, nhưng có rất nhiều tài nguyên trực tuyến như DataCamp và các hướng dẫn khởi đầu do chính Kubernetes cung cấp.
Kiến trúc của Kubernetes là gì?
Kubernetes theo kiến trúc client-server, với master node điều khiển cluster và worker node chạy khối lượng công việc ứng dụng. Điều này cho phép hệ thống giao tiếp và quản lý hiệu quả.

Tôi là Austin, một blogger và cây bút công nghệ với nhiều năm kinh nghiệm làm nhà khoa học dữ liệu và nhà phân tích dữ liệu trong lĩnh vực chăm sóc sức khỏe. Khởi đầu hành trình công nghệ với nền tảng sinh học, tôi hiện hỗ trợ những người khác thực hiện chuyển đổi tương tự thông qua blog công nghệ của mình. Niềm đam mê công nghệ đã đưa tôi đến với việc cộng tác viết cho hàng chục công ty SaaS, truyền cảm hứng cho người khác và chia sẻ trải nghiệm của bản thân.