文章目录

  • 1. Pod的设计动机
  • 1.1 玩法
  • 1.2 对外
  • 1.3 对内
  • 1.4 Pod死掉
  • 2. lnit容器
  • 3. 镜像拉取策略
  • 4. Pod状态和重启策略
  • 4.1 Pod状态
  • 4.2 容器重启策略
  • 4.3 Pod状态对应重启策略


1. Pod的设计动机

1.1 玩法

容器介于操作系统和应用之间,容器的推荐玩法是每个容器运行一个进程。

1.2 对外

Pod作为一个独立的部署单位,支持横向扩展和复制。共生(协同调度),命运共同体(例如被终结),协同复制,资源共享,依赖管理

1.3 对内

Pod内容器互相协作如下:

  • pod中的应用必须协调端口占用。
    每个pod都有一个唯一的IP地址,跟物理机和其他pod都处于一个扁平的网络空间中,它们之间可以直接连通。
  • Pod中应用容器的hostname被设置成Pod的名字。
  • Pod中的应用容器可以共享volume。
    Volume能够保证pod重启时使用的数据不丢失

1.4 Pod死掉

在以下几种情况下都会死:

  • 调度失败
  • 节点故障
  • 缺少资源
  • 节点维护
  • 用户主动干掉Pod

2. lnit容器

  • 概念
    Init 容器是一种专用的容器,在应用程序容器启动之前运行。总是运行到成功完成为止。
    每个 Init 容器都必须在下一个 Init 容器启动之前成功完成。
  • 作用

等待一个 Service 创建完成,通过类似如下 shell 命令:

for i in {1..100}; do sleep 1; if dig myservice; then exit 0; fi; exit 1

在启动应用容器之前等一段时间,使用类似 sleep 60 的命令

3. 镜像拉取策略

imagePullPolicy选项参数如下:

  • Always
    总是拉取新镜像
imagePullPolicy: Always
  • IfNotPresent
    本地有则使用本地镜像,不拉取
imagePullPolicy: IfNotPresent
  • Never
    只使用本地镜像,从不拉取
imagePullPolicy: Never

4. Pod状态和重启策略

4.1 Pod状态

  • Pending
    Pod已被K8S系统接收,但有一个或多个容器镜像尚未创建。等待时间包括调库Pod的时间和通过网络下载镜像的时间。
  • Running
    该Pod已经绑定到一个节点上,Pod中所有容器都已被创建。至少有一个容器正在运行,或者正处于启动或重启状态。
  • Successd
    Pod中所有容器都被成功终止并且不会再重启。
  • Failed
    Pod中所有容器都已经终止,并且至少有一个容器是因为失败终止。也就是说,容器以非0状态退出或被系统终止。
  • Unkonwn
    无法获取Pod的状态,通常是因为与Pod所属主机通信失败

4.2 容器重启策略

字段Pod.spec.restartPolicy

  • Always(默认)
    exitCode=任何数字,执行重启操作
  • OnFailure
    exitCode!=0,执行重启操作
  • Never
    exitCode=任何数字,不容器。

4.3 Pod状态对应重启策略

启动容器镜像使用宿主机pip地址 容器 镜像 pod_启动容器镜像使用宿主机pip地址

启动容器镜像使用宿主机pip地址 容器 镜像 pod_pod_02


启动容器镜像使用宿主机pip地址 容器 镜像 pod_kubernetes_03