用户向 API 服务器说:“我要创建一个 Pod。”
API 服务器把用户的话转换成 Kubernetes 内部的语言,然后告诉调度器:“这个 Pod 要创建了。”
调度器把这件事告诉 kubelet,kubelet 就开始准备创建 Pod。
kubelet 为 Pod 创建容器,并为容器分配资源。
容器启动,并开始运行。
用户->>API 服务器: 提交 Pod 创建请求
API 服务器->>调度器: 转换 Pod 创建请求
调度器->>节点: 调度 Pod
节点->>kubelet: 接收 Pod
kubelet->>容器: 创建容器
容器->>: 启动
kubectl delete 命令或 YAML 文件向 API 服务器发送删除 Pod 的请求。Terminating。Terminating。Terminating,并向 Pod 中的每个容器发送 SIGTERM 信号,通知容器准备退出。白话解释
* 用户向 API 服务器说:“我要删除一个 Pod。”
* API 服务器把用户的话转换成 Kubernetes 内部的语言,然后告诉调度器:“这个 Pod 要删除了。”
* 调度器把这件事告诉 kubelet,kubelet 把这件事告诉 Pod 中的容器:“你们要被删除了。”
* 容器听到 kubelet 的话,就开始准备退出。如果容器在规定的时间内没有退出,kubelet 就会强行让它退出。
* 容器退出后,kubelet 会把 Pod 的相关资源都删除掉。
etcd 是 Kubernetes 的记事本,负责记住 Kubernetes 的所有信息。在删除 Pod 时,etcd 要把 Pod 的相关信息都删除掉。
Pending 阶段
在 Pending 阶段,Pod 尚未被调度到任何节点。Pod 处于此阶段的原因可能有以下几种:
Running 阶段
在 Running 阶段,Pod 已被调度到一个节点,并且所有容器都已启动并正在运行。Pod 处于此阶段的时间可能会持续很长,直到 Pod 被终止。
Succeeded 阶段
在 Succeeded 阶段,Pod 中的所有容器都已成功终止。Pod 处于此阶段的原因可能是以下几种:
terminationGracePeriodSeconds 字段,并且该字段指定的超时时间已过。restartPolicy 字段,并且该字段指定的策略为 Never。Failed 阶段
在 Failed 阶段,Pod 中的至少一个容器已失败。Pod 处于此阶段的原因可能是以下几种:
restartPolicy 字段,并且该字段指定的策略为 Always 或 OnFailure。terminationGracePeriodSeconds 字段,并且该字段指定的超时时间已过,但 Pod 中的容器仍未成功终止。Unknown 阶段
在 Unknown 阶段,Pod 的状态无法确定。Pod 处于此阶段的原因可能是以下几种:
restartPolicy 字段,并且该字段指定的策略为 Never。terminationGracePeriodSeconds 字段,并且该字段指定的超时时间已过,但 Pod 仍未被调度到任何节点。Pod 的状态转换
Pod 的状态可能会从一个阶段转换到另一个阶段。以下是 Pod 状态转换的可能情况:
restartPolicy 字段,并且该字段指定的策略为 Never。terminationGracePeriodSeconds 字段,并且该字段指定的超时时间已过,但 Pod 仍未被调度到任何节点。控制 Pod 的状态
可以使用 Kubernetes 的 API 或命令行工具来控制 Pod 的状态。使用 kubectl delete 命令来终止 Pod。
还可以使用 Pod 的 restartPolicy 字段来控制 Pod 在失败时是否重启。如果您将 restartPolicy 字段设置为 Never,则 Pod 将不会在失败时重启。
1.28.x 版本的 Kubernetes 仍然支持 ReplicaSet。但是,新版本的 Kubernetes 建议使用 Deployment 来管理 Pod 副本。Deployment 提供了 ReplicaSet 没有的功能,可以简化应用程序的部署和管理。
以下是 Deployment 和 ReplicaSet 的具体用途:
具体选择哪种对象,需要根据应用程序的实际需求来决定。
如果没有存储的情况下,StatefulSet 更新 Pods 仍然很慢的原因是,StatefulSet 仍然需要将旧 Pod 从集群中删除。这会导致应用程序的不可用时间。
以下是一些可以提高 StatefulSet 更新速度的建议: