跳至主要内容

高可用外部数据库

本节介绍如何使用外部数据库安装高可用 K3s 集群。

注意

要快速部署大型 HA 集群,请参阅相关项目

单服务器集群可以满足各种用例,但在 Kubernetes 控制平面正常运行时间至关重要的环境中,您可以在 HA 配置中运行 K3s。HA K3s 集群由以下部分组成:

  • 两个或多个**服务器节点**,它们将提供 Kubernetes API 并运行其他控制平面服务
  • 一个**外部数据存储**(与单服务器设置中使用的嵌入式 SQLite 数据存储相反)
  • 可选:零个或多个**代理节点**,这些节点被指定用于运行您的应用程序和服务
  • 可选:一个**固定注册地址**,供代理节点向集群注册

有关这些组件如何协同工作的更多详细信息,请参阅架构部分

安装概述

设置 HA 集群需要以下步骤:

1. 创建外部数据存储

您首先需要为集群创建一个外部数据存储。有关更多详细信息,请参阅集群数据存储选项文档。

2. 启动服务器节点

K3s 对于此 HA 配置需要两个或多个服务器节点。有关最低机器要求,请参阅要求指南。

在这些节点上运行k3s server命令时,必须设置datastore-endpoint参数,以便 K3s 知道如何连接到外部数据存储。token参数也可用于在添加节点时设置确定性令牌。为空时,此令牌将自动生成以供进一步使用。

例如,可以使用以下命令安装使用 MySQL 数据库作为外部数据存储的 K3s 服务器,并设置令牌

curl -sfL https://get.k3s.io | sh -s - server \
--token=SECRET \
--datastore-endpoint="mysql://username:password@tcp(hostname:3306)/database-name" \
--tls-san=<FIXED_IP> # Optional, needed if using a fixed registration address

数据存储端点格式因数据库类型而异。有关详细信息,请参阅有关数据存储端点格式的部分。

要在启动服务器节点时配置 TLS 证书,请参阅数据存储配置指南

注意

单服务器安装中可用的相同安装选项也可用于高可用安装。有关更多详细信息,请参阅配置选项文档。

默认情况下,服务器节点是可以调度的,因此您的工作负载可以在其上启动。如果您希望拥有一个专用的控制平面,在其中不运行用户工作负载,则可以使用污点。node-taint参数将允许您为节点配置污点,例如--node-taint CriticalAddonsOnly=true:NoExecute

在所有服务器节点上启动k3s server进程后,请使用k3s kubectl get nodes确保集群已正确启动。您应该会看到您的服务器节点处于就绪状态。

3. 可选:加入其他服务器节点

步骤 2 中的相同示例命令可用于加入其他服务器节点,其中需要使用第一个节点的令牌。

如果第一个服务器节点在没有--token CLI 标志或K3S_TOKEN变量的情况下启动,则可以从已加入集群的任何服务器中检索令牌值

cat /var/lib/rancher/k3s/server/token

然后可以使用令牌添加其他服务器节点

curl -sfL https://get.k3s.io | sh -s - server \
--token=SECRET \
--datastore-endpoint="mysql://username:password@tcp(hostname:3306)/database-name"

有一些配置标志必须在所有服务器节点中相同

  • 网络相关标志:--cluster-dns--cluster-domain--cluster-cidr--service-cidr
  • 控制某些组件部署的标志:--disable-helm-controller--disable-kube-proxy--disable-network-policy以及传递给--disable的任何组件
  • 功能相关标志:--secrets-encryption
注意

确保保留此令牌的副本,因为在从备份恢复和添加节点时需要它。以前,K3s 在使用外部 SQL 数据存储时没有强制使用令牌。

4. 可选:配置固定注册地址

代理节点需要一个 URL 来进行注册。这可以是任何服务器节点的 IP 或主机名,但在许多情况下,这些可能会随着时间的推移而发生变化。例如,如果您在支持扩展组的云中运行集群,则节点可能会随着时间的推移而创建和销毁,从而更改为与初始服务器节点集不同的 IP。最好在服务器节点前面有一个不会随时间变化的稳定端点。可以使用多种方法设置此端点,例如:

  • 第 4 层 (TCP) 负载均衡器
  • 循环 DNS
  • 虚拟或弹性 IP 地址

请参阅集群负载均衡器以获取示例配置。

此端点也可用于访问 Kubernetes API。因此,例如,您可以修改您的kubeconfig文件以指向它,而不是指向特定节点。

为了避免在这种配置中出现证书错误,您应该使用--tls-san=YOUR_IP_OR_HOSTNAME_HERE选项配置服务器。此选项将其他主机名或 IP 作为主题备用名称添加到 TLS 证书中,如果您希望通过 IP 和主机名进行访问,则可以多次指定它。

5. 可选:加入代理节点

因为 K3s 服务器节点默认情况下是可以调度的,所以 HA K3s 集群不需要代理节点。但是,您可能希望拥有专用的代理节点来运行您的应用程序和服务。

在 HA 集群中加入代理节点与在单服务器集群中加入代理节点相同。您只需要指定代理应注册到的 URL(服务器 IP 之一或固定注册地址)以及它应使用的令牌。

K3S_TOKEN=SECRET k3s agent --server https://server-or-fixed-registration-address:6443