Kubernetes là một trong những công cụ quan trọng nhất đối với DevOps và điện toán đám mây hiện nay, giúp quản lý ứng dụng chạy trong container một cách tự động, linh hoạt và đáng tin cậy hơn. Nếu bạn mới bắt đầu tìm hiểu, bài Kubernetes tutorial này sẽ giúp bạn tìm hiểu từng bước vững chắc, nhanh chóng làm quen với các khái niệm và bắt đầu thực hành Kubernetes cơ bản.
Đọc bài viết sau để biết thêm về:
- Giới thiệu về Kubernetes
- Các thành phần chính trong Kubernetes
- Kubernetes tutorial dành cho người mới bắt đầu
- Thực hành deploy ứng dụng đầu tiên trên Kubernetes
- Các khái niệm nâng cao của Kubernetes nên biết
- Các lỗi thường gặp khi làm việc với Kubernetes và cách khắc phục
Tổng quan về Kubernetes
Kubernetes là một nền tảng mã nguồn mở được phát triển bởi Google và hiện được duy trì bởi Cloud Native Computing Foundation (CNCF). Nó được thiết kế để tự động hóa việc triển khai, mở rộng và quản lý các ứng dụng chạy trong container. Công cụ này giúp các nhà phát triển và quản trị viên dễ dàng kiểm soát hạ tầng phức tạp, từ môi trường cục bộ cho đến các hệ thống đám mây lớn.
Một số điểm mạnh của Kubernetes:
- Điều phối thông minh dựa trên mô hình khai báo (declarative model). Người dùng chỉ cần khai báo trạng thái mong muốn của hệ thống, chẳng hạn như số lượng bản sao ứng dụng (replicas), dung lượng tài nguyên hoặc cấu hình mạng, và Kubernetes sẽ tự động duy trì trạng thái đó thông qua control loop liên tục. Nếu một container hoặc pod gặp sự cố, Kubernetes sẽ tự động khởi động lại hoặc thay thế nó, đảm bảo ứng dụng luôn hoạt động ổn định.
- Hỗ trợ cân bằng tải (load balancing), tự phục hồi (self-healing), phân bổ tài nguyên linh hoạt (resource management), và mở rộng quy mô (scaling) theo nhu cầu thực tế. Nhờ đó, các nhóm phát triển có thể tập trung vào việc viết mã và cải tiến sản phẩm thay vì phải lo lắng về hạ tầng vận hành phía sau.
Bài tutorial dưới đây sẽ cung cấp cho bạn một lộ trình đơn giản nhưng hiệu quả để nhanh chóng hiểu cách sử dụng công cụ này.
Đọc chi tiết: Kubernetes là gì: Toàn diện kiến thức Kubernetes nền tảng cần biết
Chuẩn bị môi trường để sử dụng Kubernetes
- Cài đặt một cluster nhỏ: Bạn có thể sử dụng công cụ như Minikube hoặc Kind để tạo một môi trường thử nghiệm trên máy cá nhân.
- Cài đặt công cụ dòng lệnh kubectl: Đây là chiếc “cầu nối” giúp bạn tương tác với Kubernetes.
- Hiểu về container và image: Kubernetes không tạo container, mà điều phối chúng. Vì vậy, bạn cần nắm cơ bản về Docker hoặc các công cụ tương tự trước khi làm theo một Kubernetes tutorial nào đó.
Các khái niệm và thành phần chính trong Kubernetes
Để áp dụng Kubernetes tutorial hiệu quả, bạn cần hiểu hệ thống này được cấu tạo như thế nào và những khái niệm cốt lõi bạn sẽ làm việc hằng ngày.
Các thành phần chính trong Kubernetes
Một cluster Kubernetes thường được chia thành hai nhóm lớn: Control Plane (mặt điều khiển) và Node (máy chủ thực thi), cùng với một số thành phần phụ trợ mở rộng.
Control Plane (mặt điều khiển)
Đây là bộ não của cluster: nơi đưa ra quyết định, lập kế hoạch và duy trì trạng thái hệ thống để đảm bảo mọi thứ hoạt động như mong muốn. Các thành phần chính gồm:
- kube-apiserver: Chịu trách nhiệm tiếp nhận tất cả yêu cầu RESTful API từ người dùng và các thành phần khác, đóng vai trò là cổng truy cập chính của cluster và là thành phần duy nhất tương tác trực tiếp với etcd.
- etcd: Kho dữ liệu dạng khóa-giá trị phân tán (distributed key-value store), lưu toàn bộ cấu hình và trạng thái hiện tại (current state) của cluster, được thiết kế với khả năng sẵn sàng cao (high availability) và đồng nhất dữ liệu (consistency).
- kube-scheduler: Phân công các Pod chưa được gán lên một node phù hợp dựa trên yêu cầu tài nguyên, ràng buộc (constraints), chính sách ưu tiên (affinity/anti-affinity), vị trí dữ liệu (data locality) và quy tắc lập lịch (scheduling policies).
- kube-controller-manager: Chạy các controller theo vòng lặp (control loops) để duy trì trạng thái mong muốn. Ví dụ:
- Replication Controller: đảm bảo số lượng bản sao (replica) của ứng dụng luôn đúng.
- Node Controller: giám sát tình trạng của các node.
- Endpoint Controller: quản lý danh sách Service endpoints.
- Service Account & Token Controller: quản lý tài khoản dịch vụ và token truy cập.
- cloud-controller-manager (nếu sử dụng cloud provider): Cho phép Kubernetes tương tác với dịch vụ của nhà cung cấp đám mây, xử lý các công việc phụ thuộc đám mây như tự động tạo LoadBalancer, quản lý storage, node lifecycle trên cloud
Node (Worker Node — máy chủ thực thi)
Đây là nơi các ứng dụng thực sự chạy. Node chứa container, Pod và mọi thứ để xử lý workload. Trên mỗi node thường có các thành phần sau:
- kubelet: Agent chạy trên mỗi node, đảm bảo các Pod và container đang hoạt động đúng theo mô tả và liên tục báo cáo với Control Plane.
- kube-proxy: Quản lý mạng và luật định tuyến để giúp các Service và Pod giao tiếp với nhau hoặc với bên ngoài cluster.
- Container runtime: Phần mềm chịu trách nhiệm chạy container (ví dụ Docker, containerd…). Node cần một runtime để hỗ trợ chạy các container thực tế.
Đọc chi tiết: Kubernetes architecture: Tìm hiểu tổng quan A-Z cho người mới
Add-ons & Thành phần mở rộng
Ngoài hai nhóm chính trên, một cluster Kubernetes thường kết hợp thêm các add-on để mở rộng tính năng:
- DNS nội bộ cho cluster, giúp tên dịch vụ hoạt động.
- Dashboard/Web UI để quản lý thông qua giao diện người dùng.
- Monitoring, logging cấp cluster (ví dụ: thu thập metrics, lưu trữ log) để theo dõi sức khỏe ứng dụng và hạ tầng.
Các khái niệm thực hành cơ bản
- Pod: đơn vị nhỏ nhất bạn sẽ thao tác trong Kubernetes.
- Service: cách kết nối và truy cập ứng dụng bên trong và bên ngoài cluster.
- Deployment: cách bạn khai báo “trạng thái mong muốn” với Kubernetes và để hệ thống duy trì trạng thái đó.
- Các lệnh cơ bản: kubectl apply, kubectl get pods, kubectl scale, kubectl logs,… giúp bạn tương tác với cluster.
Các bước tạo ứng dụng mẫu
Bây giờ, hãy thử áp dụng những gì bạn đã học bằng cách tạo và triển khai một ứng dụng mẫu để hiểu rõ cách Kubernetes vận hành trong thực tế.
- Tạo ứng dụng mẫu đơn giản, chẳng hạn Nginx, và triển khai nó lên cluster.
- Expose ứng dụng ra bên ngoài: Tạo một Service để mở cổng truy cập, cho phép bạn thử nghiệm ứng dụng trực tiếp từ trình duyệt hoặc Postman.
- Thử scale ứng dụng lên nhiều bản sao và quan sát cách Kubernetes phân phối tải.
- Thử cập nhật phiên bản ứng dụng (rolling update) và xem cách Kubernetes quản lý việc chuyển đổi. Việc “khởi động lại ứng dụng khi cần” và “mở rộng khi có nhu cầu” là điểm nổi bật của Kubernetes so với việc chỉ chạy container thủ công.
Tìm hiểu các tính năng nâng cao
Khi bạn đã hoàn thành các bước cơ bản, hãy mở rộng góc nhìn sang môi trường thực tế hơn, nơi nhiều node, nhiều service và mạng phức tạp cùng hoạt động. Khi đó, bạn có thể tiếp tục tìm hiểu các chủ đề nâng cao vận hành và tối ưu hoá cluster Kubernetes trong thực tế.
Các tính năng nâng cao của Kubernetes nên biết:
Mạng & Ingress
Kubernetes cung cấp khả năng mạng phức tạp hơn nhiều so với chỉ chạy container đơn lẻ. Bạn sẽ học về:
- Kết nối giữa Pod với Pod: Mỗi Pod có địa chỉ IP riêng, và các Pod có thể kết nối qua plugin giao diện mạng container (CNI – Container Network Interface) như Calico, Flannel, Weave Net, Cilium.
- Service và Network Policy: Khi các Pod thay đổi địa chỉ IP hoặc được tái khởi động, Service đóng vai trò giữ endpoint ổn định cho truy cập và cân bằng tải qua ClusterIP, NodePort, LoadBalancer. Network Policy hoạt động như tường lửa ở layer 3/4 cho phép kiểm soát luồng truy cập giữa các Pod.
- Ingress Controller: công cụ điều hướng HTTP/HTTPS từ bên ngoài vào bên trong cluster với tinh năng như:
- SSL termination – chấm dứt mã hóa SSL/TLS ở cấp Ingress để giảm tải cho ứng dụng.
- Name-based virtual hosting – định tuyến theo tên miền.
- Path-based routing – định tuyến theo đường dẫn URL.
- Các Ingress Controller phổ biến: NGINX, Traefik, HAProxy, Istio Gateway.
Lưu trữ & StatefulSet
Đối với những ứng dụng cần giữ trạng thái (database, file system), Kubernetes có các cơ chế nâng cao như:
- Volume và Persistent Volume: Giúp gắn kết dữ liệu bên ngoài Pod, đảm bảo dữ liệu không mất khi Pod bị xoá hoặc tái tạo. Có nhiều loại volume khác nhau: emptyDir, hostPath, configMap, secret, và persistent volume với các kiểu lưu trữ (storage class) đa dạng như NFS, iSCSI, hoặc dịch vụ lưu trữ đám mây như EBS và Azure Disk.
- StatefulSet: Đối tượng đặc biệt để quản lý các Pod có trạng thái. Mỗi Pod giữ được danh tính riêng và liên kết với volume riêng biệt. Hỗ trợ triển khai (deployment) và xóa (deletion) theo thứ tự.
- Storage Classes và Dynamic Provisioning: StorageClass định nghĩa kiểu lưu trữ (storage type) mà cluster có thể sử dụng. Cơ chế Dynamic Provisioning (cấp phát động) cho phép Kubernetes tự động tạo Persistent Volume (PV) khi có yêu cầu từ Persistent Volume Claim (PVC), giúp tiết kiệm thời gian và giảm thao tác thủ công cho quản trị viên.
Quản lý tài nguyên & Lập lịch nâng cao
Khi môi trường thực sự lớn và có nhiều node, việc quản lý tài nguyên và scheduling hiệu quả là rất quan trọng. Kubernetes cung cấp nhiều cơ chế tinh chỉnh giúp bạn kiểm soát, phân bổ và tối ưu tài nguyên một cách thông minh:
- Resource Requests & Limits: Xác định mức tối thiểu và tối đa CPU/RAM cho container để tránh quá tải hoặc lãng phí tài nguyên.
- Affinity / Anti-Affinity (Node Affinity): Xác định các quy tắc để Pods chạy trên node phù hợp hoặc tránh node không phù hợp.
- Taints & Tolerations: Dùng để ngăn pods không phù hợp chạy trên node bị gắn “taint”.
- Priority Classes và Preemption: Xác định độ ưu tiên của các pod, cho phép loại bỏ (evict) những pod có mức ưu tiên thấp khi cần tài nguyên cho các pod có ưu tiên cao hơn.
Tự động mở rộng (Scaling) & Khả năng cao sẵn sàng (High Availability)
Để tối ưu sức mạnh của Kubernetes, bạn cần biết cách làm chủ các cơ chế tự động mở rộng (auto-scaling) và duy trì high availability (HA) trong hệ thống.
- Horizontal Pod Autoscaler: Tự động tăng/giảm số lượng Pod dựa trên metric như CPU/RAM.
- Vertical Pod Autoscaler (VPA): Tự động điều chỉnh resource requests/limits của containers dựa trên usage patterns.
- Cluster Autoscaler: Tự động điều chỉnh số lượng node trong cluster khi workload tăng hoặc giảm.
- Pod Disruption Budgets (PDB): Đảm bảo số lượng tối thiểu các pod vẫn hoạt động trong những gián đoạn tự nguyện (như khi cập nhật hoặc drain node).
Mở rộng & Tích hợp (Custom Resources & Operators)
Kubernetes không chỉ bó hẹp trong các đối tượng có sẵn, mà bạn hoàn toàn có thể mở rộng hệ thống để đáp ứng nhu cầu riêng của ứng dụng bằng các tính năng:
- Custom Resource Definitions (CRDs): Có thể định nghĩa các loại object riêng cho phần mềm của bạn.
- Operators: Chương trình tự động hóa dùng CRDs để quản lý ứng dụng hoặc tài nguyên phức tạp như database, Kafka,…
Tuy nhiên, bạn không cần học tất cả ngay lập tức. Hãy bắt đầu từ những bước nhỏ, thực hành đều đặn và mở rộng dần phạm vi hiểu biết. Hãy nhớ: Mục tiêu đầu tiên là “hiểu và chạy được một ứng dụng container trên Kubernetes”, rồi tiếp đến là “quản lý, mở rộng, vận hành”.
Thực hành deploy ứng dụng đầu tiên trên Kubernetes
Tiếp theo cùng thực hành triển khai ứng dụng đầu tiên với Kubernetes – từ định nghĩa ứng dụng bằng file YAML, đến khai báo Deployment và Service, rồi chạy trong cluster.
1. Chuẩn bị môi trường
- Đảm bảo bạn đã bật Kubernetes trong Docker Desktop hoặc đã kết nối với một cluster Kubernetes đang chạy.
- Cài đặt công cụ dòng lệnh kubectl và kiểm tra kết nối bằng kubectl cluster-info và thiết lập namespace bằng kubectl create namespace <name> hoặc context phù hợp với kubectl config use-context <context-name> để thao tác với cluster..
- Kiểm tra kubectl version để đảm bảo tương thích: kubectl version –short
2. Tạo file manifest cho ứng dụng
Tạo một file YAML (ví dụ app-deploy.yaml) mô tả các đối tượng Kubernetes như Deployment và Service.
Ví dụ cụ thể một file manifest hoàn chỉnh:
# Deployment definition
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
labels:
app: my-app
spec:
replicas: 3
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-app-container
image: nginx:latest
ports:
- containerPort: 80
resources:
requests:
memory: "64Mi"
cpu: "250m"
limits:
memory: "128Mi"
cpu: "500m"
---
# Service definition
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
type: NodePort
selector:
app: my-app
ports:
- protocol: TCP
port: 80
targetPort: 80
nodePort: 30080
Lưu ý: file YAML luôn gồm các phần apiVersion, kind, metadata, và spec. YAML rất nhạy cảm với indentation – dùng spaces, không dùng tabs.
3. Triển khai ứng dụng vào cluster
Trong terminal, điều hướng đến thư mục chứa file YAML và chạy lệnh:
kubectl apply -f app-deploy.yaml
Khi thực hiện đúng, bạn sẽ thấy output tương tự như:
deployment.apps/my-app created
service/my-service created
Hoặc nếu muốn apply vào namespace cụ thể:
kubectl apply -f app-deploy.yaml -n <namespace-name>
4. Kiểm tra trạng thái triển khai
Dùng lệnh:
kubectl get deployments
kubectl get pods
kubectl get services
Hoặc xem tất cả resources cùng lúc bằng lệnh:
kubectl get all
Để xem chi tiết hơn:
kubectl describe deployment my-app
kubectl describe service my-service
Kiểm tra xem Deployment đã tạo đủ bản sao Pod chưa (cột READY hiển thị 3/3), và Service đã được tạo với CLUSTER-IP, EXTERNAL-IP (nếu có) hoặc port phù hợp.
Nếu mọi thứ hiển thị 3/3 trong cột READY hoặc tương tự, nghĩa là ứng dụng đã chạy thành công. Status của Pod phải là “Running”.
5. Truy cập ứng dụng và thử nghiệm
Nếu bạn sử dụng Service loại NodePort, truy cập http://localhost:<nodePort> từ trình duyệt để xem ứng dụng chạy.
Với Minikube, dùng lệnh sau để mở browser tự động:
minikube service my-service
Hoặc dùng port-forward để test local:
kubectl port-forward service/my-service 8080:80
Sau đó, hãy quan sát cách Kubernetes phân phối và giữ cho ứng dụng hoạt động. Bạn cũng có thể thử nâng cấp bản image hoặc thay đổi số lượng bản sao để thực hành tiếp.
6. Dọn dẹp sau khi thử nghiệm
Khi bạn muốn xóa ứng dụng thử nghiệm, dùng lệnh sau để gỡ Deployment và Service khỏi cluster:
kubectl delete -f app-deploy.yaml
Hoặc xóa từng resource:
kubectl delete deployment my-app
kubectl delete service my-service
Hoặc xóa tất cả trong namespace:
kubectl delete all --all -n <namespace-name>
Khắc phục các lỗi thường gặp khi làm việc với Kubernetes
Phần tiếp theo của Kubernetes tutorial này sẽ giúp bạn hiểu và biết cách khắc phục các lỗi thường gặp để nhanh thành thạo hơn:
CrashLoopBackOff
- Triệu chứng: Pod liên tục khởi động lại, trạng thái báo “CrashLoopBackOff” với restart count tăng dần.
- Nguyên nhân phổ biến: Ứng dụng crash ngay sau khi khởi động, command hoặc args sai, cấu hình probe (liveness/readiness) sai, hoặc thiếu tài nguyên.
- Cách khắc phục:
- Kiểm tra log của pod:
kubectl logs <pod-name> - Dùng kubectl describe pod <pod-name> để xem sự kiện và lỗi.
- Điều chỉnh yêu cầu tài nguyên (requests/limits) nếu pod bị thiếu CPU/RAM.
- Kiểm tra probe nếu có, đảm bảo ứng dụng cho phép probe chạy đúng thời điểm.
- Kiểm tra log của pod:
ImagePullBackOff
- Triệu chứng: Pod không thể tải image, trạng thái “ImagePullBackOff”.
- Nguyên nhân phổ biến: Tên image hoặc tag sai, không có quyền truy cập registry, mạng bị chặn.
- Cách khắc phục:
- Kiểm tra image và tag trong manifest có đúng hay không.
- Nếu sử dụng registry riêng, đảm bảo đã tạo Secret và pod tham chiếu đúng.
- Kiểm tra kết nối mạng từ node đến registry.
- Xóa và tái tạo pod nếu cần.
Exit Code 1
- Triệu chứng: Container bắt đầu nhưng ngay lập tức thoát với mã 1.
- Nguyên nhân phổ biến: Lỗi ứng dụng, tham chiếu file hoặc môi trường không tồn tại, hoặc cấu hình sai.
- Cách khắc phục:
- Xem log container để tìm message chi tiết.
- Kiểm tra environment variables, tham chiếu file, quyền truy cập.
- Chạy thử image ngoại tuyến để kiểm tra trước khi deploy.
Node Not Ready
- Triệu chứng: Node trong cluster bị trạng thái “NotReady”, gây pods không được lịch hoặc chuyển sang Unknown.
- Nguyên nhân phổ biến: Áp lực đĩa (node disk pressure), áp lực bộ nhớ (memory pressure), áp lực tiến trình (PID pressure), lỗi kubelet, sự cố container runtime, hoặc vấn đề về mạng nội bộ và ổ đĩa quá tải.
- Cách khắc phục:
- Dùng
kubectl get nodesvàkubectl describe node <node-name>để để kiểm tra phần Conditions. - SSH vào node và check:
systemctl status kubelet, journalctl -u kubelet - Kiểm tra tài nguyên hệ thống bằng các lệnh: df -h, memory: free -h, processes: ps aux | wc -l
- Thực hiện drain node để di chuyển (migrate) các pod sang node khác:
kubectl drain <node-name> --ignore-daemonsets - Khởi động lại node hoặc dịch chuyển pods sang node khác.
- Xóa node khỏi cluster nếu nó không hồi phục.
- Dùng
Sai lầm thường gặp khi sử dụng Kubernetes và cách tránh
Khi mới làm quen với Kubernetes, nhiều người thường mắc phải những lỗi cơ bản khiến việc vận hành và triển khai trở nên phức tạp hơn. Dưới đây là 7 sai lầm phổ biến và cách khắc phục hiệu quả nhất.
Không thiết lập giới hạn tài nguyên (Requests & Limits)
- Sai lầm: Bỏ qua việc cấu hình requests và limits khiến Pod chiếm dụng quá nhiều tài nguyên hoặc bị scheduler phân phối sai node, có thể gây OOMKilled hoặc CPU throttling.
- Cách tránh: Đặt giá trị nhỏ hợp lý (ví dụ: CPU 100m, Memory 128Mi), theo dõi thực tế qua metrics rồi tinh chỉnh dần.
Không sử dụng liveness/readiness probes
- Sai lầm: Chỉ đánh dấu container là “đang chạy” mà không kiểm tra xem ứng dụng đã sẵn sàng nhận request hay chưa hoặc còn hoạt động bình thường không.
- Cách tránh: Thêm livenessProbe và readinessProbe ngay từ đầu, ví dụ kiểm tra endpoint /healthz hoặc /ready.
Chỉ xem log cục bộ, không có hệ thống giám sát tập trung
- Sai lầm: Chỉ dựa vào kubectl logs, khiến log bị mất khi Pod xoá hoặc Node khởi động lại.
- Cách tránh: Thiết lập hệ thống log aggregation (Fluentd, Loki, hoặc Elasticsearch) và giám sát metrics bằng Prometheus hoặc Grafana.
Dùng chung cấu hình cho môi trường Dev và Prod
- Sai lầm: Sử dụng cùng một file manifest cho cả môi trường phát triển và sản xuất, dẫn đến scaling và bảo mật không phù hợp.
- Cách tránh: Tách cấu hình theo môi trường bằng Kustomize hoặc Helm, điều chỉnh replica, tài nguyên và rule bảo mật riêng cho từng môi trường.
Để lại tài nguyên cũ không sử dụng trong cluster
- Sai lầm: Các ConfigMap, Service hoặc PVC cũ không được xóa khiến cluster lãng phí tài nguyên và gây khó khăn trong quản lý.
- Cách tránh: Gắn nhãn cho tài nguyên (labels: owner, purpose), định kỳ kiểm tra bằng kubectl get all, hoặc dùng Kyverno để tự động dọn dẹp.
Đi quá sâu vào networking hoặc service mesh quá sớm
- Sai lầm: Học sinh mới thường nhảy ngay vào Istio, Calico hay multi-cluster mà chưa nắm rõ networking cơ bản.
- Cách tránh: Bắt đầu với mô hình đơn giản gồm Deployment, Service, Ingress, sau đó mới tìm hiểu service mesh nâng cao.
Thiếu bảo mật và cấu hình RBAC hợp lý
- Sai lầm: Cho phép quyền quá cao, dùng image tag latest hoặc container chạy dưới quyền root.
- Cách tránh:
- Áp dụng nguyên tắc Least Privilege (ít quyền nhất) khi tạo Role/RoleBinding.
- Dùng image version cụ thể thay vì latest.
- Bật PodSecurityAdmission hoặc Kyverno để enforce policy bảo mật.
Các câu hỏi thường gặp về Kubernetes tutorial
Có cần biết Docker trước khi học Kubernetes không?
Trước khi bắt đầu với Kubernetes tutorial, việc biết về Docker là rất hữu ích. Docker giúp bạn nắm được cách tạo, chạy và quản lý container – nền tảng mà Kubernetes sử dụng để triển khai và mở rộng ứng dụng.
Hãy đảm bảo bạn biết: phân biệt Container vs VM, hiểu các khái niệm image layers, port mapping, volume mounting, biến môi trường (environment variables),… Sau đó, chuyển sang Kubernetes để học cách triển khai, mở rộng và quản lý container ở quy mô lớn.
Tuy nhiên, cần lưu ý rằng Kubernetes hiện nay có xu hướng sử dụng containerd thay vì Docker runtime để tối ưu hiệu năng.
Đọc chi tiết: Docker là gì? Hãy để Senior DevOps Engineer trả lời cho bạn!
Kubernetes có thể chạy trên Windows hay không?
Câu trả lời là có. Kubernetes hỗ trợ triển khai trên Windows thông qua các công cụ như Minikube, Docker Desktop, hoặc chạy node Windows trong cluster hybrid. Tuy nhiên, các Kubernetes tutorial thường hướng dẫn thực hành trong môi trường Linux.
Kubernetes có thể thay thế Docker không?
Kubernetes không thay thế mà bổ sung cho Docker, bằng cách quản lý, tự động hóa và mở rộng các container được Docker tạo ra. Do đó, khi đọc các Kubernetes tutorial, bạn sẽ thấy hai công nghệ này thường phối hợp chặt chẽ để triển khai ứng dụng hiệu quả hơn.
Bảng so sánh dưới đây sẽ giúp bạn hiểu rõ về mối quan hệ giữa Kubernetes vs Docker:
| Tiêu chí | Kubernetes | Docker |
| Khái niệm chính | Hệ thống điều phối (orchestration) giúp quản lý và tự động hóa việc chạy container ở quy mô lớn. | Docker Engine là runtime để chạy container. Docker Platform bao gồm công cụ để build, ship và run ứng dụng trong container. |
| Mục tiêu sử dụng | Quản lý nhiều container trên nhiều máy chủ (node) hoặc môi trường cloud trong production. | Build, ship và run container đơn lẻ hoặc nhóm nhỏ container qua Docker Compose. |
| Phạm vi hoạt động | Hoạt động trên cluster (cụm nhiều máy), giúp ứng dụng luôn sẵn sàng và mở rộng linh hoạt. | Hoạt động trên từng máy cục bộ hoặc máy chủ riêng lẻ. Docker Swarm có thể quản lý cluster nhưng ít phổ biến hơn Kubernetes. |
| Triển khai ứng dụng | Tự động triển khai, cập nhật rolling updates và rollback thông qua Deployment và các resource khác như StatefulSet, DaemonSet. | Thực hiện thủ công qua docker run hoặc dùng Docker Compose cho multi-container. |
| Khả năng mở rộng (scaling) | Tự động scale dựa trên tài nguyên hoặc tải hệ thống (Horizontal Pod Autoscaler – HPA, Vertical Pod Autoscaler – VPA).. | Có thể scale container thủ công bằng Docker CLI hoặc docker-compose scale. |
| Cân bằng tải (Load balancing) | Tích hợp sẵn cơ chế Service giúp cân bằng tải tự động giữa các Pod qua ClusterIP, NodePort, LoadBalancer, Ingress. | Cần thiết lập thủ công hoặc dùng công cụ bổ sung như nginx, HAProxy. |
| Tự phục hồi (Self-healing) | Có khả năng phát hiện lỗi qua liveness/readiness probes và tự khởi động lại container hoặc reschedule Pod sang node khác khi cần. | Không có cơ chế tự động khởi động lại container khi lỗi trừ khi dùng restart policy hoặc Docker Swarm). |
| Khả năng quản lý tài nguyên | Quản lý tài nguyên toàn cluster, tối ưu CPU, RAM, storage qua Resource Quotas, Limit Ranges, Quality of Service (QoS). | Giới hạn ở mức container hoặc host. |
| Mức độ phức tạp | Cần nhiều thời gian học, nhưng mạnh mẽ và linh hoạt hơn. | Dễ học, phù hợp với người mới và development environment. |
| Mối quan hệ giữa hai công cụ | Kubernetes sử dụng Docker (hoặc container runtime khác) để điều phối và quản lý container. | Docker build và tạo container image theo OCI standard. |
| Networking | Mạng phức tạp với CNI plugins (Calico, Flannel, Weave), hỗ trợ network policies. | Bridge network mặc định, có thể tạo custom networks. |
| Storage | Persistent Volume (PV), Persistent Volume Claim (PVC) và Storage Class được sử dụng cho cấp phát lưu trữ động (dynamic provisioning). | Volumes và bind mounts cơ bản. |
| Monitoring & Logging | Tích hợp với Prometheus, Grafana, ELK Stack, và có sẵn metrics-server được tích hợp sẵn. | Cần cài đặt riêng các công cụ monitoring. |
Kubernetes có liên quan đến DevOps không?
Kubernetes có mối liên hệ chặt chẽ với DevOps. Kubernetes giúp tự động hóa việc triển khai, giám sát và mở rộng ứng dụng, những yếu tố cốt lõi trong quy trình DevOps.
Vì vậy, làm chủ Kubernetes sẽ giúp bạn nâng cao kỹ năng DevOps và tối ưu quy trình phát triển phần mềm.
Đọc chi tiết: DevOps roadmap: Lộ trình 16 bước học chi tiết trở thành DevOps
Tổng kết
Kubernetes tutorial dành cho người mới bắt đầu trên đây là bước nền tảng để bạn biết cách triển khai, quản lý và mở rộng ứng dụng một cách hiệu quả. Có kỹ năng Kubernetes sẽ giúp bạn làm chủ công nghệ container hiện đại, đồng thời mở ra nhiều cơ hội phát triển trong lĩnh vực DevOps và Cloud-native.

