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将会重启。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章