Вопрос или проблема
Когда учитываются количества перезапусков в microk8s kubectl describe pod -n <pod_name>
? Я вижу количество перезапусков в результатах по адресу: Containers.App-Name.Restart Count
Например, посмотрите на эти результаты:
### microk8s kubectl describe pod -n kube-system hostpath-provisioner-566686b959-pmtw5
Name: hostpath-provisioner-566686b959-pmtw5
Namespace: kube-system
Priority: 0
Node: ipc/192.168.1.101
Start Time: Wed, 03 Aug 2022 10:10:26 +0000
Labels: k8s-app=hostpath-provisioner
pod-template-hash=566686b959
Annotations: cni.projectcalico.org/podIP: 10.1.206.150/32
cni.projectcalico.org/podIPs: 10.1.206.150/32
Status: Running
IP: 10.1.206.150
IPs:
IP: 10.1.206.150
Controlled By: ReplicaSet/hostpath-provisioner-566686b959
Containers:
hostpath-provisioner:
Container ID: containerd://f32ed83a49dc15cc4f92c4fb03685b75117436e42345364d29e0a908633cd1c7
Image: cdkbot/hostpath-provisioner:1.1.0
Image ID: docker.io/cdkbot/hostpath-provisioner@sha256:317ed1b7324dc5f20db5dfdc0647a26a1ac44df426e9caad9cfdd6ba84c47697
Port: <none>
Host Port: <none>
State: Running
Started: Wed, 06 Nov 2024 19:54:08 +0000
Last State: Terminated
Reason: Unknown
Exit Code: 255
Started: Wed, 02 Oct 2024 22:40:48 +0000
Finished: Wed, 06 Nov 2024 19:53:09 +0000
Ready: True
Restart Count: 68
Environment:
NODE_NAME: (v1:spec.nodeName)
PV_DIR: /var/snap/microk8s/common/default-storage
Mounts:
/var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-d2s6c (ro)
/var/snap/microk8s/common/default-storage from pv-volume (rw)
Conditions:
Type Status
Initialized True
Ready True
ContainersReady True
PodScheduled True
Volumes:
pv-volume:
Type: HostPath (bare host directory volume)
Path: /var/snap/microk8s/common/default-storage
HostPathType:
kube-api-access-d2s6c:
Type: Projected (a volume that contains injected data from multiple sources)
TokenExpirationSeconds: 3607
ConfigMapName: kube-root-ca.crt
ConfigMapOptional: <nil>
DownwardAPI: true
QoS Class: BestEffort
Node-Selectors: <none>
Tolerations: node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events: <none>
Но когда учитываются перезапуски? Я не вижу этого ответа в документации kubectl describe pod здесь.
Ответ или решение
Когда вы используете команду microk8s kubectl describe pod -n <pod_name>
для получения информации о конкретном поде в Kubernetes, вы можете увидеть информацию о количестве перезапусков контейнеров, представленных в строке, например, Restart Count: 68
. В этом контексте возникает вопрос: откуда берется это количество перезапусков и какой период оно охватывает?
Подход к подсчету перезапусков
Суть перезапусков: Количество перезапусков контейнера указывает на то, сколько раз контейнер был остановлен и перезапущен с момента его создания. Этот счет начинается с момента создания контейнера в ответ на развертывание или обновление, и он учитывает только те перезапуски, которые произошли в состоянии Терминал (Terminated) и Рабочий (Running).
Когда перезапуски фиксируются?
Перезапуски фиксируются при каждом выходе контейнера из состояния "Работающий". Это может произойти по следующим причинам:
- Системные ошибки: Если контейнер завершает свою работу из-за неустранимой ошибки или сбоя (например, ошибка приложений).
- Состояние подготовки (Readiness Probes): Проверки готовности могут означать, что контейнер не отвечает на запросы, и Kubernetes решает перезапустить его.
- Временные лимиты: Контейнер может быть завершен, если превышает заданные временные лимиты на выполнение, такие как
terminationGracePeriodSeconds
.
Как COUNT фиксируется?
Счетчик перезапусков при каждом выходе или ненормальном завершении контейнера увеличивается на единицу. Например, если контейнер завершился из-за сбоя 10 раз, то Restart Count
будет равен 10, даже если на момент запроса он находится в состоянии "Работающий".
Как это отображается в выводе команды describe
?
При использовании команды kubectl describe pod
вы получаете детализированную информацию о состоянии пода, включая:
- Состояние: В текущем состоянии
Running
, а также информацию о последнем состоянии, когда контейнер завершил свою работу. - Перезапуски: Строка
Restart Count
показывает общее количество перезапусков, что дает представление о надежности и устойчивости контейнера.
Заключение
Таким образом, количество перезапусков контейнера отражает его состояние с момента запуска и учитывает все неудачные попытки выполнения. Для более глубокого анализа причин сбоев и перезапусков рекомендуется использовать логирование и мониторинг контейнеров, такие как Prometheus или Grafana, а также встроенные механизмы логирования Kubernetes.
Понимание того, когда и как происходит подсчет перезапусков контейнера, является важным аспектом управления и оптимизации приложений в среде Kubernetes.