Pod运行在一个被称为节点 (Node)的环境中,这个节点既可以是物理机,也可以是私有云或者公 有云中的一个虚拟机,
在一个节点上能够运行多个Pod;
其次,在每个 Pod中都运行着一个特殊的被称为Pause的容器,其他容器则为业务容 器,这些业务容器共享Pause容器的网络栈和Volume挂载卷,因此它们之间的通信和数据交换更为高效,在设计时我们可以充分利用这一特性 将一组密切相关的服务进程放入同一个Pod中
在Node上,Kubernetes管理的最小运行单元是 Pod。在Node上运行着Kubernetes的kubelet、kube-proxy服务进程,这些服务进程负责Pod的创建、启动、监控、重启、销毁,以及实现软件模 式的负载均衡器。
Node上都运行着以下关键进程
◎ kubelet:负责Pod对应容器的创建、启停等任务,同时与 Master密切协作,实现集群管理的基本功能。
◎ kube-proxy:实现Kubernetes Service的通信与负载均衡机制的 服务。
◎ 容器运行时(如Docker):负责本机的容器创建和管理。
◎ Node的基本信息:名称、标签、创建时间等。
◎ Node当前的运行状态:Node启动后会做一系列自检工作,比 如磁盘空间是否不足(DiskPressure)、内存是否不足 (MemoryPressure)、网络是否正常(NetworkUnavailable)、PID资源 是否充足(PIDPressure)。在一切正常时才设置Node为Ready状态 (Ready=True),表示Node处于健康状态,Master就可以在其上调度新 的任务了(如启动Pod)。
◎ Node的主机地址与主机名。
◎ Node上的资源数量:描述Node可用的系统资源,包括CPU、 内存数量、最大可调度Pod数量等。 ◎ Node可分配的资源量:描述Node当前可用于分配的资源量。
◎ 主机系统信息:包括主机ID、系统UUID、Linux Kernel版本 号、操作系统类型与版本、Docker版本号、kubelet与kube-proxy的版本 号等。
◎ 当前运行的Pod列表概要信息。
◎ 已分配的资源使用概要信息,例如资源申请的最小、最大允许 使用量占系统总量的百分比。
◎ Node相关的Event信息。通过kubectl describe node 命令查看某个Node的详 细信息:
pod
Kubernetes为每个Pod都分配了唯一的IP地址,称之为Pod IP,一个 Pod里的多个容器共享Pod IP地址。Kubernetes要求底层网络支持集群内 任意两个Pod之间的TCP/IP直接通信,这通常采用虚拟二层网络技术实 现
Pod的重启策略包括Always、OnFailure和Never,默认值为Always。
◎ Always:当容器失效时,由kubelet自动重启该容器。
◎ OnFailure:当容器终止运行且退出码不为0时,由kubelet自动 重启该容器。
◎ Never:不论容器运行状态如何,kubelet都不会重启该容器。
对Pod的健康状态可以通过三类探针来检查:
LivenessProbe、
ReadinessProbe
StartupProbe
LivenessProbe探针:用于判断容器是否存活(Running状 态),如果LivenessProbe探针探测到容器不健康,则kubelet将“杀掉”该 容器,并根据容器的重启策略做相应的处理。如果一个容器不包含 LivenessProbe探针,那么kubelet认为该容器的LivenessProbe探针返回的 值永远Success。
ReadinessProbe探针:用于判断容器服务是否可用(Ready状 态),达到Ready状态的Pod才可以接收请求。对于被Service管理的 Pod,Service与Pod Endpoint的关联关系也将基于Pod是否Ready进行设 置。如果在运行过程中Ready状态变为False,则系统自动将其从Service 的后端Endpoint列表中隔离出去,后续再把恢复到Ready状态的Pod加回 后端Endpoint列表。这样就能保证客户端在访问Service时不会被转发到 服务不可用的Pod实例上。需要注意的是,ReadinessProbe也是定期触发 执行的,存在于Pod的整个生命周期中。