Skip to content

Commit 8293a8e

Browse files
authored
Merge pull request #27773 from CriaHu/hyq-0427
Optimize document translation of content/zh/docs/tutorials/stateful-a…
2 parents b39c2dd + 493dae7 commit 8293a8e

File tree

1 file changed

+72
-26
lines changed

1 file changed

+72
-26
lines changed

content/zh/docs/tutorials/stateful-application/basic-stateful-set.md

Lines changed: 72 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,8 @@ This tutorial provides an introduction to managing applications with
1919
demonstrates how to create, delete, scale, and update the Pods of StatefulSets.
2020
-->
2121

22-
本教程介绍如何了使用 [StatefulSets](/zh/docs/concepts/abstractions/controllers/statefulsets/) 来管理应用。演示了如何创建、删除、扩容/缩容和更新 StatefulSets 的 Pods。
22+
本教程介绍如何了使用 [StatefulSets](/zh/docs/concepts/workloads/controllers/statefulset/) 来管理应用。
23+
演示了如何创建、删除、扩容/缩容和更新 StatefulSets 的 Pods。
2324

2425

2526

@@ -71,7 +72,8 @@ After this tutorial, you will be familiar with the following.
7172
* How to update a StatefulSet's Pods
7273
-->
7374

74-
StatefulSets 旨在与有状态的应用及分布式系统一起使用。然而在 Kubernetes 上管理有状态应用和分布式系统是一个宽泛而复杂的话题。为了演示 StatefulSet 的基本特性,并且不使前后的主题混淆,你将会使用 StatefulSet 部署一个简单的 web 应用。
75+
StatefulSets 旨在与有状态的应用及分布式系统一起使用。然而在 Kubernetes 上管理有状态应用和分布式系统是一个宽泛而复杂的话题。
76+
为了演示 StatefulSet 的基本特性,并且不使前后的主题混淆,你将会使用 StatefulSet 部署一个简单的 web 应用。
7577

7678
在阅读本教程后,你将熟悉以下内容:
7779

@@ -86,10 +88,21 @@ StatefulSets 旨在与有状态的应用及分布式系统一起使用。然而
8688

8789
<!-- lessoncontent -->
8890

91+
<!--
92+
## Creating a StatefulSet
93+
94+
Begin by creating a StatefulSet using the example below. It is similar to the
95+
example presented in the
96+
[StatefulSets](/docs/concepts/workloads/controllers/statefulset/) concept.
97+
It creates a [headless Service](/docs/concepts/services-networking/service/#headless-services),
98+
`nginx`, to publish the IP addresses of Pods in the StatefulSet, `web`.
99+
-->
100+
89101
## 创建 StatefulSet
90102

91103

92-
作为开始,使用如下示例创建一个 StatefulSet。它和 [StatefulSets](/zh/docs/concepts/abstractions/controllers/statefulsets/) 概念中的示例相似。它创建了一个 [Headless Service](/zh/docs/user-guide/services/#headless-services) `nginx` 用来发布 StatefulSet `web` 中的 Pod 的 IP 地址。
104+
作为开始,使用如下示例创建一个 StatefulSet。它和 [StatefulSets](/zh/docs/concepts/workloads/controllers/statefulset/) 概念中的示例相似。
105+
它创建了一个 [Headless Service](/zh/docs/concepts/services-networking/service/#headless-services) `nginx` 用来发布 StatefulSet `web` 中的 Pod 的 IP 地址。
93106

94107
{{< codenew file="application/web/web.yaml" >}}
95108

@@ -104,7 +117,7 @@ of the StatefulSet's Pods.
104117
下载上面的例子并保存为文件 `web.yaml`
105118

106119

107-
你需要使用两个终端窗口。在第一个终端中,使用 [`kubectl get`](/zh/docs/user-guide/kubectl/{{< param "version" >}}/#get) 来查看 StatefulSet 的 Pods 的创建情况。
120+
你需要使用两个终端窗口。 在第一个终端中,使用 [`kubectl get`](/zh/docs/user-guide/kubectl/{{< param "version" >}}/#get) 来查看 StatefulSet 的 Pods 的创建情况。
108121

109122
```shell
110123
kubectl get pods -w -l app=nginx
@@ -132,7 +145,8 @@ The command above creates two Pods, each running an
132145
`web` StatefulSet to verify that they were created successfully.
133146
-->
134147

135-
上面的命令创建了两个 Pod,每个都运行了一个 [NGINX](https://www.nginx.com) web 服务器。获取 `nginx` Service 和 `web` StatefulSet 来验证是否成功的创建了它们。
148+
上面的命令创建了两个 Pod,每个都运行了一个 [NGINX](https://www.nginx.com) web 服务器。
149+
获取 `nginx` Service 和 `web` StatefulSet 来验证是否成功的创建了它们。
136150

137151
```shell
138152
kubectl get service nginx
@@ -166,7 +180,8 @@ look like the example below.
166180
### 顺序创建 Pod
167181

168182

169-
对于一个拥有 N 个副本的 StatefulSet,Pod 被部署时是按照 {0 …… N-1} 的序号顺序创建的。在第一个终端中使用 `kubectl get` 检查输出。这个输出最终将看起来像下面的样子。
183+
对于一个拥有 N 个副本的 StatefulSet,Pod 被部署时是按照 {0 …… N-1} 的序号顺序创建的。
184+
在第一个终端中使用 `kubectl get` 检查输出。这个输出最终将看起来像下面的样子。
170185

171186
```shell
172187
kubectl get pods -w -l app=nginx
@@ -235,7 +250,11 @@ Each Pod has a stable hostname based on its ordinal index. Use
235250
`hostname` command in each Pod.
236251
-->
237252

238-
如同 [StatefulSets](/zh/docs/concepts/abstractions/controllers/statefulsets/) 概念中所提到的,StatefulSet 中的 Pod 拥有一个具有黏性的、独一无二的身份标志。这个标志基于 StatefulSet 控制器分配给每个 Pod 的唯一顺序索引。Pod 的名称的形式为`<statefulset name>-<ordinal index>``web`StatefulSet 拥有两个副本,所以它创建了两个 Pod:`web-0``web-1`
253+
如同 [StatefulSets](/zh/docs/concepts/workloads/controllers/statefulset/) 概念中所提到的,
254+
StatefulSet 中的 Pod 拥有一个具有黏性的、独一无二的身份标志。
255+
这个标志基于 StatefulSet 控制器分配给每个 Pod 的唯一顺序索引。
256+
Pod 的名称的形式为`<statefulset name>-<ordinal index>`
257+
`web`StatefulSet 拥有两个副本,所以它创建了两个 Pod:`web-0``web-1`
239258

240259
### 使用稳定的网络身份标识
241260

@@ -256,7 +275,9 @@ Using `nslookup` on the Pods' hostnames, you can examine their in-cluster DNS
256275
addresses.
257276
-->
258277

259-
使用 [`kubectl run`](/zh/docs/reference/generated/kubectl/kubectl-commands/#run) 运行一个提供 `nslookup` 命令的容器,该命令来自于 `dnsutils` 包。通过对 Pod 的主机名执行 `nslookup`,你可以检查他们在集群内部的 DNS 地址。
278+
使用 [`kubectl run`](/zh/docs/reference/generated/kubectl/kubectl-commands/#run)
279+
运行一个提供 `nslookup` 命令的容器,该命令来自于 `dnsutils` 包。
280+
通过对 Pod 的主机名执行 `nslookup`,你可以检查他们在集群内部的 DNS 地址。
260281

261282
```shell
262283
kubectl run -i --tty --image busybox:1.28 dns-test --restart=Never --rm
@@ -296,7 +317,8 @@ contain the Pods' IP addresses.
296317
In one terminal, watch the StatefulSet's Pods.
297318
-->
298319

299-
headless service 的 CNAME 指向 SRV 记录(记录每个 Running 和 Ready 状态的 Pod)。SRV 记录指向一个包含 Pod IP 地址的记录表项。
320+
headless service 的 CNAME 指向 SRV 记录(记录每个 Running 和 Ready 状态的 Pod)。
321+
SRV 记录指向一个包含 Pod IP 地址的记录表项。
300322

301323
在一个终端中查看 StatefulSet 的 Pod。
302324

@@ -409,10 +431,12 @@ application will be able to discover the Pods' addresses when they transition
409431
to Running and Ready.
410432
-->
411433

412-
Pod 的序号、主机名、SRV 条目和记录名称没有改变,但和 Pod 相关联的 IP 地址可能发生了改变。在本教程中使用的集群中它们就改变了。这就是为什么不要在其他应用中使用 StatefulSet 中的 Pod 的 IP 地址进行连接,这点很重要。
434+
Pod 的序号、主机名、SRV 条目和记录名称没有改变,但和 Pod 相关联的 IP 地址可能发生了改变。
435+
在本教程中使用的集群中它们就改变了。这就是为什么不要在其他应用中使用 StatefulSet 中的 Pod 的 IP 地址进行连接,这点很重要。
413436

414437

415-
如果你需要查找并连接一个 StatefulSet 的活动成员,你应该查询 Headless Service 的 CNAME。和 CNAME 相关联的 SRV 记录只会包含 StatefulSet 中处于 Running 和 Ready 状态的 Pod。
438+
如果你需要查找并连接一个 StatefulSet 的活动成员,你应该查询 Headless Service 的 CNAME。
439+
和 CNAME 相关联的 SRV 记录只会包含 StatefulSet 中处于 Running 和 Ready 状态的 Pod。
416440

417441

418442
如果你的应用已经实现了用于测试 liveness 和 readiness 的连接逻辑,你可以使用 Pod 的 SRV 记录(`web-0.nginx.default.svc.cluster.local`
@@ -459,7 +483,8 @@ webservers serve the hostnames.
459483
StatefulSet 控制器创建了两个 PersistentVolumeClaims,绑定到两个 [PersistentVolumes](/zh/docs/concepts/storage/volumes/)。由于本教程使用的集群配置为动态提供 PersistentVolume,所有的 PersistentVolume 都是自动创建和绑定的。
460484

461485

462-
NGINX web 服务器默认会加载位于 `/usr/share/nginx/html/index.html` 的 index 文件。StatefulSets `spec` 中的 `volumeMounts` 字段保证了 `/usr/share/nginx/html` 文件夹由一个 PersistentVolume 支持。
486+
NGINX web 服务器默认会加载位于 `/usr/share/nginx/html/index.html` 的 index 文件。
487+
StatefulSets `spec` 中的 `volumeMounts` 字段保证了 `/usr/share/nginx/html` 文件夹由一个 PersistentVolume 支持。
463488

464489

465490
将 Pod 的主机名写入它们的`index.html`文件并验证 NGINX web 服务器使用该主机名提供服务。
@@ -572,12 +597,15 @@ This is accomplished by updating the `replicas` field. You can use either
572597
In one terminal window, watch the Pods in the StatefulSet.
573598
-->
574599

575-
虽然 `web-0``web-1` 被重新调度了,但它们仍然继续监听各自的主机名,因为和它们的 PersistentVolumeClaim 相关联的 PersistentVolume 被重新挂载到了各自的 `volumeMount` 上。不管 `web-0``web-1` 被调度到了哪个节点上,它们的 PersistentVolumes 将会被挂载到合适的挂载点上。
600+
虽然 `web-0``web-1` 被重新调度了,但它们仍然继续监听各自的主机名,因为和它们的 PersistentVolumeClaim 相关联的 PersistentVolume 被重新挂载到了各自的 `volumeMount` 上。
601+
不管 `web-0``web-1` 被调度到了哪个节点上,它们的 PersistentVolumes 将会被挂载到合适的挂载点上。
576602

577603

578604
## 扩容/缩容 StatefulSet
579605

580-
扩容/缩容 StatefulSet 指增加或减少它的副本数。这通过更新 `replicas` 字段完成。你可以使用[`kubectl scale`](/zh/docs/user-guide/kubectl/{{< param "version" >}}/#scale) 或者[`kubectl patch`](/zh/docs/user-guide/kubectl/{{< param "version" >}}/#patch)来扩容/缩容一个 StatefulSet。
606+
扩容/缩容 StatefulSet 指增加或减少它的副本数。这通过更新 `replicas` 字段完成。
607+
你可以使用[`kubectl scale`](/zh/docs/user-guide/kubectl/{{< param "version" >}}/#scale)
608+
或者[`kubectl patch`](/zh/docs/user-guide/kubectl/{{< param "version" >}}/#patch)来扩容/缩容一个 StatefulSet。
581609

582610

583611
### 扩容
@@ -642,7 +670,8 @@ subsequent Pod.
642670
In one terminal, watch the StatefulSet's Pods.
643671
-->
644672

645-
StatefulSet 控制器扩展了副本的数量。如同[创建 StatefulSet](#顺序创建pod) 所述,StatefulSet 按序号索引顺序的创建每个 Pod,并且会等待前一个 Pod 变为 Running 和 Ready 才会启动下一个 Pod。
673+
StatefulSet 控制器扩展了副本的数量。
674+
如同[创建 StatefulSet](#顺序创建pod) 所述,StatefulSet 按序号索引顺序的创建每个 Pod,并且会等待前一个 Pod 变为 Running 和 Ready 才会启动下一个 Pod。
646675

647676
### 缩容
648677

@@ -738,13 +767,17 @@ StatefulSet. There are two valid update strategies, `RollingUpdate` and
738767
`RollingUpdate` update strategy is the default for StatefulSets.
739768
-->
740769

741-
五个 PersistentVolumeClaims 和五个 PersistentVolumes 仍然存在。查看 Pod 的 [稳定存储](#stable-storage),我们发现当删除 StatefulSet 的 Pod 时,挂载到 StatefulSet 的 Pod 的 PersistentVolumes 不会被删除。当这种删除行为是由 StatefulSet 缩容引起时也是一样的。
770+
五个 PersistentVolumeClaims 和五个 PersistentVolumes 仍然存在。
771+
查看 Pod 的 [稳定存储](#stable-storage),我们发现当删除 StatefulSet 的 Pod 时,挂载到 StatefulSet 的 Pod 的 PersistentVolumes 不会被删除。
772+
当这种删除行为是由 StatefulSet 缩容引起时也是一样的。
742773

743774

744775
## 更新 StatefulSet
745776

746777

747-
Kubernetes 1.7 版本的 StatefulSet 控制器支持自动更新。更新策略由 StatefulSet API Object 的`spec.updateStrategy` 字段决定。这个特性能够用来更新一个 StatefulSet 中的 Pod 的 container images,resource requests,以及 limits,labels 和 annotations。`RollingUpdate`滚动更新是 StatefulSets 默认策略。
778+
Kubernetes 1.7 版本的 StatefulSet 控制器支持自动更新。
779+
更新策略由 StatefulSet API Object 的`spec.updateStrategy` 字段决定。这个特性能够用来更新一个 StatefulSet 中的 Pod 的 container images,resource requests,以及 limits,labels 和 annotations。
780+
`RollingUpdate`滚动更新是 StatefulSets 默认策略。
748781

749782

750783
<!--
@@ -845,7 +878,10 @@ in the presence of intermittent failures.
845878
Get the Pods to view their container images.
846879
-->
847880

848-
StatefulSet 里的 Pod 采用和序号相反的顺序更新。在更新下一个 Pod 前,StatefulSet 控制器终止每个 Pod 并等待它们变成 Running 和 Ready。请注意,虽然在顺序后继者变成 Running 和 Ready 之前 StatefulSet 控制器不会更新下一个 Pod,但它仍然会重建任何在更新过程中发生故障的 Pod,使用的是它们当前的版本。已经接收到更新请求的 Pod 将会被恢复为更新的版本,没有收到请求的 Pod 则会被恢复为之前的版本。像这样,控制器尝试继续使应用保持健康并在出现间歇性故障时保持更新的一致性。
881+
StatefulSet 里的 Pod 采用和序号相反的顺序更新。在更新下一个 Pod 前,StatefulSet 控制器终止每个 Pod 并等待它们变成 Running 和 Ready。
882+
请注意,虽然在顺序后继者变成 Running 和 Ready 之前 StatefulSet 控制器不会更新下一个 Pod,但它仍然会重建任何在更新过程中发生故障的 Pod,使用的是它们当前的版本。
883+
已经接收到更新请求的 Pod 将会被恢复为更新的版本,没有收到请求的 Pod 则会被恢复为之前的版本。
884+
像这样,控制器尝试继续使应用保持健康并在出现间歇性故障时保持更新的一致性。
849885

850886
获取 Pod 来查看他们的容器镜像。
851887

@@ -882,7 +918,8 @@ StatefulSet 中的所有 Pod 现在都在运行之前的容器镜像。
882918

883919
#### 分段更新
884920

885-
你可以使用 `RollingUpdate` 更新策略的 `partition` 参数来分段更新一个 StatefulSet。分段的更新将会使 StatefulSet 中的其余所有 Pod 保持当前版本的同时仅允许改变 StatefulSet 的 `.spec.template`
921+
你可以使用 `RollingUpdate` 更新策略的 `partition` 参数来分段更新一个 StatefulSet。
922+
分段的更新将会使 StatefulSet 中的其余所有 Pod 保持当前版本的同时仅允许改变 StatefulSet 的 `.spec.template`
886923

887924

888925
Patch `web` StatefulSet 来对 `updateStrategy` 字段添加一个分区。
@@ -963,7 +1000,8 @@ you specified [above](#staging-an-update).
9631000
Patch the StatefulSet to decrement the partition.
9641001
-->
9651002

966-
请注意,虽然更新策略是 `RollingUpdate`,StatefulSet 控制器还是会使用原始的容器恢复 Pod。这是因为 Pod 的序号比 `updateStrategy` 指定的 `partition` 更小。
1003+
请注意,虽然更新策略是 `RollingUpdate`,StatefulSet 控制器还是会使用原始的容器恢复 Pod。
1004+
这是因为 Pod 的序号比 `updateStrategy` 指定的 `partition` 更小。
9671005

9681006

9691007
#### 灰度发布
@@ -1089,12 +1127,14 @@ update.
10891127
The partition is currently set to `2`. Set the partition to `0`.
10901128
-->
10911129

1092-
`web-1` 被按照原来的配置恢复,因为 Pod 的序号小于分区。当指定了分区时,如果更新了 StatefulSet 的 `.spec.template`,则所有序号大于或等于分区的 Pod 都将被更新。如果一个序号小于分区的 Pod 被删除或者终止,它将被按照原来的配置恢复。
1130+
`web-1` 被按照原来的配置恢复,因为 Pod 的序号小于分区。当指定了分区时,如果更新了 StatefulSet 的 `.spec.template`,则所有序号大于或等于分区的 Pod 都将被更新。
1131+
如果一个序号小于分区的 Pod 被删除或者终止,它将被按照原来的配置恢复。
10931132

10941133

10951134
#### 分阶段的发布
10961135

1097-
你可以使用类似[灰度发布](#灰度发布)的方法执行一次分阶段的发布(例如一次线性的、等比的或者指数形式的发布)。要执行一次分阶段的发布,你需要设置 `partition` 为希望控制器暂停更新的序号。
1136+
你可以使用类似[灰度发布](#灰度发布)的方法执行一次分阶段的发布(例如一次线性的、等比的或者指数形式的发布)。
1137+
要执行一次分阶段的发布,你需要设置 `partition` 为希望控制器暂停更新的序号。
10981138

10991139

11001140
分区当前为`2`。请将分区设置为`0`
@@ -1179,7 +1219,8 @@ In one terminal window, watch the Pods in the StatefulSet.
11791219

11801220
### On Delete 策略
11811221

1182-
`OnDelete` 更新策略实现了传统(1.7 之前)行为,它也是默认的更新策略。当你选择这个更新策略并修改 StatefulSet 的 `.spec.template` 字段时,StatefulSet 控制器将不会自动的更新 Pod。
1222+
`OnDelete` 更新策略实现了传统(1.7 之前)行为,它也是默认的更新策略。
1223+
当你选择这个更新策略并修改 StatefulSet 的 `.spec.template` 字段时,StatefulSet 控制器将不会自动的更新 Pod。
11831224

11841225
## 删除 StatefulSet
11851226

@@ -1203,7 +1244,8 @@ command. This parameter tells Kubernetes to only delete the StatefulSet, and to
12031244
not delete any of its Pods.
12041245
-->
12051246

1206-
使用 [`kubectl delete`](/zh/docs/reference/generated/kubectl/kubectl-commands/#delete) 删除 StatefulSet。请确保提供了 `--cascade=false` 参数给命令。这个参数告诉 Kubernetes 只删除 StatefulSet 而不要删除它的任何 Pod。
1247+
使用 [`kubectl delete`](/zh/docs/reference/generated/kubectl/kubectl-commands/#delete) 删除 StatefulSet。
1248+
请确保提供了 `--cascade=false` 参数给命令。这个参数告诉 Kubernetes 只删除 StatefulSet 而不要删除它的任何 Pod。
12071249

12081250
```shell
12091251
kubectl delete statefulset web --cascade=false
@@ -1358,7 +1400,9 @@ PersistentVolume was remounted.
13581400
In one terminal window, watch the Pods in the StatefulSet.
13591401
-->
13601402

1361-
尽管你同时删除了 StatefulSet 和 `web-0` Pod,但它仍然使用最初写入 `index.html` 文件的主机名进行服务。这是因为 StatefulSet 永远不会删除和一个 Pod 相关联的 PersistentVolumes。当你重建这个 StatefulSet 并且重新启动了 `web-0` 时,它原本的 PersistentVolume 会被重新挂载。
1403+
尽管你同时删除了 StatefulSet 和 `web-0` Pod,但它仍然使用最初写入 `index.html` 文件的主机名进行服务。
1404+
这是因为 StatefulSet 永远不会删除和一个 Pod 相关联的 PersistentVolumes。
1405+
当你重建这个 StatefulSet 并且重新启动了 `web-0` 时,它原本的 PersistentVolume 会被重新挂载。
13621406

13631407

13641408
### 级联删除
@@ -1422,7 +1466,8 @@ it will not delete the Headless Service associated with the StatefulSet. You
14221466
must delete the `nginx` Service manually.
14231467
-->
14241468

1425-
如同你在[缩容](#ordered-pod-termination)一节看到的,Pod 按照和他们序号索引相反的顺序每次终止一个。在终止一个 Pod 前,StatefulSet 控制器会等待 Pod 后继者被完全终止。
1469+
如同你在[缩容](#ordered-pod-termination)一节看到的,Pod 按照和他们序号索引相反的顺序每次终止一个。
1470+
在终止一个 Pod 前,StatefulSet 控制器会等待 Pod 后继者被完全终止。
14261471

14271472

14281473
请注意,虽然级联删除会删除 StatefulSet 和它的 Pod,但它并不会删除和 StatefulSet 关联的 Headless Service。你必须手动删除`nginx` Service。
@@ -1522,6 +1567,7 @@ Pod. This option only affects the behavior for scaling operations. Updates are n
15221567
## Pod 管理策略
15231568

15241569

1570+
15251571
对于某些分布式系统来说,StatefulSet 的顺序性保证是不必要和/或者不应该的。
15261572
这些系统仅仅要求唯一性和身份标志。为了解决这个问题,在 Kubernetes 1.7 中
15271573
我们针对 StatefulSet API 对象引入了 `.spec.podManagementPolicy`

0 commit comments

Comments
 (0)