作者信息:https://home.cnblogs.com/u/huangjiabobk

在K8S中,创建Pod的流程是什么?

在 Kubernetes 中,创建 Pod 的过程涉及多个组件的协作,以确保 Pod 能够正确地被调度、启动并运行。以下是创建 Pod 的详细流程:

1. 客户端提交 Pod 定义

创建 Pod 的过程通常从客户端(如 kubectl 命令行工具、Kubernetes API 客户端或 Kubernetes Dashboard)开始。用户通过以下方式提交 Pod 的定义:

  • 使用 kubectl 命令

    bash复制

    kubectl apply -f pod-definition.yaml

    这里的 pod-definition.yaml 是一个 YAML 文件,定义了 Pod 的配置,包括容器镜像、资源限制、挂载卷等。

  • 直接调用 Kubernetes API: 通过 HTTP 请求将 Pod 的定义发送到 Kubernetes API Server。

2. API Server 接收请求

Kubernetes API Server 是集群的入口点,负责处理所有与 Kubernetes 资源相关的请求。当 API Server 接收到创建 Pod 的请求后:

  • 验证请求:检查请求的合法性,包括用户权限、Pod 配置是否符合规范等。
  • 存储 Pod 定义:将 Pod 的定义存储到 etcd 数据库中。etcd 是 Kubernetes 的分布式存储系统,用于存储集群的状态信息。
3. Controller Manager 处理 Pod

一旦 Pod 的定义被存储到 etcd 中,Kubernetes 的 Controller Manager 会检测到新的 Pod 对象,并触发相应的控制器来处理:

  • Replication ControllerReplicaSet Controller:如果 Pod 是由 Deployment 或 ReplicaSet 控制的,则相应的控制器会负责创建和管理 Pod 的副本。
  • DaemonSet Controller:如果 Pod 是由 DaemonSet 控制的,则 DaemonSet Controller 会确保每个节点上都运行一个 Pod 副本。
  • Job Controller:如果 Pod 是由 Job 控制的,则 Job Controller 会负责运行 Pod 直到完成。
4. Scheduler 调度 Pod

Kube-scheduler 是 Kubernetes 的调度组件,负责决定将 Pod 分配到哪个节点上运行。调度过程包括以下步骤:

  • 节点筛选:根据 Pod 的资源需求(如 CPU、内存)、节点的资源状态、亲和性规则(如节点亲和性、Pod 亲和性)等条件,筛选出符合条件的节点。
  • 节点评分:对筛选出的节点进行评分,选择评分最高的节点作为目标节点。
  • 绑定:将 Pod 绑定到选定的节点上,并将绑定信息存储到 etcd 中。
5. Kubelet 启动 Pod

Kubelet 是运行在每个节点上的代理,负责管理节点上的 Pod 和容器。当 Kubelet 检测到新的 Pod 绑定到当前节点时:

  • 拉取镜像:根据 Pod 定义中的容器镜像信息,从镜像仓库(如 Docker Hub、私有镜像仓库)拉取所需的容器镜像。
  • 创建容器:使用容器运行时(如 Docker 或 containerd)创建容器,并启动容器。
  • 挂载卷:如果 Pod 配置了卷(如 Persistent Volume),Kubelet 会负责将卷挂载到容器中。
  • 设置网络:为 Pod 分配网络资源(如 IP 地址),并配置网络接口,确保 Pod 可以与其他 Pod 和外部网络通信。
6. Pod 运行

一旦容器启动并运行,Pod 就进入运行状态。Kubelet 会持续监控 Pod 的状态,确保容器正常运行。如果容器崩溃,Kubelet 会根据 Pod 的重启策略(如 AlwaysOnFailureNever)决定是否重新启动容器。

7. 健康检查

Kubernetes 支持对 Pod 进行健康检查,以确保 Pod 的服务正常运行:

  • Liveness Probe:检查容器是否存活,如果容器不健康,Kubelet 会重启容器。
  • Readiness Probe:检查容器是否准备好接受流量,如果容器未准备好,Kubernetes 会将流量从该 Pod 上移除,直到容器准备好为止。
8. 日志和监控

Kubernetes 提供了日志和监控机制,用于跟踪 Pod 的运行状态:

  • 日志:容器的日志可以通过 kubectl logs 命令查看,也可以通过集成的日志系统(如 Fluentd、ELK Stack)进行集中管理和分析。
  • 监控:使用 Prometheus、Grafana 等工具监控 Pod 的资源使用情况(如 CPU、内存)、性能指标等。
9. 清理和终止

当 Pod 不再需要运行时,可以通过以下方式终止 Pod:

  • 删除 Pod

    bash复制

    kubectl delete pod <pod-name>

    API Server 会将 Pod 的状态设置为 Terminating,并通知 Kubelet 停止 Pod 中的容器。

  • 优雅终止:Kubelet 会向容器发送 SIGTERM 信号,容器可以在接收到信号后进行清理操作(如保存状态、关闭连接等)。如果容器在指定的宽限期(terminationGracePeriodSeconds)内未退出,Kubelet 会发送 SIGKILL 信号强制终止容器。

综上所述,通过以上步骤,Kubernetes 完成了从创建到运行再到终止 Pod 的整个生命周期管理。

posted @   黄嘉波  阅读(22)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
历史上的今天:
2024-01-29 在K8S中,怎样实现数据持久化?
2024-01-29 在K8S中,Service类型有哪些?
2024-01-29 在K8S中,deploy和Statefulset有何区别?
2024-01-29 在K8S中,deploy升级过程包括什么?
2024-01-29 在K8S中,deploy创建过程包括什么?
版权声明:原创作品,谢绝转载!否则将追究法律责任。--作者 黄嘉波
点击右上角即可分享
微信分享提示