Kubernetes详解--Pod

(题外话:之前研究了好多开源软件,但是每当研究开源软件的时候,感觉了解的都不是很透彻,这次尝试研究官方文档,看看效果如何,下面的资料,是按照官方文档翻译的,比较笨,但是了解更深入了,希望能坚持下来**)**

1.1.1 POD

一组容器(一个或者多个Container),共享存储,以相同的方式运行、Pods的容器位于同一节点,被一起调度,同时部署,启动、重启、删除,伸缩,运行在相同的Context。POD的模型对应 应用专属的逻辑主机,他包含一个或多个相对紧耦合的应用容器。PS:在使用容器之前,这些应用可能需要部署在相同的物理机或者虚拟机。

POD内Container共享的上下文包括:Linux Namespace、cgroups等(docker相关的隔离策略),在POD的上下文中,每个应用可能会有深层次的隔离

POD内的容器共享一个IP和PORT空间,容器可以通过localhost 互相发现,容器也可以通过标准的内部进程进行交互(System V semaphores 或者Posix 共享内存),不同POD内的容器具有不同的IP,无法通过IPC进行交互

 POD内的容器可以访问共享卷,可以被挂载到每个应用的文件系统。

当POD所在节点挂掉后,该POD不会被重新调度到其他节点,而是一个新的POD在其他节点创建,uuid不同(将来版本,可能会提供迁移POD的功能),与POD同生命周期的概念,具体是指和该uuid pod的生命周期相同。

1.1.2 POD 产生原因

l  管理,POD的模型可以理解为:由多个可以组成一个服务的协作进程的集合。这种模式提供了比Container更高一层的抽象,从而简化了部署和管理。POD作为部署、水平伸缩,副本的执行单元。POD内的Container统一调度、拥有一样的生命周期、一致的副本,资源共享、统一的依赖管理

l  资源共享和通信:POD资源Containers的资源共享和通信。POD中的Container的host name 和POD的name相同

POD虽然也可以部署一组垂直的容器,例如LAMP,但是POD的主要目的是用于以下程序:

1、 content management systems, file and data loaders, local cache managers, etc.

2、 log and checkpoint backup, compression, rotation, snapshotting, etc.

3、 data change watchers, log tailers, logging and monitoring adapters, event publishers, etc.

4、 proxies, bridges, and adapters

5、 controllers, managers, configurators, and updaters

1.1.3 POD 删除

POD 代表一组运行的进程,所以应该能够优雅的终止这些进程(让这些进程能够执行一些数据清理,而不是直接kill),用户应能够请求删除POD,并指导什么时候该POD会被删除,并且能够确保POD内的进程最终被删除。当用户请求删除POD时,系统会记录可以允许该POD多久进行自我删除,超过该时间,TERM信号就会发送到POD内的全部容器。当POD正在删除过程中,Kubelete或者容器被重启,终止进程将会重新开始删除Pod(with full grace period)

一个删除流程的例子:

1.用户请求删除POD,默认的 grace period 是30s

2.API server更新该POD应该被删除的时间

3.当查询POD时,显示该POD “Terminating”

4.与第三步同步,当Kubelet发现Pod被标记为Terminating,kubelet开始关闭进程。

5.若Pod定义了 preStop hook,那么该hook会被激活,若该hook的运行时间超过了grace period,会再次执行第二步,grace period会变为30s+2s

6.发送TERM 信号到Pod内的进程

7.与第三步同时,POD将会从Service 的endpoint列表移除,但是关闭比较慢的POD 仍然可以进行服务访问(前提是svc没有被删除)

8.当grace period后,POD内仍然运行的进程都会收到SIGKILL信号

9.Kubelet在API server中设置grace period 为0 代表已经删除完成

默认情况下,POD会在30s内被删除,但是可以命令行设置该事件 通过 –grace-period= ,0表示立即删除POD(这样该POD的名称可以尽快重复使用,但是该POD仍然会有一段比较小的grace period)

1.1.4 Pod 的Privileged 模式

K8s 1.1 版本以后,可以为Pod中的Container设置privileged模式,通过设置SecurityContext 参数