Sổ tay kỹ thuật

Kubernetes – khái niệm cốt lõi

concept#kubernetes· cập nhật 2026-11-06

Nắm nhanh Pod, Deployment, Service, Ingress, ConfigMap, Secret, PVC và control plane để đọc hiểu manifest và log lỗi.

Sửa trang này
Mục lục

Kubernetes là hệ thống điều phối container theo mô hình khai báo: bạn gửi trạng thái mong muốn (manifest YAML) lên API server, các controller liên tục so sánh và kéo trạng thái thực tế về khớp với nó (reconcile loop). Không có lệnh "chạy container X trên node Y", chỉ có "muốn 3 bản sao của image X".

Kiến trúc

flowchart LR K[kubectl] --> API["kube-apiserver (control plane)"] API --> ETCD[(etcd)] SCH[kube-scheduler] --> API CM[kube-controller-manager] --> API KL["kubelet (node)"] --> API KP["kube-proxy (node)"] --> API KL --> CR["containerd (CRI)"]
Thành phần Vai trò
kube-apiserver Cửa vào duy nhất, xác thực, RBAC, ghi/đọc etcd. Mọi thành phần khác chỉ nói chuyện với API server
etcd Key-value store lưu toàn bộ trạng thái cluster. Mất etcd là mất cluster, cần backup
kube-scheduler Chọn node cho Pod mới (resource request, taint/toleration, affinity)
kube-controller-manager Chạy các controller: Deployment, ReplicaSet, Node, Job, EndpointSlice...
kubelet Agent trên mỗi node, nhận Pod spec và bảo container runtime chạy; chạy probe
kube-proxy Lập trình iptables/IPVS/nftables để Service IP trỏ tới Pod (một số CNI như Cilium thay thế nó)
CNI plugin Cấp IP cho Pod và nối mạng giữa các node (Calico, Cilium, Flannel)

Các object hay gặp

Object Là gì Ghi chú
Pod Đơn vị nhỏ nhất, 1+ container chung network namespace và volume Ephemeral: chết là mất, IP đổi. Không tạo Pod trần cho app
Deployment Quản lý ReplicaSet → Pod, rolling update, rollback Cho app stateless
StatefulSet Pod có tên cố định (db-0, db-1) và PVC riêng từng Pod Database, Kafka
DaemonSet Mỗi node một Pod Agent log, node-exporter, CNI
Job / CronJob Chạy tới khi xong / theo lịch Backup, migrate
Service IP + DNS ổn định trỏ tới tập Pod theo selector ClusterIP (nội bộ), NodePort, LoadBalancer, ExternalName
Ingress Định tuyến HTTP(S) theo host/path vào Service Cần Ingress controller (ingress-nginx, Traefik). Gateway API là thế hệ kế tiếp
ConfigMap Cấu hình dạng key-value hoặc file Mount thành file hoặc env
Secret Như ConfigMap nhưng cho dữ liệu nhạy cảm Chỉ base64, cần bật encryption at rest và RBAC chặt
PersistentVolumeClaim Yêu cầu storage (dung lượng, access mode) StorageClass cấp PV động
Namespace Phân vùng logic cho tên, quota, RBAC Không phải ranh giới mạng nếu thiếu NetworkPolicy

Ví dụ tối thiểu

app.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: api
spec:
  replicas: 2
  selector:
    matchLabels: { app: api }
  template:
    metadata:
      labels: { app: api }
    spec:
      containers:
        - name: api
          image: registry.example.com/api:1.4.2
          ports: [{ containerPort: 8000 }]
          envFrom:
            - configMapRef: { name: api-config }
          env:
            - name: DB_PASSWORD
              valueFrom:
                secretKeyRef: { name: api-db, key: password }
          resources:
            requests: { cpu: 100m, memory: 128Mi }
            limits: { memory: 256Mi }
          readinessProbe:
            httpGet: { path: /healthz, port: 8000 }
---
apiVersion: v1
kind: Service
metadata:
  name: api
spec:
  selector: { app: api }
  ports:
    - port: 80
      targetPort: 8000

Chuỗi liên kết: Service selector khớp labels của Pod template → EndpointSlice chứa IP các Pod Ready → DNS api.<namespace>.svc.cluster.local trả về ClusterIP. Sai label là Service không có endpoint.

Luồng request từ ngoài vào

flowchart LR C[Client] --> LB["LoadBalancer / NodePort"] LB --> IC["Ingress controller"] IC -->|"host/path rule"| S["Service api"] S --> P1["Pod api-1"] S --> P2["Pod api-2"]

Cấu hình Ingress có TLS tự động: ingress-nginx + cert-manager. Đóng gói nhiều manifest: Helm.

Khi nào dùng