设置容器重启次数

基于kubernetes v1.18.6,关于基于windows平台运行kubelet的相关代码逻辑不作解析。

概述

kubelet通过以下四个步骤,来启动pod容器:

  1. 拉取镜像
  2. 创建容器
  3. 启动容器
  4. 执行容器启动后的钩子

其中创建容器又分为以下子步骤:

  1. 设置容器重启次数
  2. 生成创建容器所需配置
  3. 创建容器
  4. 预启动容器
  5. 生成容器引用信息

本文主要解析创建容器/设置容器重启次数阶段kubelet所做工作,首先我们先看下设置容器重启次数阶段的代码逻辑

设置容器重启次数

流程解析

该步骤根据容器名称查询podstatus中容器状态,若查询不到则重启次数设置为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
    }
...
}
Copyright © weiliang 2021 all right reserved,powered by Gitbook本书发布时间: 2024-04-22 16:03:41

results matching ""

    No results matching ""