为 Rancher 设置高可用 K3s Kubernetes 集群

本文介绍了如何根据 Rancher Server 环境的最佳实践安装 Kubernetes 集群。

如果你的系统无法直接访问互联网,请参见离线安装说明。

为 Rancher 设置高可用 K3s Kubernetes 集群 - 图1单节点安装提示:

在单节点 Kubernetes 集群中,Rancher Server 不具备高可用性,而高可用性对在生产环境中运行 Rancher 非常重要。但是,如果你想要短期内使用单节点节省资源,同时又保留高可用性迁移路径,把 Rancher 安装到单节点集群也是合适的。

要配置单节点 K3s 集群,你只需要在单个节点上运行 Rancher Server 安装命令(不需要在两个节点上运行命令)。

在这两种单节点设置中,Rancher 可以与 Helm 一起安装在 Kubernetes 集群上,安装方法与安装到其他集群上一样。

先决条件

以下说明假设你已参见此章节配置好两个节点,一个负载均衡器,一个 DNS 记录和一个外部 MySQL 数据库。

Rancher 需要安装在支持的 Kubernetes 版本上。如需了解你使用的 Rancher 版本支持哪些 Kubernetes 版本,请参见 Rancher 支持矩阵

如需指定 K3s(Kubernetes)版本,在运行 K3s 安装脚本时使用 INSTALL_K3S_VERSION 环境变量(例如 INSTALL_K3S_VERSION="v1.24.10+k3s1")。

安装 Kubernetes

1. 安装 Kubernetes 并设置 K3s Server

在运行启动 K3s Kubernetes API Server 的命令时,你会传入使用之前设置的外部数据存储的选项。

  1. 连接到你准备用于运行 Rancher Server 的其中一个 Linux 节点。

  2. 在 Linux 节点上,运行以下命令来启动 K3s Server,并将其连接到外部数据存储。

    1. curl -sfL https://get.k3s.io | INSTALL_K3S_VERSION=<VERSION> sh -s - server \
    2. --datastore-endpoint="<DATASTORE_ENDPOINT>"

    其中 <DATASTORE_ENDPOINT> 是数据存储的连接 URI。例如,如果你使用的是 MySQL,则为 mysql://username:password@tcp(hostname:3306)/database-name。有效的数据存储包括 etcd、MySQL、PostgreSQL 或 SQLite(默认)。

    为 Rancher 设置高可用 K3s Kubernetes 集群 - 图2备注

    你也可以使用 $K3S_DATASTORE_ENDPOINT 环境变量来传递数据存储端点。

  3. 获取主 Server 节点令牌:

    1. cat /var/lib/rancher/k3s/server/token
  4. 在第二个 K3s Server 节点上运行命令:

    1. curl -sfL https://get.k3s.io | INSTALL_K3S_VERSION=<VERSION> sh -s - server \
    2. --datastore-endpoint="<DATASTORE_ENDPOINT>" \
    3. --token "<MAIN_SERVER_NODE_TOKEN>"

2. 检查 K3s 是否正常运行

在其中一个 K3s Server 节点上运行以下命令,来确认 K3s 是否已经设置成功:

  1. sudo k3s kubectl get nodes

然后你会看到两个具有 master 角色的节点。

  1. ubuntu@ip-172-31-60-194:~$ sudo k3s kubectl get nodes
  2. NAME STATUS ROLES AGE VERSION
  3. ip-172-31-60-194 Ready master 44m v1.17.2+k3s1
  4. ip-172-31-63-88 Ready master 6m8s v1.17.2+k3s1

测试集群 Pod 的健康状况:

  1. sudo k3s kubectl get pods --all-namespaces

结果:你已成功配置 K3s Kubernetes 集群。

3. 保存并开始使用 kubeconfig 文件

在每个 Rancher Server 节点安装 K3s 时,会在每个节点的 /etc/rancher/k3s/k3s.yaml 中生成一个 kubeconfig 文件。该文件包含访问集群的凭证。请将该文件保存在安全的位置。

如要使用该 kubeconfig 文件:

  1. 安装 Kubernetes 命令行工具 kubectl
  2. 复制 /etc/rancher/k3s/k3s.yaml 文件并保存到本地主机的 ~/.kube/config 目录上。
  3. 在 kubeconfig 文件中,server 的参数为 localhost。你需要将 server 配置为负载均衡器的 DNS,并指定端口 6443(通过端口 6443 访问 Kubernetes API Server,通过端口 80 和 443 访问 Rancher Server)。以下是一个 k3s.yaml 示例:
  1. apiVersion: v1
  2. clusters:
  3. - cluster:
  4. certificate-authority-data: [CERTIFICATE-DATA]
  5. server: [LOAD-BALANCER-DNS]:6443 # 编辑此行
  6. name: default
  7. contexts:
  8. - context:
  9. cluster: default
  10. user: default
  11. name: default
  12. current-context: default
  13. kind: Config
  14. preferences: {}
  15. users:
  16. - name: default
  17. user:
  18. password: [PASSWORD]
  19. username: admin

结果:你可以开始使用 kubectl 来管理你的 K3s 集群。如果你有多个 kubeconfig 文件,在使用 kubectl 时,你可以传入文件路径来指定要使用的 kubeconfig 文件:

  1. kubectl --kubeconfig ~/.kube/config/k3s.yaml get pods --all-namespaces

有关 kubeconfig 文件的详情,请参见 K3s 官方文档Kubernetes 官方文档中关于使用 kubeconfig 文件管理集群访问的部分。

4. 检查集群 Pod 的健康状况

现在你已经设置了 kubeconfig 文件。你可以使用 kubectl 在本地主机访问集群。

检查所有需要的 Pod 和容器是否健康:

  1. ubuntu@ip-172-31-60-194:~$ sudo kubectl get pods --all-namespaces
  2. NAMESPACE NAME READY STATUS RESTARTS AGE
  3. kube-system metrics-server-6d684c7b5-bw59k 1/1 Running 0 8d
  4. kube-system local-path-provisioner-58fb86bdfd-fmkvd 1/1 Running 0 8d
  5. kube-system coredns-d798c9dd-ljjnf 1/1 Running 0 8d

结果:你可通过使用 kubectl 访问集群,并且 K3s 集群能成功运行。现在,你可以在集群上安装 Rancher Management Server。