基本单元
,协同寻址,协同调度。UID
来唯一标识,当Pod生命周期结束,被一个等价Pod替代,UID将重新生成。即one-container-per-Pod
模式,是最常用的模式,可以把这样的Pod看成单独的一个容器去管理。
即sidecar
模式,Pod 封装了一组紧耦合、共享资源、协同寻址的容器,将这组容器作为一个管理单元。
Pod是一组紧耦合的容器的集合,Pod内的容器作为一个整体以Pod形式进行协同寻址,协同调度、协同管理。相同Pod内的容器共享网络和存储。
localhos
t通信,Pod内端口不能冲突。存储卷
的方式来实现不同容器之间数据共享。Pod 是一种模式的抽象:互相协作的多个进程(容器)共同形成一个完整的服务。以一个或多个容器的方式组合成一个整体,作为管理的基本单元,通过Pod可以方便部署、水平扩展,协同调度等。
Pod作为多个紧耦合的容器的集合,通过共享网络和存储的方式来简化紧耦合容器之间的通信,从这个角度,可以将Pod简单理解为一个逻辑上的“虚拟机”。而不同的Pod之间的通信则通过Pod的IP和端口的方式。
Pod一般是通过各种不同类型的Controller
对Pod进行管理和控制,包括自我恢复(例如Pod因异常退出,则会再起一个相同的Pod替代该Pod,而该Pod则会被清除)。也可以不通过Controller单独创建一个Pod,但一般很少这么操作,因为这个Pod是一个孤立的实体,并不会被Controller管理。
Controller
是kubernetes中用于对Pod进行管理的控制器,通过该控制器让Pod始终维持在一个用户原本设定或期望的状态。如果节点宕机或者Pod因其他原因死亡,则会在其他节点起一个相同的Pod来替代该Pod。
常用的Controller有:
Deployment
StatefulSet
DaemonSet
Controller
是通过用户提供的Pod模板来创建和控制Pod。
Pod模板用来定义Pod的各种属性,Controller通过Pod模板来生成对应的Pod。
Pod模板类似一个饼干模具,通过模具已经生成的饼干与原模具已经没有关系,即对原模具的修改不会影响已经生成的饼干,只会对通过修改后的模具生成的饼干有影响。这种方式可以更加方便地控制和管理Pod。
用户发起一个删除Pod的请求,系统会先发送TERM
信号给每个容器的主进程,如果在宽限期(默认30秒)主进程没有自主终止运行,则系统会发送KILL
信号给该进程,接着Pod将被删除。
terminating
。preStop hook
,这会在 pod 内部进行调用。如果宽限期已经过期但 preStop 锚依然还在运行,将调用第2步并在原来的宽限期上加一个小的时间窗口(2 秒钟)。TERM
信号。SIGKILL
杀掉。强制删除Pod是指从k8s集群状态和Etcd中立刻删除对应的Pod数据,API Server不会等待kubelet的确认信息。被强制删除后,即可重新创建一个相同名字的Pod。
删除默认的宽限期是30秒,通过将宽限期设置为0的方式可以强制删除Pod。
通过kubectl delete
命令后加--force
和--grace-period=0
的参数强制删除Pod。
kubectl delete pod <pod_name> --namespace=<namespace> --force --grace-period=0
特权模式是指让Pod中的进程具有访问宿主机系统设备或使用网络栈操作等的能力,例如编写网络插件和卷插件。
通过将container spec
中的SecurityContext
设置为privileged
即将该容器赋予了特权模式。特权模式的使用要求k8s版本高于v1.1
。
参考文章: