From 9409393338529f34fc3e8182c88419c0cb2ddb7c Mon Sep 17 00:00:00 2001 From: windsonsea Date: Thu, 7 Sep 2023 12:48:43 +0800 Subject: [PATCH] [zh] Relocate manage and update labels sections --- .../manage-deployment.md | 147 +----------------- .../overview/working-with-objects/labels.md | 140 ++++++++++++++++- 2 files changed, 141 insertions(+), 146 deletions(-) diff --git a/content/zh-cn/docs/concepts/cluster-administration/manage-deployment.md b/content/zh-cn/docs/concepts/cluster-administration/manage-deployment.md index ca14b17a1bc39..d443a36f001c2 100644 --- a/content/zh-cn/docs/concepts/cluster-administration/manage-deployment.md +++ b/content/zh-cn/docs/concepts/cluster-administration/manage-deployment.md @@ -16,15 +16,9 @@ weight: 40 你已经部署了应用并通过服务暴露它。然后呢? Kubernetes 提供了一些工具来帮助管理你的应用部署,包括扩缩容和更新。 -我们将更深入讨论的特性包括 -[配置文件](/zh-cn/docs/concepts/configuration/overview/)和 -[标签](/zh-cn/docs/concepts/overview/working-with-objects/labels/)。 @@ -262,99 +256,19 @@ If you're interested in learning more about `kubectl`, go ahead and read 如果你有兴趣进一步学习关于 `kubectl` 的内容,请阅读[命令行工具(kubectl)](/zh-cn/docs/reference/kubectl/)。 -## 有效地使用标签 {#using-labels-effectively} - -到目前为止我们使用的示例中的资源最多使用了一个标签。 -在许多情况下,应使用多个标签来区分集合。 - - -例如,不同的应用可能会为 `app` 标签设置不同的值。 -但是,类似 [guestbook 示例](https://github.com/kubernetes/examples/tree/master/guestbook/) -这样的多层应用,还需要区分每一层。前端可以带以下标签: - -```yaml - labels: - app: guestbook - tier: frontend -``` - - -Redis 的主节点和从节点会有不同的 `tier` 标签,甚至还有一个额外的 `role` 标签: - -```yaml - labels: - app: guestbook - tier: backend - role: master -``` - - -以及 - -```yaml - labels: - app: guestbook - tier: backend - role: slave -``` - - -标签允许我们按照标签指定的任何维度对我们的资源进行切片和切块: - -```shell -kubectl apply -f examples/guestbook/all-in-one/guestbook-all-in-one.yaml -kubectl get pods -Lapp -Ltier -Lrole -``` - -```none -NAME READY STATUS RESTARTS AGE APP TIER ROLE -guestbook-fe-4nlpb 1/1 Running 0 1m guestbook frontend -guestbook-fe-ght6d 1/1 Running 0 1m guestbook frontend -guestbook-fe-jpy62 1/1 Running 0 1m guestbook frontend -guestbook-redis-master-5pg3b 1/1 Running 0 1m guestbook backend master -guestbook-redis-slave-2q2yf 1/1 Running 0 1m guestbook backend slave -guestbook-redis-slave-qgazl 1/1 Running 0 1m guestbook backend slave -my-nginx-divi2 1/1 Running 0 29m nginx -my-nginx-o0ef1 1/1 Running 0 29m nginx -``` - -```shell -kubectl get pods -lapp=guestbook,role=slave -``` +## 金丝雀部署(Canary Deployments) {#canary-deployments} -```none -NAME READY STATUS RESTARTS AGE -guestbook-redis-slave-2q2yf 1/1 Running 0 3m -guestbook-redis-slave-qgazl 1/1 Running 0 3m -``` + -## 金丝雀部署(Canary Deployments) {#canary-deployments} - 另一个需要多标签的场景是用来区分同一组件的不同版本或者不同配置的多个部署。 常见的做法是部署一个使用*金丝雀发布*来部署新应用版本 (在 Pod 模板中通过镜像标签指定),保持新旧版本应用同时运行。 @@ -432,61 +346,6 @@ For a more concrete example, check the 想要了解更具体的示例,请查看 [Ghost 部署教程](https://github.com/kelseyhightower/talks/tree/master/kubecon-eu-2016/demo#deploy-a-canary)。 - -## 更新标签 {#updating-labels} - -有时,现有的 pod 和其它资源需要在创建新资源之前重新标记。 -这可以用 `kubectl label` 完成。 -例如,如果想要将所有 nginx pod 标记为前端层,运行: - -```shell -kubectl label pods -l app=nginx tier=fe -``` - -```none -pod/my-nginx-2035384211-j5fhi labeled -pod/my-nginx-2035384211-u2c7e labeled -pod/my-nginx-2035384211-u3t6x labeled -``` - - -首先用标签 "app=nginx" 过滤所有的 Pod,然后用 "tier=fe" 标记它们。 -想要查看你刚才标记的 Pod,请运行: - -```shell -kubectl get pods -l app=nginx -L tier -``` - -```none -NAME READY STATUS RESTARTS AGE TIER -my-nginx-2035384211-j5fhi 1/1 Running 0 23m fe -my-nginx-2035384211-u2c7e 1/1 Running 0 23m fe -my-nginx-2035384211-u3t6x 1/1 Running 0 23m fe -``` - - -这将输出所有 "app=nginx" 的 Pod,并有一个额外的描述 Pod 的 tier 的标签列 -(用参数 `-L` 或者 `--label-columns` 标明)。 - -想要了解更多信息,请参考[标签](/zh-cn/docs/concepts/overview/working-with-objects/labels/)和 -[`kubectl label`](/docs/reference/generated/kubectl/kubectl-commands/#label) -命令文档。 - +## 有效地使用标签 {#using-labels-effectively} + +到目前为止我们使用的示例中的资源最多使用了一个标签。 +在许多情况下,应使用多个标签来区分不同集合。 + + +例如,不同的应用可能会为 `app` 标签设置不同的值。 +但是,类似 [guestbook 示例](https://github.com/kubernetes/examples/tree/master/guestbook/) +这样的多层应用,还需要区分每一层。前端可能会带有以下标签: + +```yaml +labels: + app: guestbook + tier: frontend +``` + + +Redis 的主从节点会有不同的 `tier` 标签,甚至还有一个额外的 `role` 标签: + +```yaml +labels: + app: guestbook + tier: backend + role: master +``` + + +以及 + +```yaml +labels: + app: guestbook + tier: backend + role: replica +``` + + +标签使得我们能够按照所指定的任何维度对我们的资源进行切片和切块: + +```shell +kubectl apply -f examples/guestbook/all-in-one/guestbook-all-in-one.yaml +kubectl get pods -Lapp -Ltier -Lrole +``` + +```none +NAME READY STATUS RESTARTS AGE APP TIER ROLE +guestbook-fe-4nlpb 1/1 Running 0 1m guestbook frontend +guestbook-fe-ght6d 1/1 Running 0 1m guestbook frontend +guestbook-fe-jpy62 1/1 Running 0 1m guestbook frontend +guestbook-redis-master-5pg3b 1/1 Running 0 1m guestbook backend master +guestbook-redis-replica-2q2yf 1/1 Running 0 1m guestbook backend replica +guestbook-redis-replica-qgazl 1/1 Running 0 1m guestbook backend replica +my-nginx-divi2 1/1 Running 0 29m nginx +my-nginx-o0ef1 1/1 Running 0 29m nginx +``` + +```shell +kubectl get pods -lapp=guestbook,role=replica +``` + +```none +NAME READY STATUS RESTARTS AGE +guestbook-redis-replica-2q2yf 1/1 Running 0 3m +guestbook-redis-replica-qgazl 1/1 Running 0 3m +``` + + +## 更新标签 {#updating-labels} + +有时需要要在创建新资源之前对现有的 Pod 和其它资源重新打标签。 +这可以用 `kubectl label` 完成。 +例如,如果想要将所有 NGINX Pod 标记为前端层,运行: + +```shell +kubectl label pods -l app=nginx tier=fe +``` + +```none +pod/my-nginx-2035384211-j5fhi labeled +pod/my-nginx-2035384211-u2c7e labeled +pod/my-nginx-2035384211-u3t6x labeled +``` + + +首先用标签 "app=nginx" 过滤所有的 Pod,然后用 "tier=fe" 标记它们。 +想要查看你刚设置了标签的 Pod,请运行: + +```shell +kubectl get pods -l app=nginx -L tier +``` + +```none +NAME READY STATUS RESTARTS AGE TIER +my-nginx-2035384211-j5fhi 1/1 Running 0 23m fe +my-nginx-2035384211-u2c7e 1/1 Running 0 23m fe +my-nginx-2035384211-u3t6x 1/1 Running 0 23m fe +``` + + +此命令将输出所有 "app=nginx" 的 Pod,并有一个额外的描述 Pod 所在分层的标签列 +(用参数 `-L` 或者 `--label-columns` 标明)。 + +想要了解更多信息,请参考[标签](/zh-cn/docs/concepts/overview/working-with-objects/labels/)和 +[`kubectl label`](/docs/reference/generated/kubectl/kubectl-commands/#label) +命令文档。 + ## {{% heading "whatsnext" %}} - 学习如何[给节点添加标签](/zh-cn/docs/tasks/configure-pod-container/assign-pods-nodes/#add-a-label-to-a-node) - 查阅[众所周知的标签、注解和污点](/zh-cn/docs/reference/labels-annotations-taints/) - 参见[推荐使用的标签](/zh-cn/docs/concepts/overview/working-with-objects/common-labels/) - [使用名字空间标签来实施 Pod 安全性标准](/zh-cn/docs/tasks/configure-pod-container/enforce-standards-namespace-labels/) -- [有效使用标签](/zh-cn/docs/concepts/cluster-administration/manage-deployment/#using-labels-effectively)管理 Deployment。 - 阅读[为 Pod 标签编写控制器](/blog/2021/06/21/writing-a-controller-for-pod-labels/)的博文