【问题标题】:Controlling pods kubelet vs. controller in control plane在控制平面中控制 pod kubelet 与控制器
【发布时间】:2023-03-30 21:50:01
【问题描述】:

我有点困惑,我一直在使用 Kubernetes,并且一直在阅读所有不同的对象 ReplicaSetDeploymentServicePods 等。

在文档中提到kubelet 管理在我们的ReplicaSet 清单中定义的活动性和就绪性检查。

参考:https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/

如果是这种情况,kubelet 是否也管理副本?或者这是否与控制器保持一致?

还是我完全错了,是 kubelet 在 Pod 上创建和管理所有这些资源?

提前致谢。

【问题讨论】:

    标签: kubernetes


    【解决方案1】:

    基本上kubelet 被称为“节点代理”,在每个节点上运行。它通过 kube apiserver 得到通知,然后通过容器运行时启动容器,它按照 Pod Spec 工作。它确保 Pod 规范中描述的容器运行良好。

    kubelet 任务的流程是这样的:kube apiserver kubelet CRI

    为了确保 pod 是否运行良好,它使用liveness 探测,如果出现错误,它会重新启动 pod。

    kubelet 不维护副本,副本由副本集维护。正如 k8s doc 所说:ReplicaSet 的目的是维护在任何给定时间运行的一组稳定的副本 Pod。因此,它通常用于保证指定数量的相同 Pod 的可用性。

    查看更多ReplicaSet

    更多信息您可以查看:kubelet

    【讨论】:

    • 所以我对控制ReplicaSet 的东西有点困惑。如果不是 kubeletkubelet 只管理 pod。这是否意味着当我 POST 到 API 时,它只会在某处创建一个对象并且该对象自行管理?
    • 部署控制ResplicaSet。流程就像:deployment ---> Replicaset ---> Pods
    • 控制Deployment对象的是什么?我想我可能错过了一些基本知识哈哈
    • 部署对象由部署控制器控制。实际上在 k8s 中,关键是控制器,几乎所有对象都有专用的控制器。在引擎盖下,这些控制器控制着 k8s 对象。见this
    • 啊,明白了!现在更有意义了。谢谢
    【解决方案2】:

    在开始您的 Kubernetes 之旅时,了解 Control PlanesWorker Nodes 的主要组件非常重要。

    根据您的问题,我们将重点关注其中两个:

    1. kube-controller-manager:

    从逻辑上讲,每个控制器都是一个独立的进程,但是为了减少 复杂性,它们都被编译成一个二进制文件并在一个 单个进程。

    这些控制器的一些类型是:

    • 节点控制器:负责节点宕机时的通知和响应。

    • Job 控制器:监视代表一次性任务的 Job 对象,然后创建 Pod 来运行这些任务以完成。

    • Endpoints 控制器:填充 Endpoints 对象(即加入 Services 和 Pod)。

    • 服务帐户和令牌控制器:为新命名空间创建默认帐户和 API 访问令牌。

    1. kubelet:

    在集群中每个节点上运行的代理。它确保 容器在 Pod 中运行。

    kubelet 采用一组 PodSpec,这些 PodSpec 通过各种 机制并确保这些 PodSpec 中描述的容器 正在运行和健康。 kubelet 不管理容器 不是由 Kubernetes 创建的。

    所以回答你的问题:

    如果是这种情况,kubelet 是否也管理副本?或者确实 留在控制器?

    不,复制可以由Replication ControllerReplicaSet 或更推荐的Deployment 管理。 Kubelet 在节点上运行,并确保 Pod 也按照它们的 PodSpecs 运行。

    您可以在链接的文档中找到kubeletkube-controller-manager 的概要。

    编辑:

    但有一个例外,形式为Static Pods

    静态 Pod 由 kubelet 守护进程直接管理 节点,没有 API 服务器观察它们。与 Pod 不同的是 由控制平面管理(例如,一个部署);相反, kubelet 监视每个静态 Pod(如果失败则重新启动它)。

    请注意,它不适用于多个副本。

    【讨论】:

      猜你喜欢
      • 2012-11-01
      • 1970-01-01
      • 2016-12-11
      • 2023-02-10
      • 2011-07-04
      • 1970-01-01
      • 2015-12-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多