Pod trong Kubernetes: Các giai đoạn vòng đời từ khởi tạo đến chấm dứt

Pod là đơn vị triển khai nhỏ nhất trong hệ sinh thái Kubernetes, đóng vai trò là nơi chứa một hoặc nhiều container hoạt động cùng nhau. Những container này dùng chung không gian mạng, địa chỉ IP, và các tài nguyên lưu trữ, cho phép chúng giao tiếp hiệu quả như đang chạy trên cùng một máy vật lý.

Giai đoạn khởi tạo Pod

Quá trình vòng đời của Pod bắt đầu khi người dùng gửi yêu cầu tạo Pod thông qua lệnh kubectl apply hoặc trực tiếp gọi API của Kubernetes. Hệ thống sẽ phân tích định nghĩa Pod — thường được viết dưới dạng YAML — sau đó lên kế hoạch đặt Pod vào một nút (node) phù hợp dựa trên tài nguyên khả dụng và các ràng buộc định tuyến.

Dưới đây là ví dụ về một file cấu hình Pod đơn giản:

apiVersion: v1
kind: Pod
metadata:
  name: web-server-pod
spec:
  containers:
    - name: app-container
      image: nginx:alpine
      ports:
        - containerPort: 80

Sau khi gửi yêu cầu, Pod sẽ ở trạng thái Pending cho đến khi node đích hoàn tất việc kéo ảnh và khởi động container.

Giai đoạn vận hành

Khi các container bên trong Pod đã khởi động thành công, trạng thái Pod sẽ chuyển sang Running. Để đảm bảo độ tin cậy, ta có thể thiết lập các cơ chế kiểm tra sức khỏe nhằm phát hiện và xử lý tự động khi ứng dụng gặp sự cố.

  • livenessProbe: Dùng để xác định liệu container có còn hoạt động hay không. Nếu kiểm tra thất bại, Kubernetes sẽ khởi động lại container.
  • readinessProbe: Xác định container đã sẵn sàng nhận lưu lượng hay chưa. Nếu kiểm tra không đạt, Pod sẽ bị loại khỏi danh sách đích của Service.

Ví dụ minh họa việc sử dụng livenessProbe:

apiVersion: v1
kind: Pod
metadata:
  name: monitored-app_pod
spec:
  containers:
    - name: healthy-service
      image: nginx:latest
      livenessProbe:
        httpGet:
          path: /health
          port: 80
        initialDelaySeconds: 15
        timeoutSeconds: 5
        periodSeconds: 20

Cấu hình này giúp hệ thống tự động phục hồi ứng dụng nếu nó rơi vào trạng thái treo mà không cần can thiệp thủ công.

Giai đoạn chấm dứt

Pod có thể bị xóa theo yêu cầu người dùng hoặc do sự kiện hệ thống như thu hồi tài nguyên, nâng cấp nút, hoặc lỗi phần cứng. Khi tiến trình xóa bắt đầu, Kubernetes gửi tín hiệu SIGTERM đến tất cả container trong Pod, báo hiệu chúng cần dừng hoạt động một cách an toàn.

Nếu container không dừng trong khoảng thời gian quy định (mặc định là 30 giây, có thể điều chỉnh bằng terminationGracePeriodSeconds), hệ thống sẽ gửi SIGKILL để buộc chấm dứt.

Ví dụ thiết lập thời gian thoát an toàn:

apiVersion: v1
kind: Pod
metadata:
  name: graceful-pod
spec:
  terminationGracePeriodSeconds: 60
  containers:
    - name: long-shutdown-app
      image: custom-app:v1
      lifecycle:
        preStop:
          exec:
            command: ["/bin/sh", "-c", "sleep 30"]

Trong ví dụ trên, lệnh preStop được dùng để thực hiện thao tác dọn dẹp trước khi tắt, như lưu trạng thái hoặc ngắt kết nối từ từ.

Thẻ: Kubernetes Pod Lifecycle livenessProbe readinessProbe

Đăng vào ngày 20 tháng 7 lúc 05:35