如何通过部署更新共享服务?

How a shared service can be updated by a deployment?

在 Kubernetes 文档中,Using Labels 部分说:

A Service can be made to span multiple Deployments by omitting release-specific labels from its selector. When you need to update a running service without downtime, use a Deployment.

我不明白部署是如何实现的?当我们想要更新服务时,它不应该单独发生(单独发生),与任何 Deployments 分开吗?喜欢:

kubectl apply -f service.yaml

服务指向由其标签选择器确定的一组端点 (pods)。

让我们以具有标签选择器的服务为例

app: api
version: v1

它将指向所有 pods 有这两个标签(可能有更多)。

如果您部署带有标签 version: v2 的新版本,现有服务将不会指向这些 pods,因为标签选择器不再匹配 pods 标签。

另一方面,如果您从服务的标签选择器中省略 version: v1 并仅保留 app: api,该服务将指向任何具有 app: api 标签的 pod ,意味着当你部署一个新版本时,即使版本标签有了新的值,服务仍然会指向这些 pods.

这样您可以更新服务 pods 而无需更新服务本身 - 您只能通过部署新的 api 版本来做到这一点。