[K8S 4] Pod's Lifecycle

Pod có lifecycle định nghĩa như hình dưới đây:

Pod chỉ được thiết lập một lần duy nhất trong suốt lifecycle. Một khi Pod đã được thiết lập - schedule thì nó sẽ chạy trên Node đó cho đến khi nó dừng hoặc bị terminated.

Khi một Pod đang chạy, Kubernetes sẽ theo dõi trạng thái của các container và quyết định hành động cần phải thực hiện để Pod quay trở lại trạng thái Running.

Pod lifetime

Các pod được tạo ra có unique-id (UID) và được thiết lập, chạy trên các node cho đến khi nó dừng(tùy theo restart policy) hoặc bị xóa. Nếu node chết, các pod trên node đó sẽ được lập lịch để xóa sau một khoảng thời gian timeout.

Pod bản thân nó không thể tự khôi phục(self-heal).

  • Node chết, pod bị xóa.
  • Thiếu tài nguyên, pod bị xóa.

Kubernetes sẽ quản lý và điều khiển tất cả các pod thông qua controller. Một khi pod đã được thiết lập trên một node, nó sẽ không được tái lập trên node khác. Thay vào đó, pod cũ sẽ bị thay thế bởi một pod mới gần giống(near-identical) - có thể cùng tên nhưng khác UID. Tuy nhiên dù pod bị xóa bởi bất kì lý do gì và dù có tạo cái mới thay thế thì các thành phần đi kèm với pod như volume chẳng hạn sẽ hủy và tạo cái mới.

A multi-container Pod that contains a file puller and a web server that uses a persistent volume for shared storage between the containers.

Pod status & Pod phase

A Pod's status field is a PodStatus object, which has a phase field.

Pod phase chỉ ám chỉ thông tin ở mức tổng quát(high-level) về trạng thái của Pod trong lifecycle, chứ không cố gắng tổng hợp toàn diện các trạng thái có thể có khác của container cũng như trạng thái của node.

ValueDescription
PendingThe Pod has been accepted by the Kubernetes cluster, but one or more of the containers has not been set up and made ready to run. This includes time a Pod spends waiting to be scheduled as well as the time spent downloading container images over the network.
RunningThe Pod has been bound to a node, and all of the containers have been created. At least one container is still running, or is in the process of starting or restarting.
SucceededAll containers in the Pod have terminated in success, and will not be restarted.
FailedAll containers in the Pod have terminated, and at least one container has terminated in failure. That is, the container either exited with non-zero status or was terminated by the system.
UnknownFor some reason the state of the Pod could not be obtained. This phase typically occurs due to an error in communicating with the node where the Pod should be running.
Lưu ý:
- Khi pod bị xóa bởi một số lệnh kubectl sẽ có thể xuất hiện trạng thái Terminating tuy niên đây không phải là một pod phrase. Thông thường pod sẽ bị terminate sau khoảng 30s. Có thể thêm cờ --force để terminate ngay lập tức.
- Nếu một node chết hoặc mất kết nối trong cluster, Kubernetes sẽ chuyển các Pod sang trạng thái Failed.

Pod conditions

A Pod has a PodStatus, which has an array of PodConditions through which the Pod has or has not passed:
  • PodScheduled: Pod đã được thiết lập trên một node.
  • ContainersReady: Tất cả các container của pod ở trạng thái sẵn sàng.
  • Initialized: tất cả các init container đã khởi động thành công.
  • Ready: pod có thể phục vụ request và sẵn sàng để thêm vào load balancing pool.

Container state

Kubernetes theo dõi trạng thái của từng container bên trong pod. Bạn có thể dùng container lifecycle hooks để kích hoạt một số thực thi bên trong container dựa trên container events.

Sau khi scheduler gán một pod cho một node, kubelet sẽ bắt đầu tạo các container của pod sử dụng container-runtime(chương trình có nhiệm vụ chạy các container).

Để kiểm tra container state của pod có thể dùng lệnh:

kubectl describe pod <name-of-pod>

Kết quả đầu ra sẽ bao gồm trạng thái của từng container bên trong pod.

Có 3 trạng thái của container:

  • Waiting: Container đang chạy các tác vụ để hoàn tất quá trình khời động, ví dụ như tải container image từ image registry hoặc đang thiết lập dữ liệu... Khi bạn sử dụng kubectl để truy vấn Pod có waiting container, bạn sẽ thấy thông tin Reason - lý do tại sao vùng chứa ở trạng thái đó.
  • Running: Container đang thực thi mà không có lỗi xảy ra. Nếu bạn cấu hình hook postStart thì hook này đã được thực thi và hoàn tất.
  • Terminate: Container chạy hoàn thành hoặc chạy gặp lỗi - không thành công vì một số lý do. Khi bạn sử dụng kubectl để truy vấn Pod có terminated container, bạn sẽ thấy lý do, exit code và thời gian bắt đầu và kết thúc cho khoảng thời gian thực thi của container đó.

Container restart policy

The spec of a Pod has a restartPolicy field with possible values Always, OnFailure, and Never. The default value is Always.

Giá trị restartPolicy một khi được thiết lập trên Pod, nó sẽ được áp dụng với toàn bộ container trong pod.

After containers in a Pod exit, the kubelet restarts them with an exponential back-off delay (10s, 20s, 40s, …), that is capped at five minutes. Once a container has executed for 10 minutes without any problems, the kubelet resets the restart backoff timer for that container.

Sẽ tiếp tục vì chưa hoàn tất. Bắt đầu từ:

Pod Lifecycle
This page describes the lifecycle of a Pod. Pods follow a defined lifecycle, starting in the Pending phase, moving through Running if at least one of its primary containers starts OK, and then through either the Succeeded or Failed phases depending on whether any container in the Pod terminated in f…
Tìm hiểu cơ chế Healthcheck Readiness và Liveness trong Kubernetes - Technology Diver
Kubernetes cung cấp hai cơ chế giúp kiểm tra tình trạng sức khoẻ của ứng dụng dịch vụ pod container của bạn có đang hoạt động đúng đắn hay không ? Đó là Liveness và Readiness.

Subscribe to bachdgvn.com

Don’t miss out on the latest issues. Sign up now to get access to the library of members-only issues.
jamie@example.com
Subscribe