Назад | Перейти на главную страницу

Что такое ContainerCreating в Kubernetes?

При обновлении развертывания Kubernetes RollingUpdate kubectl get pods показывает, что некоторые модули проводят несколько минут в ContainerCreating состояние перед переездом в Running. К сожалению, официальная документация по состояниям подов не включает это как задокументированное состояние. Даже кодовая база Kubernetes есть только два упоминания термина, и ни у одного из них нет никаких пояснительных комментариев.

Я вносил некоторые изменения в значение конфигурации развертывания скользящего обновления (maxUnavailable и maxSurge) и конфигурация зонда (initialDelaySeconds), и я не уверен, что время запуска контейнера, на которое влияют эти значения, является частью ContainerCreating или другое государство.

В ContainerCreating состояние применяется, когда количество контейнеров равно или меньше 0.

Всеобъемлющий

В соответствии с фрагмент кода, определенный в вопросе в ContainerCreating статус кажется default waiting state. Только если hasInitContainers является true в defaultWaitingState станет PodInitializing. На это также указывает тест, который также упоминается в вопросе. В случае without-old-record, with-old-record или something else в ContainerState будет Reason: startWaitingReason, т.е. "ContainerCreating"

hasInitContainers

https://github.com/kubernetes/kubernetes/blob/427dfd5ce1483ead29568bf7c05a98c4c0ad081c/pkg/kubelet/kubelet_pods.go#L1256

  apiPodStatus.ContainerStatuses = kl.convertToAPIContainerStatuses(
      pod, podStatus,
      pod.Status.ContainerStatuses,
      pod.Spec.Containers,
      len(pod.Spec.InitContainers) > 0,
      false,
  )
  apiPodStatus.InitContainerStatuses = kl.convertToAPIContainerStatuses(
      pod, podStatus,
      pod.Status.InitContainerStatuses,
      pod.Spec.InitContainers,
      len(pod.Spec.InitContainers) > 0,
      true,
)