为 Rancher 设置高可用 K3s Kubernetes 集群

本节介绍了如何根据Rancher 服务器环境的最佳实践安装 Kubernetes 集群。

如果你的系统处于离线环境,不能直接上网,请参考离线安装说明。

单节点安装提示 在单节点 Kubernetes 集群中,Rancher 服务器不具备高可用性,这对于在生产中运行 Rancher 非常重要。然而,如果你想在短期内通过使用单节点来节省资源,同时保留高可用性的迁移路径,在单节点集群上安装 Rancher 是很有用的。

要建立单节点 K3s 集群,只需在一个节点上运行 Rancher 服务器安装命令,而不是两个节点。

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

先决条件

这些说明假设你已经设置了两个节点、一个负载均衡器、一个 DNS 记录和一个外部 MySQL 数据库,如本节所述

Rancher 需要安装在支持的 Kubernetes 版本上。要了解您的 Rancher 版本支持哪些版本的 Kubernetes,请参考支持维护条款。要指定 K3s 版本,请在运行 K3s 安装脚本时使用 INSTALL_K3S_VERSION 环境变量。

安装 Kubernetes

步骤 1:安装 Kubernetes 并设置 K3s 服务器

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

  1. 连接到你准备运行 Rancher 服务器的一个 Linux 节点。

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

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

    Copy

    要指定 K3s 版本,请在运行 K3s 安装脚本时使用 INSTALL_K3S_VERSION 环境变量:

    1. curl -sfL https://get.k3s.io | INSTALL_K3S_VERSION=vX.Y.Z sh -s - server \
    2. --datastore-endpoint="mysql://username:password@tcp(hostname:3306)/database-name"

    Copy

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

  1. 在你的第二个 K3s 服务器节点上重复同样的命令。

步骤 2:确认 K3s 正在运行

请在 K3s 服务器节点上运行以下命令,确认 K3s 已经设置成功。

  1. sudo k3s kubectl get nodes
  2. ```
  3. 然后你应该看到两个具有 master role 的节点。
  4. ```
  5. ubuntu@ip-172-31-60-194:~$ sudo k3s kubectl get nodes
  6. NAME STATUS ROLES AGE VERSION
  7. ip-172-31-60-194 Ready master 44m v1.17.2+k3s1
  8. ip-172-31-63-88 Ready master 6m8s v1.17.2+k3s1
  9. ```
  10. 然后测试集群 pods 的健康状况。
  11. ```
  12. sudo k3s kubectl get pods --all-namespaces

Copy

结果: 您已经成功建立了一个 K3s Kubernetes 集群。

步骤 3:保存并开始使用 kubeconfig 文件

当您在每个 Rancher server 节点上安装 K3s 时,会在节点上创建了一个/etc/rancher/k3s/k3s.yamlkubeconfig文件。这个文件包含了完全访问集群的凭证,你应该把这个文件保存在一个安全的位置。

  1. 安装[kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/#install-kubectl)。
  2. 复制/etc/rancher/k3s/k3s.yaml处的文件,并保存到本地机器上的~/.kube/config目录下。
  3. 在 kubeconfig 文件中,server指令定义为 localhost。将服务器配置为你的负载均衡器的 DNS,参考端口 6443。Kubernetes API 服务器将通过端口 6443 到达,而 Rancher 服务器将通过端口 80 和 443 到达)。下面是一个例子k3s.yaml
  1. apiVersion: v1
  2. clusters:
  3. - cluster:
  4. certificate-authority-data: [CERTIFICATE-DATA]
  5. server: [LOAD-BALANCER-DNS]:6443 # Edit this line
  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

Copy

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

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

Copy

关于kubeconfig文件的更多信息,请参考K3s 文档Kubernetes 官方文档中关于使用kubeconfig文件组织集群访问的内容。

4. 检查您集群内 Pods 的健康状况

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

检查所有需要的 pods 和容器是否健康,准备继续:

  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

Copy

结果: 您已经可以使用kubectl访问集群,并且 K3s 集群正在运行。现在可以在集群上安装 Rancher 管理服务器。