k8s之init container与应用容器的区别

简单的说明一下二者的区别: 算法

  • 他们仅运行一次,成功后就会退出。
  • init container的运行方式与应用容器不一样,它们必须先于应用容器执行完成,当设置了多个init container时,将按顺序逐个运行,而且只有前一个initcontainer运行成功后才能运行后一个init container。当全部initcontainer都成功运行后,kubernetes才会初始化pod的各类信息,并开始建立和运行应用容器。
  • 在init container的定义中也能够设置资源限制、volume的使用和安全策略等等.但资源限制的设置与应用容器不一样:
  • 若是多个init container都定义了资源请求/资源限制,则取最大的值做为全部initcontainer的资源请求值/资源限制值。
  • pod的有效资源请求值/资源限制值取如下两者中的较大值:
  • 全部应用容器的资源请求值/限制值之和
  • init container的有效资源请求值/限制值
  • 调度算法将基于pod的有效资源请求值/限制值进行计算,也就是说initcontainer能够为初始化操做预留系统资源,即便后续应用容器无须使用这些资源。
  • pod的有效QoS等级适用于init container和应用容器。
  • 资源配额和限制将根据pod的有效资源请求/限制,与调度机制一致。
  • init container不能设置readinessProbe探针,由于必须在它们成功运行之后才能继续运行pod中定义的普通容器。将pod重启时,initcontainer将会从新运行,常见的pod重启场景以下:
    1. init container的镜像被更新时,initcontainer将从新运行,致使pod重启,仅更新应用容器的镜像只会使得应用容器被重启。
    2. pod的infrastructure容器更新时,pod将会重启。
    3. 或pod中的全部应用容器都终止了,而且RestartPolicy=Always时,则pod将会重启。
相关文章
相关标签/搜索