kubernetes之pod的创建流程



1、POD 的创建流程

kubectl 发起创建 Pod 请求:

        用户通过 kubectl create 命令(或其他等效方式)向 Kubernetes API Server 发起一个创建 Pod 的请求。这个请求包含了 Pod 的定义,通常是一个 YAML 或 JSON 格式的文件。 API Server 接收请求并处理:

        Kubernetes API Server 接收到创建 Pod 的请求后,会对请求进行验证和授权检查。 API Server 不会直接创建 Pod,而是将这个请求转化为一个内部表示(如一个含有 Pod 创建信息的 YAML 格式的对象)。 写入 Etcd 数据库:

        API Server 将这个 Pod 对象的信息写入到 Etcd 数据库。Etcd 作为 Kubernetes 的数据存储,保存了集群的状态和配置。 Scheduler 进行调度:

        Kubernetes Scheduler 持续监视 API Server,检查新的或未被调度的 Pod。 当 Scheduler 发现一个新的 Pod(pod.spec.Node == null 表示这个 Pod 还没有被调度到任何节点),它将根据资源需求、亲和性规则、污点和容忍度等因素选择一个合适的节点。 一旦选择了节点,Scheduler 将更新该 Pod 的信息,指定其运行在选择的节点上,并将这个更新写回到 Etcd。 Kubelet 监听并创建 Pod:

        每个节点上的 Kubelet 进程持续监视 Etcd,查找分配给自己节点的新任务。 当 Kubelet 发现有新的 Pod 分配到它所在的节点,它会根据 Pod 定义开始创建和启动 Pod 中的容器。 Kubelet 调用容器运行时(如 Docker)来实际启动容器,并设置必要的网络和存储配置。 Pod 状态更新和汇报:

        在 Pod 创建过程中,Kubelet 将 Pod 的状态更新回 API Server。这些状态信息包括 Pod 是否成功启动,运行中的容器等。 API Server 更新 Etcd 中的状态信息,确保集群状态的一致性。

2、POD 的状态

1. Pending

Pod 已被 Kubernetes 系统接受,但有一个或多个容器镜像尚未创建。

Pod 等待被调度到一个节点上。

网络配置等前期准备工作正在进行中。

2. Running

Pod 已经被调度到一个节点上,并且所有的容器都已创建。

至少有一个容器正在运行,或者正在启动或重启。

3. Succeeded

Pod 中的所有容器都正常运行完毕,并已经退出。

这通常适用于一次性或批处理作业。

4. Failed

Pod 中至少有一个容器以非零状态退出。

表明容器启动失败或运行中出现错误。

5. Unknown

由于某种原因,Pod 的状态无法确定。

通常是与 Pod 通信出现问题,如节点故障。

6. CrashLoopBackOff

表明 Pod 中的一个或多个容器尝试启动后失败,正在尝试重启。

这可能是由于应用程序错误、配置问题等引起的。

7. ImagePullBackOff

Pod 无法拉取一个或多个容器镜像。

可能是因为镜像不存在,或者与容器注册中心的认证问题。

8. Terminating

当 Pod 被标记为删除并开始终止过程时,会进入此状态。

这个状态意味着 Kubernetes 正在停止 Pod 中的所有容器。

9. Evicted

当节点上的资源(如内存或磁盘空间)不足时,Pod 可能会被驱逐。

驱逐行为是 Kubernetes 为了保护节点稳定性而自动执行的操作。

10. OOMKilled

如果 Pod 中的容器使用超出其分配的内存限制,它可能会被系统的 Out-Of-Memory (OOM) killer 终止。

这通常表明容器配置的内存限制过低或应用程序内存泄露。

11. ContainerCreating

当 Kubernetes 正在创建 Pod 中的容器时,Pod 会处于此状态。

这可能涉及到拉取容器镜像、创建容器等操作。

12. Completed

这是一个非常用状态,表明 Pod 中的所有容器都已成功完成其任务并且正常退出。

这通常用于有限期或批处理任务。

3、Kubernetes 架构中一般有几个主节点,为什么

        单个主节点:

        对于小型或开发环境,通常只有一个主节点。 这简化了配置,但缺点是没有高可用性。如果主节点出现故障,整个集群可能会受到影响。 多个主节点 (高可用性配置):

在生产环境中,为了实现高可用性(HA),通常会有多个主节点。 常见配置是三个主节点,这样即使一个节点失败,集群的控制平面仍然可以继续运行。 使用三个或更多节点可以防止“脑裂”(split-brain)情况,这是当网络分区发生时,避免出现多个主节点同时认为自己是活动的情况。 为什么选择三个节点:

        在分布式系统中,使用奇数个节点可以更好地处理脑裂和投票决策。当存在偶数个节点时,可能会出现投票平局的情况,从而使集群难以决定哪个版本的数据是最新的。 三个节点是高可用性配置的最小数量,提供了故障转移能力,同时在资源和管理复杂性方面保持平衡。 更多节点:

        对于大型或特别关键的环境,可能会有超过三个主节点。 随着节点数量的增加,管理复杂性和资源需求也会增加,因此需要权衡成本和可用性的需求

  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Kubernetes是一种可扩展和便携式的容器编排系统,可以帮助开发人员和运维人员更轻松地管理和部署容器化应用程序。下面是Kubernetes DevOps搭建流程的步骤: 1. 安装Docker和Kubernetes CLI Docker是一种容器技术,可以在其中运行应用程序。Kubernetes CLI是Kubernetes的命令行工具,可以帮助您管理Kubernetes集群。在安装之前,请确保您的服务器版本符合要求。 2. 安装Kubernetes集群 您可以使用Kubeadm、Minikube或Kops等工具来安装Kubernetes集群。Kubeadm是官方推荐的安装工具,可以帮助您快速轻松地在本地或云服务器上安装Kubernetes集群。 3. 创建Kubernetes对象 Kubernetes对象是Kubernetes中的基本构建块,可以帮助您定义和管理应用程序的部署、服务、存储和网络等资源。您可以使用YAML文件创建Kubernetes对象。 4. 部署应用程序 使用Kubernetes对象和Docker镜像,您可以轻松地部署应用程序。您可以将应用程序部署为Pod、Deployment或Service等Kubernetes对象。 5. 监控和日志记录 Kubernetes提供了许多内置的监控和日志记录工具,例如Prometheus、Grafana和ELK等工具。您可以使用这些工具来监控和分析应用程序的性能和状态。 6. 自动化部署和测试 使用自动化工具(例如Jenkins、GitLab CI/CD等),您可以自动化部署和测试应用程序。这些工具可以帮助您更快地部署新功能和修复程序错误。 7. 安全和身份验证 Kubernetes提供了内置的安全和身份验证机制,例如RBAC(基于角色的访问控制)、TLS(传输层安全协议)和OAuth2等。您可以使用这些机制来保护应用程序和数据的安全性。 以上是Kubernetes DevOps搭建流程的基本步骤。在实际操作中,您可能需要根据自己的业务需求和实际情况进行调整和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值