设置容器重启次数
基于kubernetes v1.18.6
,关于基于windows
平台运行kubelet
的相关代码逻辑不作解析。
概述
kubelet
通过以下四个步骤,来启动pod
容器:
其中创建容器
又分为以下子步骤:
本文主要解析创建容器/设置容器重启次数
阶段kubelet
所做工作,首先我们先看下设置容器重启次数
阶段的代码逻辑
设置容器重启次数
流程解析
该步骤根据容器名称查询pod
的status
中容器状态,若查询不到则重启次数设置为0
,如查询到该容器状态则重启次数基于原值加1
。
该值主要用来生成日志文件链接:
// kubelet管理的日志(软链接)
/var/log/pods/<pod namespace>_<pod name>_<pod uid>/<容器名称>/重启重启次数.log
对应
// 容器日志
/var/lib/docker/containers/<容器id>/<容器id>-json.log
源码实现
kubernetes\pkg\kubelet\kuberuntime\kuberuntime_container.go
func (m *kubeGenericRuntimeManager) startContainer(podSandboxID string, podSandboxConfig *runtimeapi.PodSandboxConfig, spec *startSpec, pod *v1.Pod, podStatus *kubecontainer.PodStatus, pullSecrets []v1.Secret, podIP string, podIPs []string) (string, error) {
...
// For a new container, the RestartCount should be 0
restartCount := 0
containerStatus := podStatus.FindContainerStatusByName(container.Name)
if containerStatus != nil {
restartCount = containerStatus.RestartCount + 1
}
...
}