kubernetes笔记-Init容器

2019-01-04  本文已影响0人  潘猛_9f76

      init容器是在普通容器之前运行的专用容器,可以包含普通容器映像中不存在的应用程序或安装脚本。        一个pod可以包含多个普通容器和多个init容器。在 Pod 中所有容器的名称必须唯一。

    init容器在普通容器启动前顺序执行。如果init容器失败,则认为pod失败,K8S会根据pod的重启策略来重启这个容器,直到成功。

    init容器需要在pod.spec中的initContainers数组中定义(与3pod.spec.containers数组相似)。init容器的状态在.status.initcontainerStatus字段中作为容器状态的数组返回(与status.containerStatus字段类似)。init容器支持普通容器的所有字段和功能,除了readinessprobe。

    Init 容器只能修改image 字段,修改image 字段等于重启 Pod,Pod 重启所有Init 容器必须重新执行。

    因为Init 容器可能会被重启、重试或者重新执行,所以 Init 容器的代码应该是幂等的。在 Pod 上使用 activeDeadlineSeconds,在容器上使用 livenessProbe,相当于为 Init 容器活跃设置了一个期限,能够避免 Init 容器一直失败。以下为init container的例子:

1、新建一个包含两个init 容器一个普通容器的pod配置文件initcontainer.yaml

2、创建Pod后,由于域名无法解析,所以init容器无法执行成功,所以状态处于Init:0/2的状态

3、通过kubectl describe pod,可以看到第一个init container处于Running状态,ready为False

4、创建SVC,将myservice指向www.baidu.com,使init-myservice容器执行成功,init-db处于running状态,ready为False

5、同理,启动svc mydb后,init-db执行成功,myapp-pod进入RUNNING状态

上一篇下一篇

猜你喜欢

热点阅读