在Kubernetes集群中,Pod是所有业务类型的基础,也是K8S管理的最小单位级,它是一个或多个容器的组合。这些容器共享存储、网络和命名空间,以及如何运行的规范。在Pod中,所有容器都被统一安排和调度,并运行在共享的上下文中。对于具体应用而言,Pod是它们的逻辑主机,Pod包含业务相关的多个应用容器。二、Pod实现机制与设计模式
每个Pod都有一个特殊的被称为"根容器"的Pause 容器(Pause容器,又叫Infrastructure容器)。 Pause容器对应的镜像属于Kubernetes平台的一部分,除了Pause容器,每个Pod还包含一个或者多个紧密相关的用户业务容器。
众所周知,容器之间是通过Namespace隔离的,Pod要想解决上述应用场景,那么就要让Pod里的容器之间高效共享。
具体分为两个部分:网络和存储
kubernetes的解法是这样的:会在每个Pod里先启动一个infra container小容器,然后让其他的容器连接进来这个网络命名空间,然后其他容器看到的网络试图就完全一样了,即网络设备、IP地址、Mac地址等,这就是解决网络共享问题。在Pod的IP地址就是infra container的IP地址。
比如有两个容器,一个是nginx,另一个是普通的容器,普通容器要想访问nginx里的文件,就需要nginx容器将共享目录通过volume挂载出来,然后让普通容器挂载的这个volume,最后大家看到这个共享目录的内容一样。例如:
注意,这里的重启是指在Pod所在Node上面本地重启,并不会调度到其他Node上去。四、资源限制
1核=1000m那上面限制配置就是1核的二分之一(500m),即该容器最大使用半核CPU。
1.5核=1500m
半核=0.5五、重启策略
1核=1
1.5核=1.5
默认情况下,kubelet 根据容器状态作为健康依据,但不能容器中应用程序状态,例如程序假死。这就会导致无法提供服务,丢失流量。因此引入健康检查机制确保容器健康存活。健康检查有两种类型:
如果检查失败,将杀死容器,根据Pod的restartPolicy来操作。
如果检查失败,Kubernetes会把Pod从service endpoints中剔除。这两种类型支持三种检查方法:
发送HTTP请求,返回200-400范围状态码为成功。
执行Shell命令返回状态码是0为成功。
发起TCP Socket建立成功。
先看下创建一个Pod的工作流程: create pod -> apiserver -> write etcd -> scheduler -> bind pod to node -> write etcd -> kubelet( apiserver get pod) -> dcoekr api,create container -> apiserver -> update pod status to etcd -> kubectl get pods
这里给你介绍调度策略:nodeName、nodeSelector和污点1)nodeName
nodeSelector用于将Pod调度到匹配Label的Node上。先给规划node用途,然后打标签,例如将两台node划分给不同团队使用:
然后在创建Pod只有声明了容忍污点(tolerations),才允许被调度到abc=123污点节点上。
kubectl taint node k8s-node1 abc=123:NoSchedule
Pod已经被创建,但还没有完成调度,或者说有一个或多个镜像正处于从远程仓库下载的过程。处在这个阶段的Pod可能正在写数据到etcd中、调度、pull镜像或启动容器。2、Running:运行中
该 Pod 已经绑定到了一个节点上,Pod 中所有的容器都已被创建。至少有一个容器正在运行,或者正处于启动或重启状态。3、Succeeded:正常终止
Pod中的所有的容器已经正常的执行后退出,并且不会自动重启,一般会是在部署job的时候会出现。4、Failed:异常停止
Pod 中的所有容器都已终止了,并且至少有一个容器是因为失败终止。也就是说,容器以非0状态退出或者被系统终止。5、Terminating 或 Unknown 状态
从 v1.5 开始,Kubernetes 不会因为 Node 失联而删除其上正在运行的 Pod,而是将其标记为 Terminating 或 Unknown 状态。6、Error 状态
通常处于 Error 状态说明 Pod 启动过程中发生了错误。常见的原因包括:
状态由ContainerCreating变为Completed再变为CrashLoopBackOff,原因是command: 或args 参数错误无法正常执行。用一张图来表示Pod的各个状态
pod 是否能持续运行,是由执行命令决定的,执行命令如果一执行就停止,控制台也停止持续输出,pod生命周期就结束,pod状态就会变成CrashLoopBackOff。
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) | Powered by Discuz! X3.4 |