blog.dopana

Back

Kubernetes (K8s) là nền tảng orchestration container phổ biến nhất. Nó quản lý việc deploy, scale, và vận hành container tự động.

Kiến Trúc#

Pod — Đơn Vị Nhỏ Nhất#

Pod là 1 hoặc nhiều container chạy cùng nhau, share network và storage.

apiVersion: v1
kind: Pod
metadata:
  name: my-app
  labels:
    app: my-app
spec:
  containers:
    - name: app
      image: myapp:latest
      ports:
        - containerPort: 3000
yaml
# Tạo pod
kubectl apply -f pod.yaml

# Xem pod
kubectl get pods
kubectl describe pod my-app
kubectl logs my-app

# Exec vào pod
kubectl exec -it my-app -- sh

# Xóa pod
kubectl delete pod my-app
bash

Deployment — Quản Lý Pod#

Không dùng Pod trực tiếp — dùng Deployment. Deployment đảm bảo số lượng pod mong muốn luôn chạy.

# Scale
kubectl scale deployment my-app --replicas=5

# Rolling update
kubectl set image deployment/my-app app=myapp:v2

# Rollback
kubectl rollout undo deployment/my-app

# Xem rollout status
kubectl rollout status deployment/my-app
bash

Service — Kết Nối Vào Pod#

Pod có thể chết và tạo lại với IP mới. Service cung cấp một IP/domain ổn định.

apiVersion: v1
kind: Service
metadata:
  name: my-app-service
spec:
  selector:
    app: my-app
  ports:
    - port: 80
      targetPort: 3000
  type: ClusterIP  # Chỉ truy cập trong cluster
yaml
# LoadBalancer — expose ra ngoài (cloud)
apiVersion: v1
kind: Service
metadata:
  name: my-app-lb
spec:
  selector:
    app: my-app
  ports:
    - port: 80
      targetPort: 3000
  type: LoadBalancer
yaml

Ingress — HTTP Routing#

Service LoadBalancer mỗi cái một IP — Ingress cho phép routing theo domain/path:

ConfigMap & Secret — Cấu Hình#

apiVersion: v1
kind: ConfigMap
metadata:
  name: app-config
data:
  NODE_ENV: production
  LOG_LEVEL: info
---
apiVersion: v1
kind: Secret
metadata:
  name: db-secret
type: Opaque
stringData:
  DATABASE_URL: postgres://user:pass@db:5432/myapp
yaml
# Dùng trong Deployment
spec:
  containers:
    - envFrom:
        - configMapRef:
            name: app-config
        - secretRef:
            name: db-secret
yaml

PersistentVolume — Lưu Trữ Dữ Liệu#

Kubectl — Lệnh Cần Nhớ#

Helm — Package Manager#

# Install Helm chart
helm repo add bitnami https://charts.bitnami.com/bitnami
helm install my-postgres bitnami/postgresql

# Tạo chart riêng
helm create my-app
# Chart.yaml, values.yaml, templates/
bash

K8s Cho Dev — Minikube#

# Local cluster
minikube start --cpus=4 --memory=8192
minikube dashboard # UI

# Dùng Docker images local
eval $(minikube docker-env)
docker build -t myapp:dev .
bash

Kết Luận#

Kubernetes phức tạp — nhưng chỉ cần nắm Pod, Deployment, Service, Ingress là đủ để deploy ứng dụng. Bắt đầu với Minikube, deploy app đơn giản, rồi nâng dần.

Nhớ: K8s giải quyết vấn đề orchestration ở quy mô lớn. Nếu bạn chỉ có 1-2 server, Docker Compose là đủ.

Tài liệu tham khảo#