Bỏ qua

11 12.pods yml demo

1. Bốn "Trụ cột" của một file YAML trong Kubernetes

Mọi file định nghĩa đối tượng trong Kubernetes (dù là Pod, Service, hay Deployment,...) đều phải có 4 trường (fields) ở cấp cao nhất. Đây là các trường bắt buộc:

  1. apiVersion:

  2. Là gì? Phiên bản của Kubernetes API mà bạn đang sử dụng để tạo đối tượng.

  3. Ví dụ (cho Pod): v1

  4. kind:

  5. Là gì? Loại đối tượng mà bạn đang muốn tạo.

  6. Ví dụ (cho Pod): Pod

  7. metadata:

  8. Là gì? "Dữ liệu về dữ liệu" - tức là các thông tin mô tả về đối tượng, như tên, nhãn,... Đây là một dictionary (đối tượng).

  9. name: Tên của Pod (ví dụ: my-app-pod).
  10. labels: Một dictionary chứa các cặp key-value (nhãn). Labels cực kỳ quan trọng, giúp bạn lọc và nhóm các đối tượng sau này (ví dụ: app: my-app, env: production).

  11. spec (viết tắt của Specification):

  12. Là gì? Đây là phần quan trọng nhất, nơi bạn định nghĩa trạng thái mong muốn của đối tượng.

  13. Cấu trúc của spec sẽ khác nhau tùy thuộc vào kind của đối tượng.

⚠️ Lưu ý về thụt đầu dòng (indentation) trong YAML: YAML rất nhạy cảm với khoảng trắng. Các thuộc tính con phải được thụt vào so với thuộc tính cha, và các thuộc tính ngang hàng phải có cùng mức thụt lề.


2. "Mổ xẻ" phần spec của một Pod

Đối với một đối tượng có kind: Pod, phần spec sẽ mô tả các container sẽ chạy bên trong Pod đó.

  • spec chứa một thuộc tính quan trọng là containers.
  • containers là một danh sách (list/array). Lý do nó là một danh sách vì một Pod có thể chứa nhiều container.
  • Mỗi mục trong danh sách containers là một dictionary mô tả một container, với hai thuộc tính bắt buộc:
  • name: Tên bạn đặt cho container (ví dụ: nginx-container).
  • image: Tên của Docker image sẽ được sử dụng để chạy container (ví dụ: nginx).

3. Ví dụ một file pod-definition.yaml hoàn chỉnh

Đây là một file YAML đầy đủ để tạo một Pod đơn giản chạy NGINX:

apiVersion: v1
kind: Pod
metadata:
  name: my-app-pod
  labels:
    app: my-app
spec:
  containers:
    - name: nginx-container
      image: nginx

4. Thực thi và Quản lý Pod trong Kubernetes

4.1. Tạo Pod từ file YAML

# Tạo Pod (báo lỗi nếu đã tồn tại)
kubectl create -f pod-definition.yaml

# Tạo hoặc cập nhật Pod (khuyến nghị)
kubectl apply -f pod-definition.yaml

4.2. Kiểm tra và Giám sát Pod

# Xem danh sách Pod
kubectl get pods
kubectl get pods -o wide                    # Thông tin chi tiết
kubectl get pods -l app=my-app             # Lọc theo label
kubectl get pods -A                        # Tất cả namespace

# Xem thông tin chi tiết
kubectl describe pod my-app-pod

# Theo dõi logs
kubectl logs my-app-pod
kubectl logs -f my-app-pod                 # Theo thời gian thực

4.3. Tương tác với Pod

# Truy cập vào container
kubectl exec -it my-app-pod -- /bin/bash

# Chạy lệnh trong container
kubectl exec my-app-pod -- ls -la

# Port forwarding
kubectl port-forward my-app-pod 8080:80

4.4. Xóa Pod

kubectl delete pod my-app-pod
kubectl delete -f pod-definition.yaml
kubectl delete pods -l app=my-app          # Xóa theo label

5. Tạo Pod nhanh với kubectl run

5.1. Các lệnh cơ bản

# Tạo Pod đơn giản
kubectl run nginx-pod --image=nginx

# Tạo Pod với labels và port
kubectl run webapp --image=nginx --port=80 --labels="app=web,env=prod"

# Tạo file YAML (không tạo Pod thực tế)
kubectl run redis-pod --image=redis --dry-run=client -o yaml > redis-pod.yaml

5.2. Pod với cấu hình nâng cao

# nginx-advanced.yaml
apiVersion: v1
kind: Pod
metadata:
  name: nginx-advanced
  labels:
    app: nginx
    tier: frontend
spec:
  containers:
    - name: nginx-container
      image: nginx:1.21
      ports:
        - containerPort: 80
      resources:
        requests:
          memory: "64Mi"
          cpu: "250m"
        limits:
          memory: "128Mi"
          cpu: "500m"
      env:
        - name: NGINX_PORT
          value: "80"

6. Troubleshooting và Debug Pod

6.1. Kiểm tra trạng thái

# Xem Pod có vấn đề
kubectl get pods --field-selector=status.phase!=Running

# Xem events hệ thống
kubectl get events --sort-by=.metadata.creationTimestamp

# Theo dõi trạng thái realtime
kubectl get pods -w

6.2. Phân tích và Debug

# Xem resource usage
kubectl top pods

# Xem cấu hình Pod ở dạng YAML
kubectl get pod nginx-pod -o yaml

# Xem logs container trước đó
kubectl logs nginx-pod --previous

7. Lab thực hành tổng hợp

# 1. Tạo Pod với labels
kubectl run webapp --image=nginx:1.21 --port=80 --labels="app=webapp,env=prod"

# 2. Kiểm tra và theo dõi
kubectl get pods -l app=webapp
kubectl describe pod webapp
kubectl logs webapp

# 3. Test kết nối
kubectl port-forward webapp 8080:80 &
curl localhost:8080

# 4. Backup và cleanup
kubectl get pod webapp -o yaml > webapp-backup.yaml
kubectl delete pod webapp

8. Tóm tắt cho kỳ thi CKA 📝

4 trường bắt buộc của YAML:

  • apiVersion: v1 (cho Pod)
  • kind: Pod
  • metadata: name, labels
  • spec: containers (name, image)

Lệnh quan trọng:

  • kubectl apply -f file.yaml - Tạo/cập nhật
  • kubectl get pods -o wide - Xem danh sách
  • kubectl describe pod <name> - Debug
  • kubectl logs <pod> - Xem logs
  • kubectl exec -it <pod> -- /bin/bash - Truy cập container

Tips:

  • Luôn sử dụng apply thay vì create
  • Labels quan trọng cho việc quản lý
  • Sử dụng describe để troubleshoot
  • dry-run để tạo YAML template nhanh

Bình luận