Files
kuboard-press/learning/k8s-intermediate/workload/wl-statefulset/scaling.md
huanqing.shao 1b69a42777 vssue
2019-09-22 21:56:32 +08:00

45 lines
2.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
vssueId: 44
layout: LearningLayout
description: 本文描述了 Kubernetes StatefulSet 的部署和伸缩
---
# StatefulSet 的部署和伸缩
[返回 StatefulSet](./)
## 部署和伸缩 StatefulSet 时的执行顺序
* 在创建一个副本数为 N 的 StatefulSet 时,其 Pod 将被按 {0 ... N-1} 的顺序逐个创建
* 在删除一个副本数为 N 的 StatefulSet (或其中所有的 Pod其 Pod 将按照相反的顺序(即 {N-1 ... 0})终止和删除
* 在对 StatefulSet 执行扩容scale up操作时新增 Pod 所有的前序 Pod 必须处于 Running运行和 Ready就绪的状态
* 终止和删除 StatefulSet 中的某一个 Pod 时,该 Pod 所有的后序 Pod 必须全部已终止
StatefulSet 中 `pod.spec.terminationGracePeriodSeconds` 不能为 0。具体原因请参考 [force deleting StatefulSet Pods](https://kubernetes.io/docs/tasks/run-application/force-delete-stateful-set-pod/)
[创建 StatefulSet](./basics.html) 例子中的 nginx StatefulSet 被创建时:
* Pod web-0、web-1、web-2 将被按顺序部署
* web-0 处于 Running 和 Ready 状态之前web-1 不会创建web-1 处于 Running 和 Ready 状态之前web-2 不会创建
* 如果 web-1 已处于 Running 和 Ready 的状态web-2 尚未创建,此时 web-0 发生了故障,则在 web-0 成功重启并达到 Running 和 Ready 的状态之前web-2 不会创建
* 如果用户对这个 StatefulSet 执行缩容scale down操作将其副本数调整为 1
* web-2 将被首先终止;在 web-2 已终止并删除之后,才开始终止 web-1
* 假设在 web-2 终止并删除之后web-1 终止之前,此时 web-0 出现故障,则,在 web-0 重新回到 Running 和 Ready 的状态之前kubernetes 将不会终止 web-1
## Pod 管理策略
在 Kubernetes 1.7 及其后续版本中,可以为 StatefulSet 设定 `.spec.podManagementPolicy` 字段<Badge text="Kuboard 暂不支持" type="warn"/>,以便您可以继续使用 StatefulSet 唯一 ID 的特性,但禁用其有序创建和销毁 Pod 的特性。该字段的取值如下:
* **OrderedReady**
OrderedReady 是 `.spec.podManagementPlicy` 的默认值。其对 Pod 的管理方式已经在 [部署和伸缩 StatefulSet 时的执行顺序](./scaling.html#部署和伸缩-statefulset-时的执行顺序) 详细描述
* **Parallel**
`.spec.podManagementPlicy` 的取值为 Parallel则 StatefulSet Controller 将同时并行地创建或终止其所有的 Pod。此时 StatefulSet Controller 将不会逐个创建 Pod等待 Pod 进入 Running 和 Ready 状态之后再创建下一个 Pod也不会逐个终止 Pod。
::: tip
此选项只影响到伸缩scale up/scale down操作。更新操作不受影响。
:::
[返回 StatefulSet](./)