【问题标题】:How does k8s know which pod to update?k8s 如何知道要更新哪个 pod?
【发布时间】:2018-05-05 08:25:33
【问题描述】:

我目前正在开始使用 Kubernetes,到目前为止,我有一个问题在任何地方都找不到答案。

在知道之前,我已经了解了容器、Pod 和副本集是什么。我基本上理解了这些事情,但我没有得到的一件事是:如果我更新 pod(或副本集)的清单,并将其重新发布到 k8s - k8s 如何知道这是指哪个现有清单?

这种匹配是通过清单的名称完成的,即通过 pod 的名称还是副本集的名称?还是……?

换句话说:如果我更新了一个manifest,k8s怎么知道它是一个更新的,又如何检测哪一个是之前版本的?

【问题讨论】:

    标签: kubernetes


    【解决方案1】:

    你是对的,k8s 使用metadata.name 来识别资源。该名称对于每个资源类型(Pod/ReplicaSet/...)和命名空间都是唯一的。

    【讨论】:

    • 考虑以下情况:您创建了一个部署,正在启动像 myname-1231231-abcdmyname-1231231-efgh 这样的 pod,现在...您手动创建名为 myname-1231231-zzzzz 的 pod,它将由 Deployment 管理,将它会随着更新而推出吗?不,这是因为metadata.name 没有用于此目的。
    • 你是对的,但问题不在于资源之间的关系,ownerReferences进入游戏...
    【解决方案2】:

    好吧,首先让我们把事情弄清楚。当您更新清单时,很明显首先要更新什么 - 您更新的对象 - 即。部署或副本集。现在,当它更新时,RollingUpdate 就会启动,这就是我假设你想知道的,以及一般来说如何建立 pod 的所有权。如果你创建一个kubectl get pod -o yaml,你可以找到像ownerReferencespod-template-hashkubernetes.io/created-by这样的键,当你看到内容时应该很明显。在另一个方向(不是来自 Pod,而是来自 Deployment),你有一个选择器字段,它定义了用于过滤 pod 以找到正确的标签。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-05
      • 2021-04-11
      • 2018-03-02
      • 1970-01-01
      相关资源
      最近更新 更多