[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.

Pod status & Pod phase
A Pod'sstatus
field is a PodStatus object, which has aphase
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.
Value | Description |
---|---|
Pending | The 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. |
Running | The 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. |
Succeeded | All containers in the Pod have terminated in success, and will not be restarted. |
Failed | All 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. |
Unknown | For 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
Thespec
of a Pod has arestartPolicy
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ừ:

