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状态状态

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

5. 容器重启策略

字段Pod.spec.restartPolicy

  • Always(默认)
    exitCode=任何数字,执行重启操作

  • OnFailure
    exitCode!=0,执行重启操作

  • Never
    exitCode=任何数字,不容器。

6. pod状态和重启策略

image.png
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容