From 0f2c1e397d395a535b6911ffbd8037069eef9296 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B8=85=E8=BF=9B=E8=B6=85?= Date: Tue, 28 Dec 2021 00:36:14 +0800 Subject: [PATCH] [zh] synchronize remove highly-available-master.md --- .../highly-available-master.md | 396 ------------------ 1 file changed, 396 deletions(-) delete mode 100644 content/zh/docs/tasks/administer-cluster/highly-available-master.md diff --git a/content/zh/docs/tasks/administer-cluster/highly-available-master.md b/content/zh/docs/tasks/administer-cluster/highly-available-master.md deleted file mode 100644 index 6144a634c8..0000000000 --- a/content/zh/docs/tasks/administer-cluster/highly-available-master.md +++ /dev/null @@ -1,396 +0,0 @@ ---- -title: 搭建高可用的 Kubernetes Masters -content_type: task ---- - - - - - -{{< feature-state for_k8s_version="1.5" state="alpha" >}} - - -你可以在谷歌计算引擎(GCE)的 `kubeup` 或 `kube-down` 脚本中复制 Kubernetes Master。 -本文描述了如何使用 kube-up/down 脚本来管理高可用(HA)的 Master, -以及如何使用 GCE 实现高可用控制节点。 - -## {{% heading "prerequisites" %}} - -{{< include "task-tutorial-prereqs.md" >}} {{< version-check >}} - - - -## 启动一个兼容高可用的集群 - -要创建一个新的兼容高可用的集群,你必须在 `kubeup` 脚本中设置以下标志: - - -* `MULTIZONE=true` - 为了防止从不同于服务器的默认区域的区域中删除 kubelets 副本。 - 如果你希望在不同的区域运行副本,那么这一项是必需并且推荐的。 - -* `ENABLE_ETCD_QUORUM_READ=true` - 确保从所有 API 服务器读取数据时将返回最新的数据。 - 如果为 true,读操作将被定向到主 etcd 副本。可以选择将这个值设置为 true, - 那么读取将更可靠,但也会更慢。 - -你还可以指定一个 GCE 区域,在这里创建第一个主节点副本。设置以下标志: - -* `KUBE_GCE_ZONE=zone` - 将运行第一个主节点副本的区域。 - -下面的命令演示在 GCE europe-west1-b 区域中设置一个兼容高可用的集群: - -```shell -MULTIZONE=true KUBE_GCE_ZONE=europe-west1-b ENABLE_ETCD_QUORUM_READS=true ./cluster/kube-up.sh -``` - -注意,上面的命令创建一个只有单一主节点的集群; -但是,你可以使用后续命令将新的主节点副本添加到集群中。 - - -## 增加一个新的主节点副本 - -在创建了兼容高可用的集群之后,可以向其中添加主节点副本。 -你可以使用带有如下标记的 `kubeup` 脚本添加主节点副本: - -* `KUBE_REPLICATE_EXISTING_MASTER=true` - 创建一个已经存在的主节点的副本。 - -* `KUBE_GCE_ZONE=zone` -主节点副本将运行的区域。必须与其他副本位于同一区域。 - -你无需设置 `MULTIZONE` 或 `ENABLE_ETCD_QUORUM_READS` 标志,因为他们可以从兼容高可用的集群中继承。 - -使用下面的命令可以复制现有兼容高可用的集群上的 Master: - -```shell -KUBE_GCE_ZONE=europe-west1-c KUBE_REPLICATE_EXISTING_MASTER=true ./cluster/kube-up.sh -``` - -## 删除主节点副本 - -你可以使用一个 `kube-down` 脚本从高可用集群中删除一个主节点副本,并可以使用以下标记: - -* `KUBE_DELETE_NODES=false` - 限制删除 kubelets。 - -* `KUBE_GCE_ZONE=zone` - 将移除主节点副本的区域。 - -* `KUBE_REPLICA_NAME=replica_name` - (可选)要删除的主节点副本的名称。 -如果为空:将删除给定区域中的所有副本。 - -使用下面的命令可以从一个现有的高可用集群中删除一个 Master副本: - -```shell -KUBE_DELETE_NODES=false KUBE_GCE_ZONE=europe-west1-c ./cluster/kube-down.sh -``` - -## 处理主节点副本失败 - -如果高可用集群中的一个主节点副本失败,最佳实践是从集群中删除副本, -并在相同的区域中添加一个新副本。 -下面的命令演示了这个过程: - -1. 删除失败的副本: - -```shell -KUBE_DELETE_NODES=false KUBE_GCE_ZONE=replica_zone KUBE_REPLICA_NAME=replica_name ./cluster/kube-down.sh -``` - -
  1. 在原有位置增加一个新副本:
- -```shell -KUBE_GCE_ZONE=replica-zone KUBE_REPLICATE_EXISTING_MASTER=true ./cluster/kube-up.sh -``` - - -## 高可用集群复制主节点的最佳实践 - -* 尝试将主节点副本放置在不同的区域。在某区域故障时,放置在该区域内的所有主机都将失败。 - 为了在区域故障中幸免,请同样将工作节点放置在多区域中 - (详情请见[多区域](/zh/docs/setup/best-practices/multiple-zones/))。 - -* 不要使用具有两个主节点副本的集群。在双副本集群上达成一致需要在更改持久状态时 - 两个副本都处于运行状态。 - 因此,两个副本都是需要的,任一副本的失败都会将集群带入多数失败状态。 - 因此,就高可用而言,双副本集群不如单个副本集群。 - -* 添加主节点副本时,集群状态(etcd)会被复制到一个新实例。如果集群很大, - 可能需要很长时间才能复制它的状态。 - 这个操作可以通过迁移 etcd 数据存储来加速, 详情参见 - [这里](https://coreos.com/etcd/docs/latest/admin_guide.html#member-migration) - (我们正在考虑在未来添加对迁移 etcd 数据存储的支持)。 - - - -## 实现说明 - -![ha-master-gce](/images/docs/ha-master-gce.png) - - -### 概述 - -每个主节点副本将以以下模式运行以下组件: - -* etcd 实例: 所有实例将会以共识方式组建集群; - -* API 服务器: 每个服务器将与本地 etcd 通信——集群中的所有 API 服务器都可用; - -* 控制器、调度器和集群自动扩缩器:将使用租约机制 —— 每个集群中只有一个实例是可用的; - -* 插件管理器:每个管理器将独立工作,试图保持插件同步。 - -此外,在 API 服务器前面将有一个负载均衡器,用于将外部和内部通信路由到他们。 - - -### 负载均衡 - -启动第二个主节点副本时,将创建一个包含两个副本的负载均衡器, -并将第一个副本的 IP 地址提升为负载均衡器的 IP 地址。 -类似地,在删除倒数第二个主节点副本之后,将删除负载均衡器, -并将其 IP 地址分配给最后一个剩余的副本。 -请注意,创建和删除负载均衡器是复杂的操作,可能需要一些时间(约20分钟)来同步。 - - -### 主节点服务 & kubelets - -Kubernetes 并不试图在其服务中保持 apiserver 的列表为最新, -相反,它将将所有访问请求指向外部 IP: - -* 在拥有一个主节点的集群中,IP 指向单一的主节点, -* 在拥有多个主节点的集群中,IP 指向主节点前面的负载均衡器。 - -类似地,kubelets 将使用外部 IP 与主节点通信。 - - -### 主节点证书 - -Kubernetes 为每个副本的外部公共 IP 和本地 IP 生成主节点 TLS 证书。 -副本的临时公共 IP 没有证书; -要通过其临时公共 IP 访问副本,必须跳过 TLS 检查。 - - -### etcd 集群 - -为了允许 etcd 组建集群,需开放 etcd 实例之间通信所需的端口(用于集群内部通信)。 -为了使这种部署安全,etcd 实例之间的通信使用 SSL 进行鉴权。 - - -### API 服务器标识 - -{{< feature-state state="alpha" for_k8s_version="v1.20" >}} - - -使用 API 服务器标识功能需要启用[特性门控](/zh/docs/reference/command-line-tools-reference/feature-gates/), -该功能默认不启用。 -你可以在启动 {{< glossary_tooltip text="API 服务器" term_id="kube-apiserver" >}} 的时候启用特性门控 `APIServerIdentity` 来激活 API 服务器标识: - - -```shell -kube-apiserver \ ---feature-gates=APIServerIdentity=true \ - # …其他标记照常 -``` - - -在启动引导过程中,每个 kube-apiserver 会给自己分配一个唯一 ID。 -该 ID 的格式是 `kube-apiserver-{UUID}`。 -每个 kube-apiserver 会在 _kube-system_ {{< glossary_tooltip text="名字空间" term_id="namespace">}} 里创建一个 [`Lease` 对象](/docs/reference/generated/kubernetes-api/{{< param "version" >}}//#lease-v1-coordination-k8s-io)。 - -`Lease` 对象的名字是 kube-apiserver 的唯一 ID。 -`Lease` 对象包含一个标签 `k8s.io/component=kube-apiserver`。 -每个 kube-apiserver 每过 `IdentityLeaseRenewIntervalSeconds`(默认是 10 秒)就会刷新它的 `Lease` 对象。 -每个 kube-apiserver 每过 `IdentityLeaseDurationSeconds`(默认是 3600 秒)也会检查所有 kube-apiserver 的标识 `Lease` 对象, -并且会删除超过 `IdentityLeaseDurationSeconds` 时间还没被刷新的 `Lease` 对象。 -可以在 kube-apiserver 的 `identity-lease-renew-interval-seconds` -和 `identity-lease-duration-seconds` 标记里配置 `IdentityLeaseRenewIntervalSeconds` 和 `IdentityLeaseDurationSeconds`。 - - -启用该功能是使用 HA API 服务器协调相关功能(例如,`StorageVersionAPI` 特性门控)的前提条件。 - - -## 拓展阅读 - -[自动化高可用集群部署 - 设计文档](https://git.k8s.io/community/contributors/design-proposals/cluster-lifecycle/ha_master.md) -