Kubernetes cơ bản: Triển khai ứng dụng container từ A đến Z






Kubernetes cơ bản: Triển khai ứng dụng container từ A đến Z

Kubernetes (thường viết tắt K8s) là nền tảng orkestration container mã nguồn mở phổ biến nhất hiện nay. Nó 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. Bài viết này tổng hợp kiến thức cốt lõi từ tài liệu chính thức Kubernetes để bạn nắm vững kiến trúc, Pod, Deployment, Service và thực hành deploy một ứng dụng mẫu từ A đến Z.

Kiến trúc Kubernetes: Control Plane và Worker Nodes

1. Kiến trúc Kubernetes

Một cụm Kubernetes bao gồm hai phần chính:

  • Control Plane (Mặt phẳng điều khiển): Quyết định trạng thái mong muốn của cụm. Các thành phần chính:
    • kube-apiserver: Cổng API duy nhất, tiếp nhận mọi yêu cầu.
    • etcd: Kho dữ liệu khóa-giá trị phân tán, lưu trữ toàn bộ trạng thái cụm.
    • kube-scheduler: Gán Pod mới vào Node phù hợp.
    • kube-controller-manager: Chạy các controller (ReplicaSet, Deployment, Service…) để đồng bộ trạng thái thực tế với trạng thái mong muốn.
    • cloud-controller-manager (tùy chọn): Tích hợp với nhà cung cấp đám mây.
  • Worker Nodes (Nút làm việc): Chạy workload thực tế. Mỗi Node có:
    • kubelet: Agent giao tiếp với API server, đảm bảo container chạy khỏe.
    • kube-proxy: Quản lý quy tắc mạng (IPVS/iptables) cho Service.
    • Container runtime: Chạy container (containerd, CRI-O, Docker Engine…).

Sự tiến hóa từ Physical Server → VM → Container

2. Pod – Đơn vị triển khai nhỏ nhất

Pod là đơn vị có thể tạo và quản lý nhỏ nhất trong Kubernetes. Một Pod bao gồm một hoặc nhiều container chia sẻ network namespace, storage volume và vòng đời.

  • Một container mỗi Pod: Mô hình phổ biến nhất, Pod đóng vai trò wrapper cho container đơn.
  • Nhiều container trong một Pod: Dùng cho sidecar (logging, proxy), init container, hoặc các tiến trình phối hợp chặt chẽ.
  • Pod có vòng đời rõ ràng: Pending → Running → Succeeded/Failed. Khi Node lỗi, Pod trên Node đó bị xóa và Deployment sẽ tạo Pod mới thay thế.

Sơ đồ tạo Pod

3. Deployment – Quản lý ReplicaSet và cập nhật ứng dụng

Deployment là controller cấp cao khai báo trạng thái mong muốn của ứng dụng (số bản sao, image, chiến lược cập nhật). Deployment tự tạo và quản lý ReplicaSet để đảm bảo số lượng Pod đúng như spec.

  • Declarative updates: Chỉnh sửa spec.template (image, env, resources…) → Deployment tự động rolling update.
  • Rollback: kubectl rollout undo deployment/ quay lại phiên bản trước.
  • Scaling: kubectl scale deployment/ --replicas=5 hoặc HPA (Horizontal Pod Autoscaler) tự động scale theo CPU/metric tùy chỉnh.

4. Service – Phát hiện và cân bằng tải

Service cung cấp một endpoint ổn định (IP ảo, DNS) cho một tập hợp Pod thay đổi động. Các loại Service chính:

  • ClusterIP (mặc định): Chỉ truy cập được bên trong cụm.
  • NodePort: Mở port cố định trên mọi Node (30000-32767), truy cập từ ngoài qua :.
  • LoadBalancer: Yêu cầu cloud provider cấp Load Balancer ngoài, tự động tạo NodePort & ClusterIP.
  • ExternalName: Ánh xạ Service ra DNS ngoài cụm (CNAME).

Service sử dụng selector (label) để gắn Pod. Khi Pod scale up/down, EndpointSlice tự động cập nhật.

5. Ví dụ triển khai ứng dụng Nginx đơn giản

Dưới đây là quy trình deploy một web server Nginx với Deployment + Service ClusterIP.

  1. Tạo file deployment.yaml:
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx-deploy
    spec:
      replicas: 3
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: nginx:1.25
            ports:
            - containerPort: 80
    
  2. Tạo file service.yaml:
    apiVersion: v1
    kind: Service
    metadata:
      name: nginx-svc
    spec:
      selector:
        app: nginx
      ports:
      - protocol: TCP
        port: 80
        targetPort: 80
      type: ClusterIP
    
  3. Apply và kiểm tra:
    kubectl apply -f deployment.yaml
    kubectl apply -f service.yaml
    kubectl get pods -l app=nginx
    kubectl get svc nginx-svc
    
  4. Truy cập thử (từ Pod khác trong cụm):
    kubectl run curl --image=curlimages/curl --rm -it -- curl nginx-svc
    

6. Tóm tắt và bước tiếp theo

  • Kubernetes giải quyết bài toán vận hành container ở quy mô lớn: tự heal, scale, rolling update, service discovery.
  • Nắm vững 4 khái niệm cốt lõi: Cluster architecture, Pod, Deployment, Service.
  • Thực hành tạo cluster cục bộ bằng Minikube hoặc Kind để test ngay.
  • Tìm hiểu thêm: ConfigMap/Secret quản lý cấu hình, Ingress cho HTTP routing, Helm package manager, Prometheus/Grafana monitoring.
Bài viết được tổng hợp từ tài liệu chính thức Kubernetes (CC BY 4.0). Ảnh minh họa nguồn: kubernetes.io.


Tôi là một lập trình viên IOS. Code chính là IOS nhưng thỉnnh thoảng vẫn đá sang Android hoặc web. Mặc dù không quá thông thạo nhưng tôi sẽ chia sẻ những kiến thức mà mình đã tìm hiểu, áp dụng qua.

Bài viết liên quan

Vitest và React Testing Library: Unit Test React Hiện Đại Thay Thế Jest 2025

Vitest và React Testing Library đang trở thành bộ đôi testing phổ biến nhất cho dự án React hiện đại. Nếu bạn vẫn còn dùng Jest, bài viết này sẽ…

Xem thêm

Rust Async Trait và GAT: Viết code bất đồng bộ an toàn kiểu

Rust Async Trait và GAT: Viết code bất đồng bộ an toàn kiểu Vấn đề với async fn trong trait trước Rust 1.75 Lập trình bất đồng bộ (async) đã…

Xem thêm

eBPF trong Linux: Giám sát và networking hiệu năng không cần kernel module

eBPF trong Linux: Giám sát và networking hiệu năng không cần kernel module eBPF (extended Berkeley Packet Filter) đang thay đổi cách nhà phát triển và system engineer tương tác…

Xem thêm
0 0 đánh giá
Article Rating
Theo dõi
Thông báo của
guest
0 Comments
Cũ nhất
Mới nhất Được bỏ phiếu nhiều nhất