【K8s】Pod 目录1.请解释Pod是什么2. 什么是Pod的根容器3. 解释Pod的生命周期。4.. Init 类型容器有什么特点主要用途5. Sidecar 类型容器和Init容器的区别在哪6. 什么是静态Pod1.解释Pod是什么Pod 是 K8s 中可调度、可管理的最小、最基本的部署单元。一个 Pod 代表集群中一个“进程”。它封装了一个或多个容器、存储资源、一个唯一的网络 IP 以及关于如何运行容器的选项。Pod 里的多个容器共享同一个网络命名空间共享 IP 和端口空间和 IPC 命名空间因此它们可以通过 localhost 互相通信并能共享存储卷Volume。这非常适合部署紧密耦合、需要高效协作的多个进程。理解要点K8s 不直接操作单个容器而是操作 Pod。一个典型的场景是“主容器 辅助容器”例如一个容器运行 Web 服务另一个负责拉取日志。2. 什么是Pod的根容器在 Kubernetes 的早期设计中这个概念被称为pause 容器可以理解为 Pod 的根容器或基础容器其主要职责是占位并维护 Pod 的资源确保 Pod 的生命周期稳定。1作用它是最先启动的容器负责为整个 Pod 持有网络和 IPC 命名空间。Pod 内所有其他用户容器都会加入共享由这个 pause 容器创建的命名空间。2为什么需要它有了这个“根容器”作为锚点即使 Pod 内的某个业务容器崩溃或被重启它的网络配置和共享存储等资源也不会受到影响因为根容器始终在运行维持着 Pod 的基础结构。3. 如何理解Pod的生命周期。当用户在终端执行命令创建Pod时kubectl将用户写好的yaml文件转化为JSON格式发给API Server,API Server进行校验检查Pod的权限、申请的资源是否符合要求检查通过后把Pod状态写入etcd库容器的状态为pending。同时API Server把Pod的信息公示调度器、kubelet等实时关注API Server公示的信息发现有自己的任务就迅速认领并处理这就是list-watch机制。调度器发现有新的Pod没有绑定节点采用调度算法对所有节点进行检查过滤掉资源不足、不符合要求的节点再对符合要求的节点按照权重打分找出一个最合适的节点和Pod绑定并且将绑定信息发送给API ServerAPI Server将绑定信息更新到etcd库同时公示。Pod绑定节点的kubelet监测发现了分给自己的Pod,准备好网络和存储立即拉取镜像创建容器容器启动后kubelet监测容器的健康状态把结果发送给API ServerAPI Server更新容器的状态为runningAPI Server把容器最终的状态写入etcd库。每次的处理都要写入etcd库只要写进etcd库系统就会想办法实现。4.. Init 类型容器有什么特点主要用途Init 容器是一种特殊的、在应用容器启动之前运行的专用容器。Init容器有以下特点1顺序执行一个 Pod 可以定义多个 Init 容器它们会按顺序逐一执行成功完成一个才能启动下一个。2必须成功所有 Init 容器都必须成功运行后退出且退出码为0否则 Pod 会不断重启直至成功。3阻塞应用在全部 Init 容器完成之前Pod 会一直处于 Pending 或 Init:0/... 状态主容器不会被启动。Init容器主要用于环境准备、数据初始化和权限设置1环境准备等待数据库、消息队列等依赖服务就绪。2数据初始化创建数据库 Schema、执行数据迁移脚本、预填配置文件。3权限设置修改共享卷的文件权限或所有者。5. Sidecar 类型容器和Init容器的区别在哪通过一个表格从多个维度对比sidecar容器和Init容器的区别维度Init 容器Sidecar 容器运行阶段在 Pod 启动时主容器之前运行。与主容器同时运行伴随整个生命周期。执行模式运行任务后必须退出成功/失败。持续运行不会退出除非出错。数量可以有多个但顺序执行。通常一个与主容器并行运行。资源占用任务完成后即释放资源CPU/内存。长期占用 Pod 的资源。典型用途初始化、等待依赖、数据准备。日志收集、代理/流量转发、监控辅助、配置动态更新。6. 什么是静态Pod静态 Pod 是直接由节点上的 kubelet 守护进程管理而不通过 Kubernetes API Server 控制的 Pod。1创建方式你需要在节点的特定目录通常由 --pod-manifest-path 或 --manifest-url 指定如 /etc/kubernetes/manifests里放一个 Pod 的 JSON/YAML 文件。kubelet 会定期扫描该目录自动创建并维护其中的 Pod。2特点不服从调度静态 Pod 永远只能运行在它所在的节点上不受调度器控制。API 只读你可以用 kubectl get pod 看到它但无法通过 kubectl delete 删除它3主要用于部署核心控制平面组件这也是Kubeadm 部署 Kubernetes 集群的方法——kube-apiserver、etcd、kube-controller-manager 等组件都是以静态 Pod 的形式运行在 master 节点上的。这保证了即使 API Server 宕机这些核心组件仍能由 kubelet 维持运行。