diff --git a/i18n/zh/code.json b/i18n/zh/code.json index 9651f6711..878d5396c 100644 --- a/i18n/zh/code.json +++ b/i18n/zh/code.json @@ -5,7 +5,7 @@ }, "theme.ErrorPageContent.tryAgain": { "message": "重试", - "description": "The label of the button to try again when the page crashed" + "description": "The label of the button to try again rendering when the React error boundary captures an error" }, "theme.NotFound.title": { "message": "找不到页面", @@ -400,5 +400,17 @@ "theme.docs.sidebar.navAriaLabel": { "message": "文档侧边栏", "description": "The ARIA label for the sidebar navigation" + }, + "theme.SearchPage.searchContext.everywhere": { + "message": "所有位置" + }, + "theme.SearchBar.noResultsText": { + "message": "没有找到任何文档" + }, + "theme.SearchBar.seeAllOutsideContext": { + "message": "查看 {context} 外的所有结果" + }, + "theme.SearchBar.searchInContext": { + "message": "查看 {context} 内的所有结果" } } diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/datastore/cluster-loadbalancer.md b/i18n/zh/docusaurus-plugin-content-docs/current/datastore/cluster-loadbalancer.md index e69de29bb..e843b6f4e 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/datastore/cluster-loadbalancer.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/datastore/cluster-loadbalancer.md @@ -0,0 +1,194 @@ +--- +title: 集群负载均衡器 +weight: 30 +--- + + +本节介绍如何在高可用性 (HA) K3s 集群的 Server 节点前安装外部负载均衡器。此处提供了两个示例:Nginx 和 HAProxy。 + +:::tip +不要混淆外部负载均衡器与嵌入式 ServiceLB,后者是一个嵌入式控制器,允许在不部署第三方负载均衡器控制器的情况下使用 Kubernetes LoadBalancer Service。有关更多详细信息,请参阅 [Service Load Balancer](../networking/networking.md#service-load-balancer)。 + +外部负载均衡器可用于提供固定的注册地址来注册节点,或用于从外部访问 Kubernetes API Server。为了公开 LoadBalancer Service,外部负载均衡器可以与 ServiceLB 一起使用或代替 ServiceLB,但在大多数情况下,替代负载均衡器控制器(例如 MetalLB 或 Kube-VIP)是更好的选择。 +::: + +## 先决条件 + +本示例中的所有节点都运行 Ubuntu 20.04。 + +这两个示例假设已在 3 个节点上安装了[具有嵌入式 etcd 的 HA K3s 集群](../datastore/ha-embedded.md)。 + +每个 K3s Server 配置有: +```yaml +# /etc/rancher/k3s/config.yaml +token: lb-cluster-gd +tls-san: 10.10.10.100 +``` + +节点的主机名和 IP 为: +* server-1: `10.10.10.50` +* server-2: `10.10.10.51` +* server-3: `10.10.10.52` + + +用于负载均衡的两个节点配置了以下主机名和 IP: +* lb-1: `10.10.10.98` +* lb-2: `10.10.10.99` + +存在三个附加节点,其主机名和 IP 为: +* agent-1: `10.10.10.101` +* agent-2: `10.10.10.102` +* agent-3: `10.10.10.103` + +## 设置负载均衡器 + + + +[HAProxy](http://www.haproxy.org/) 是一个提供 TCP 负载均衡器的开源选项。它还支持负载均衡器本身的 HA,确保各个级别的冗余。有关详细信息,请参阅 [HAProxy 文档](http://docs.haproxy.org/2.8/intro.html)。 + +此外,我们将使用 KeepAlived 来生成用于访问集群的虚拟 IP (VIP)。有关详细信息,请参阅 [KeepAlived 文档](https://www.keepalived.org/manpage.html)。 + + + +1) 安装 HAProxy 和 KeepAlived: + +```bash +sudo apt-get install haproxy keepalived +``` + +2) 将以下内容添加到 lb-1 和 lb-2 上的 `/etc/haproxy/haproxy.cfg` 中: + +``` +frontend k3s-frontend + bind *:6443 + mode tcp + option tcplog + default_backend k3s-backend + +backend k3s-backend + mode tcp + option tcp-check + balance roundrobin + default-server inter 10s downinter 5s + server server-1 10.10.10.50:6443 check + server server-2 10.10.10.51:6443 check + server server-3 10.10.10.52:6443 check +``` +3) 将以下内容添加到 lb-1 和 lb-2 上的 `/etc/keepalived/keepalived.conf` 中: + +``` +vrrp_script chk_haproxy { + script 'killall -0 haproxy' # faster than pidof + interval 2 +} + +vrrp_instance haproxy-vip { + interface eth1 + state # MASTER on lb-1, BACKUP on lb-2 + priority # 200 on lb-1, 100 on lb-2 + + virtual_router_id 51 + + virtual_ipaddress { + 10.10.10.100/24 + } + + track_script { + chk_haproxy + } +} +``` + +6) 在 lb-1 和 lb-2 上重启 HAProxy 和 KeepAlived: + +```bash +systemctl restart haproxy +systemctl restart keepalived +``` + +5) 在 agent-1、agent-2、agent-3 上执行以下命令来安装 K3s 并加入集群: + +```bash +curl -sfL https://get.k3s.io | K3S_TOKEN=lb-cluster-gd sh -s - agent --server https://10.10.10.100:6443 +``` + +你现在可以从 Server 节点使用 `kubectl` 与集群交互。 +```bash +root@server-1 $ k3s kubectl get nodes -A +NAME STATUS ROLES AGE VERSION +agent-1 Ready 32s v1.27.3+k3s1 +agent-2 Ready 20s v1.27.3+k3s1 +agent-3 Ready 9s v1.27.3+k3s1 +server-1 Ready control-plane,etcd,master 4m22s v1.27.3+k3s1 +server-2 Ready control-plane,etcd,master 3m58s v1.27.3+k3s1 +server-3 Ready control-plane,etcd,master 3m12s v1.27.3+k3s1 +``` + + + + + +## Nginx 负载均衡器 + +:::caution +Nginx 本身不支持高可用性 (HA) 配置。如果设置 HA 集群,在 K3 前面使用单个负载均衡器将重新引入单一故障点。 +::: + +[Nginx 开源](http://nginx.org/)提供 TCP 负载均衡器。有关详细信息,请参阅[使用 Nginx 作为 HTTP 负载均衡器](https://nginx.org/en/docs/http/load_balancing.html)。 + +1) 在 lb-1 上创建一个包含以下内容的 `nginx.conf` 文件: + +``` +events {} + +stream { + upstream k3s_servers { + server 10.10.10.50:6443; + server 10.10.10.51:6443; + server 10.10.10.52:6443; + } + + server { + listen 6443; + proxy_pass k3s_servers; + } +} +``` + +2) 在 lb-1 上运行 Nginx 负载均衡器: + +使用 Docker: + +```bash +docker run -d --restart unless-stopped \ + -v ${PWD}/nginx.conf:/etc/nginx/nginx.conf \ + -p 6443:6443 \ + nginx:stable +``` + +或者[安装 Nginx](https://docs.nginx.com/nginx/admin-guide/installing-nginx/installing-nginx-open-source/) 然后运行: + +```bash +cp nginx.conf /etc/nginx/nginx.conf +systemctl start nginx +``` + +3) 在 agent-1、agent-2、agent-3 上执行以下命令来安装 K3s 并加入集群: + +```bash +curl -sfL https://get.k3s.io | K3S_TOKEN=lb-cluster-gd sh -s - agent --server https://10.10.10.99:6443 +``` + +你现在可以从 Server 节点使用 `kubectl` 与集群交互。 +```bash +root@server1 $ k3s kubectl get nodes -A +NAME STATUS ROLES AGE VERSION +agent-1 Ready 30s v1.27.3+k3s1 +agent-2 Ready 22s v1.27.3+k3s1 +agent-3 Ready 13s v1.27.3+k3s1 +server-1 Ready control-plane,etcd,master 4m49s v1.27.3+k3s1 +server-2 Ready control-plane,etcd,master 3m58s v1.27.3+k3s1 +server-3 Ready control-plane,etcd,master 3m16s v1.27.3+k3s1 +``` + + \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/datastore/ha-embedded.md b/i18n/zh/docusaurus-plugin-content-docs/current/datastore/ha-embedded.md index 6b6404818..8003306de 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/datastore/ha-embedded.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/datastore/ha-embedded.md @@ -18,29 +18,20 @@ HA 嵌入式 etcd 集群必须由奇数个 Server 节点组成,以便 etcd 维 * 可选:**固定注册地址**,供 Agent 节点注册到集群 首先,启动一个带有 `cluster-init` 标志的 Server 节点来启用集群和一个令牌,该令牌将作为共享 secret,用于将其他 Server 加入集群。 + ```bash -curl -sfL https://get.k3s.io | K3S_TOKEN=SECRET sh -s - server --cluster-init +curl -sfL https://get.k3s.io | K3S_TOKEN=SECRET sh -s - server \ + --cluster-init \ + --tls-san= # Optional, needed if using a fixed registration address ``` -:::note -中国用户,可以使用以下方法加速安装: -``` -curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn K3S_TOKEN=SECRET sh -s - server --cluster-init -``` -::: - 启动第一台服务器后,使用共享 secret 将第二台和第三台服务器加入集群: ```bash -curl -sfL https://get.k3s.io | K3S_TOKEN=SECRET sh -s - server --server https://:6443 +curl -sfL https://get.k3s.io | K3S_TOKEN=SECRET sh -s - server \ + --server https://:6443 \ + --tls-san= # Optional, needed if using a fixed registration address ``` -:::note -中国用户,可以使用以下方法加速安装: -``` -curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn K3S_TOKEN=SECRET sh -s - server --server https://:6443 -``` -::: - 检查第二个和第三个服务器是否已加入集群: ```bash @@ -64,9 +55,12 @@ curl -sfL https://get.k3s.io | K3S_TOKEN=SECRET sh -s - agent --server https://< * 功能相关标志:`--secrets-encryption` ## 现有的单节点集群 + +:::info 版本 +从 [v1.22.2+k3s1](https://github.com/k3s-io/k3s/releases/tag/v1.22.2%2Bk3s1) 起可用 +::: + 如果你有一个使用默认嵌入式 SQLite 数据库的现有集群,你可以通过使用 `--cluster-init` 标志重新启动你的 K3s server,从而将其转换为 etcd。完成此操作后,你将能够如上所述添加其他实例。 如果由于节点已经初始化或加入了一个集群,导致在磁盘上发现一个 etcd 数据存储,那么数据存储参数(`--cluster-init`、`--server`、`--datastore-endpoint` 等)将被忽略。 -> **重要提示**:K3s v1.22.2 及更高版本支持将 SQLite 迁移到 etcd。如果你将 `--cluster-init` 添加到现有 server,旧版本将创建一个新的空数据存储。 - diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/datastore/ha.md b/i18n/zh/docusaurus-plugin-content-docs/current/datastore/ha.md index a46833f80..fd3f41b26 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/datastore/ha.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/datastore/ha.md @@ -32,17 +32,9 @@ K3s 需要两个或更多的 Server 节点来实现 HA 配置。有关最低主 curl -sfL https://get.k3s.io | sh -s - server \ --token=SECRET \ --datastore-endpoint="mysql://username:password@tcp(hostname:3306)/database-name" + --tls-san= # Optional, needed if using a fixed registration address ``` -:::note -中国用户,可以使用以下方法加速安装: -``` -curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn sh -s - server \ - --token=SECRET \ - --datastore-endpoint="mysql://username:password@tcp(hostname:3306)/database-name" -``` -::: - 根据数据库类型的不同,数据存储端点的格式也不同。有关详细信息,请参阅[数据存储端点格式](../datastore/datastore.md#数据存储端点格式和功能)。 要在启动 server 节点时配置 TLS 证书,请参阅[数据存储配置指南](../datastore/datastore.md#外部数据库配置参数)。 @@ -91,24 +83,27 @@ curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIR 你需要备份 token 的值,因为恢复备份和添加节点时都需要该 token。以前,K3s 在使用外部 SQL 数据存储时不强制使用 token。 ::: -### 4. 可选:加入 Agent 节点 -因为 K3s Server 节点默认是可调度的,所以 HA K3s 集群不需要 Agent 节点。但是,你可能希望使用专门的 Agent 节点来运行应用程序和服务。 +### 4. 可选:配置固定的注册地址 -在 HA 集群中加入 Agent 节点与在单个 Server 集群中加入 Agent 节点是一样的。你只需要指定 Agent 应该注册的 URL(server IP 之一或固定注册地址)和要使用的 Token 即可。 - -```bash -K3S_TOKEN=SECRET k3s agent --server https://server-or-fixed-registration-address:6443 -``` - -### 5. 可选:配置固定的注册地址 - -Agent 节点需要一个 URL 来注册。这可以是任何 server 节点的 IP 或主机名,但在许多情况下,这些节点可能会随着时间的推移而改变。例如,如果你在支持缩放组的云中运行集群,你可能会纵向缩放 Server 节点组,导致节点被创建和销毁,从而导致 Server 节点集的 IP 发生改变。因此,你应该在 Server 节点前面有一个稳定的端点,而且它不会随时间推移而改变。你可以使用许多方法来设置此端点,例如: +Agent 节点需要一个 URL 来注册。这可以是任何 server 节点的 IP 或主机名,但在许多情况下,这些节点可能会随着时间的推移而改变。例如,如果在支持扩展组的云上运行集群,则可能会随着时间的推移创建和销毁节点,从而更改为与初始 Server 节点集不同的 IP。最好在 Server 节点前面有一个不会随时间变化的稳定端点。你可以使用许多方法来设置此端点,例如: * 4 层 (TCP) 负载均衡器 * 轮询 DNS * 虚拟或弹性 IP 地址 +有关示例配置,请参阅[集群负载均衡器](./cluster-loadbalancer.md)。 + 这个端点也可以用来访问 Kubernetes API。因此,你可以修改 [kubeconfig](https://kubernetes.io/docs/concepts/configuration/organize-cluster-access-kubeconfig/) 文件来指向它,而不是特定的节点。 要避免此类配置中的证书错误,请使用 `--tls-san YOUR_IP_OR_HOSTNAME_HERE` 选项来配置 Server。这个选项在 TLS 证书中增加了一个额外的主机名或 IP 作为 Subject Alternative Name,如果你想通过 IP 和主机名访问,可以多次指定。 + +### 5. 可选:加入 Agent 节点 + +因为 K3s Server 节点默认是可调度的,所以 HA K3s 集群不需要 Agent 节点。但是,你可能希望使用专门的 Agent 节点来运行应用程序和服务。 + +在 HA 集群中加入 Agent 节点与在单个 Server 集群中加入 Agent 节点是一样的。你只需要指定 Agent 应该注册的 URL(server IP 之一或固定注册地址)和要使用的 Token 即可。 + +```bash +K3S_TOKEN=SECRET k3s agent --server https://server-or-fixed-registration-address:6443 +``` diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/helm/helm.md b/i18n/zh/docusaurus-plugin-content-docs/current/helm/helm.md index f1d75d023..68f3060d2 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/helm/helm.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/helm/helm.md @@ -60,7 +60,7 @@ spec: 你可以通过集群内的 Kubernetes APIServer 匿名访问 `/var/lib/rancher/k3s/server/static/` 中的内容。此 URL 可以使用 `spec.chart` 字段中的特殊变量 `%{KUBERNETES_API}%` 进行模板化。例如,打包的 Traefik 组件通过 `https://%{KUBERNETES_API}%/static/charts/traefik-12.0.000.tgz` 加载 Chart。 :::note -`name` 字段需要遵循 Helm Chart 命名约定。如需了解更多信息,请参阅 [Helm 最佳实践文档](https://helm.sh/docs/chart_best_practices/conventions/#chart-names)。 +`name` 字段需要遵循 Helm Chart 命名约定。有关更多信息,请参阅 [Helm 最佳实践文档](https://helm.sh/docs/chart_best_practices/conventions/#chart-names)。 ::: ### 使用 HelmChartConfig 自定义打包组件 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/installation/network-options.md b/i18n/zh/docusaurus-plugin-content-docs/current/installation/network-options.md index c117e868a..8fc0bb8ab 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/installation/network-options.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/installation/network-options.md @@ -253,6 +253,8 @@ curl -fsSL https://tailscale.com/install.sh | sh --vpn-auth-file=$PATH_TO_FILE ``` +或者,如果你有自己的 Tailscale 服务器(例如 headscale),则可以通过将 `,controlServerURL=$URL` 附加到 vpn-auth 参数来连接它。 + :::caution 警告 如果你计划使用同一个 tailscale 网络运行多个 K3s 集群,请创建适当的 [ACL](https://tailscale.com/kb/1018/acls/) 来避免 IP 冲突,或为每个集群使用不同的 podCIDR 子网。 diff --git a/i18n/zh/docusaurus-theme-classic/navbar.json b/i18n/zh/docusaurus-theme-classic/navbar.json index e091adf08..99f07f563 100644 --- a/i18n/zh/docusaurus-theme-classic/navbar.json +++ b/i18n/zh/docusaurus-theme-classic/navbar.json @@ -2,5 +2,9 @@ "item.label.GitHub": { "message": "GitHub", "description": "Navbar item with label GitHub" + }, + "logo.alt": { + "message": "logo", + "description": "The alt text of navbar logo" } }