Kubernetes là gì: Hệ điều phối container và kiến trúc cụm

Sơ đồ các thành phần Kubernetes gồm control plane, node và pod

Kubernetes là hệ điều phối mã nguồn mở dành cho container, thường được gọi tắt là K8s. Nó cho phép tự động hoá việc triển khai, mở rộng và quản lý hàng trăm container trên nhiều máy chủ cùng lúc.

Google phát triển Kubernetes từ năm 2014 dựa trên hệ thống Borg nội bộ, sau đó chuyển giao cho Cloud Native Computing Foundation vào năm 2015. Nhờ đó, Kubernetes trở thành tiêu chuẩn de facto cho việc vận hành container ở quy mô lớn.

Kubernetes giải quyết vấn đề gì

Chạy container trên một máy chủ thì đơn giản, nhưng khi số container tăng lên hàng trăm và cần chạy trên nhiều node, các vấn đề sau xuất hiện: container nào đặt ở đâu, ai khởi động lại container bị treo, làm sao cân bằng tải khi một máy chết, làm sao cập nhật ứng dụng không gián đoạn.

Kubernetes trả lời những câu hỏi đó bằng cơ chế khai báo: bạn mô tả trạng thái mong muốn, bộ điều phối (controller) lo phần còn lại. Nhờ mô hình declarative, việc vận hành trở nên tự hoá và có thể kiểm tra bằng code.

Các khái niệm cốt lõi

  • Pod: đơn vị nhỏ nhất mà Kubernetes quản lý, chứa một hoặc nhiều container chia sẻ cùng địa chỉ IP và ổ đĩa. Các container trong một pod luôn được đặt trên cùng một node.
  • Deployment: mô tả số bản sao pod cần chạy và cách cập nhật chúng theo chiến lược rolling update.
  • Service: cung cấp một địa chỉ IP ổn định và tên DNS cho nhóm pod, đồng thời cân bằng tải giữa các bản sao.
  • ConfigMap và Secret: lưu cấu hình không nhạy cảm và thông tin bí mật, tách biệt khỏi image.
  • Ingress: bộ định tuyến HTTP vào cụm, kết nối miền public với các service bên trong.
  • Namespace: cơ chế cô lập logic để nhóm tài nguyên theo dự án hay môi trường.

Control plane và worker node

Kiến trúc Kubernetes chia thành hai phần. Control plane giữ vai trò bộ não, gồm API server làm cổng giao tiếp chính, scheduler quyết định pod nào đặt ở node nào, controller manager điều phối trạng thái, và etcd lưu toàn bộ cấu hình. Worker node chạy ứng dụng thực tế, với kubelet chịu trách nhiệm khởi động container theo chỉ thị của control plane và một container proxy để định tuyến lưu lượng.

Do mọi tương tác đều đi qua API server bằng REST hoặc gRPC, bạn có thể quản lý cụm bằng kubectl, dashboard, hoặc công cụ của bên thứ ba như Terraform và ArgoCD.

Ví dụ triển khai Nginx bằng YAML

apiVersion: apps/v1
kind: Deployment
metadata:
  name: web
spec:
  replicas: 3
  selector:
    matchLabels:
      app: web
  template:
    metadata:
      labels:
        app: web
    spec:
      containers:
        - name: web
          image: nginx:alpine
          ports:
            - containerPort: 80

Đoạn YAML trên yêu cầu Kubernetes chạy 3 bản sao nginx. Scheduler lần lượt chọn các node còn đủ tài nguyên, kubelet trên node đó kéo image về và khởi động pod. Nếu một pod bị treo hoặc chết, controller sẽ tự tạo pod mới để giữ đủ số lượng, quá trình này gọi là self-healing.

Áp dụng bằng lệnh kubectl apply -f deployment.yaml, kiểm tra bằng kubectl get pods và kubectl describe deployment web nếu cần xem log sự kiện.

Quản lý cấu hình và bí mật

Đặt mật khẩu trực tiếp vào manifest rồi commit lên Git là sai lầm phổ biến. Kubernetes tách phần cấu hình ra khỏi image thông qua ConfigMap cho giá trị thường và Secret cho thông tin nhạy cảm, cả hai đều có thể tham chiếu dưới dạng biến môi trường hoặc file gắn vào pod. Trên production nên mã hoá Secret ở chế độ rest, hoặc tích hợp Vault và External Secrets Operator để không lưu bí mật trong Git.

Hệ sinh thái và các bản phân phối phổ biến

Do Kubernetes phức tạp, hầu hết đội ngũ không tự cài đặt từ đầu. Ba lựa chọn phổ biến nhất là:

  • Kubernetes phân phối có sẵn: Amazon EKS, Google GKE, Azure AKS. Rủi ro thấp nhất vì nhà cung cấp lo phần vận hành.
  • Bản mã nguồn mở: k3s nhẹ, chạy tốt trên edge và máy yếu; k0s của Mirantis và MicroK8s của Canonical cho đa dạng nhu cầu.
  • Cụm tự quản: kubeadm trên máy ảo thuần cho môi trường học tập và thử nghiệm.

Hệ sinh thái đi kèm cũng rất lớn: Helm quản lý gói cài đặt, ArgoCD và Flux quản lý GitOps, Prometheus lấy chỉ số, Grafana hiển thị biểu đồ, Loki thu thập log. Bạn có thể đọc thêm tại tài liệu khái niệm chính thức của Kubernetes.

Có nên dùng Kubernetes cho dự án nhỏ

Không phải dự án nào cũng cần Kubernetes. Nếu ứng dụng chỉ có vài dịch vụ và chưa có yêu cầu scale, chạy trên một VPS cùng Docker Compose thường rẻ hơn và dễ vận hành hơn nhiều. Dấu hiệu cho thấy đã đến lúc cân nhắc Kubernetes gồm: số dịch vụ tăng lên hàng chục, cần triển khai nhiều lần mỗi ngày, yêu cầu zero downtime nghiêm ngặt, hoặc đội ngũ đã có kinh nghiệm vận hành hệ thống phân tán.

Nếu chưa chắc chắn, hãy bắt đầu với k3s trên một máy để làm quen cú pháp manifest và cách debug vấn đề pod không lên. Việc học trên cụm nhỏ dễ hơn nhiều so với production phức tạp.

Tài liệu tham khảo

Sơ đồ một pod chứa các container dùng chung địa chỉ IP và ổ đĩa tạm
Sơ đồ tổng thể hệ thống Kubernetes cho thấy quan hệ giữa các thành phần

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

Sơ đồ xếp chồng kiến trúc WebGPU: GPU vật lý → API gốc → triển khai trình duyệt → GPUAdapter → GPUDevice

WebGPU là gì? Chuẩn đồ hoạ và tính toán GPU cho trình duyệt

WebGPU là một giao diện lập trình web cho phép JavaScript sử dụng trực tiếp GPU của máy người dùng, cả để dựng hình lẫn để tính toán song song….

Xem thêm

Thực tế tăng cường AR là gì? Nguyên lý và ứng dụng thực tế

Thực tế tăng cường AR là gì? Nguyên lý và ứng dụng thực tế Thực tế tăng cường (Augmented Reality – AR) là công nghệ lớp đồ họa số lên…

Xem thêm

CDN là gì? Mạng phân phối nội dung giúp website tải nhanh hơn

CDN (Content Delivery Network) là một mạng lưới phân tán địa lý gồm nhiều máy chủ proxy và các trung tâm dữ liệu, giúp phân phối nội dung đến người…

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