K8S对象-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状态对应重启策略

image.png


posted on 2021-09-14 16:02  运维开发玄德公  阅读(13)  评论(0编辑  收藏  举报  来源

导航