为 Rancher 设置高可用的 RKE2 Kubernetes 集群

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

先决条件

以下说明假设你已参见此章节配置好三个节点,一个负载均衡器和一个 DNS 记录。

为了让 RKE2 与负载均衡器正常工作,你需要设置两个监听器,一个用于 9345 端口,另一个用于 6443 端口的 Kubernetes API。

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

安装 Kubernetes

1. 安装 Kubernetes 并设置 RKE2 Server

RKE2 Server 使用嵌入式 etcd 运行。因此你不需要设置外部数据存储就可以在 HA 模式下运行。

在第一个节点上,使用你的预共享密文作为 Token 来设置配置文件。Token 参数可以在启动时设置。

如果你不指定预共享密文,RKE2 会生成一个预共享密文并将它放在 /var/lib/rancher/rke2/server/node-token 中。

为了避免固定注册地址的证书错误,请在启动 Server 时设置 tls-san 参数。这个选项在 Server 的 TLS 证书中增加一个额外的主机名或 IP 作为 Subject Alternative Name。如果你想通过 IP 和主机名访问,你可以将它指定为一个列表。

首先,创建用于存放 RKE2 配置文件的目录:

  1. mkdir -p /etc/rancher/rke2/

然后,参见以下示例在 /etc/rancher/rke2/config.yaml 中创建 RKE2 配置文件:

  1. token: my-shared-secret
  2. tls-san:
  3. - my-kubernetes-domain.com
  4. - another-kubernetes-domain.com

之后,运行安装命令并启用和启动 RKE2:

  1. curl -sfL https://get.rke2.io | sh -
  2. systemctl enable rke2-server.service
  3. systemctl start rke2-server.service
  1. 要加入其余的节点,使用同一个共享或自动生成的 Token 来配置每个额外的节点。以下是配置文件的示例:

    1. token: my-shared-secret
    2. server: https://<DNS-DOMAIN>:9345
    3. tls-san:
    4. - my-kubernetes-domain.com
    5. - another-kubernetes-domain.com

    运行安装程序,然后启用并启动 RKE2:

    1. curl -sfL https://get.rke2.io | sh -
    2. systemctl enable rke2-server.service
    3. systemctl start rke2-server.service
  2. 在第三 RKE2 Server 节点上运行同样的命令。

2. 检查 RKE2 是否正常运行

在所有 Server 节点上启动了 RKE2 Server 进程后,确保集群已经正常启动,请运行以下命令:

  1. /var/lib/rancher/rke2/bin/kubectl \
  2. --kubeconfig /etc/rancher/rke2/rke2.yaml get nodes
  3. 现在,Server 节点的状态应该是 Ready

测试集群 Pod 的健康状况:

  1. /var/lib/rancher/rke2/bin/kubectl \
  2. --kubeconfig /etc/rancher/rke2/rke2.yaml get pods --all-namespaces

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

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

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

如要使用该 kubeconfig 文件:

  1. 安装 Kubernetes 命令行工具 kubectl
  2. 复制 /etc/rancher/rke2/rke2.yaml 文件并保存到本地主机的 ~/.kube/config 目录上。
  3. 在 kubeconfig 文件中,server 的参数为 localhost。在端口 6443 上将服务器配置为 controlplane 负载均衡器的 DNS(RKE2 Kubernetes API Server 使用端口 6443,而 Rancher Server 将通过 NGINX Ingress 在端口 80 和 443 上提供服务。)以下是一个示例 rke2.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 来管理你的 RKE2 集群。如果你有多个 kubeconfig 文件,在使用 kubectl 时,你可以传入文件路径来指定要使用的 kubeconfig 文件:

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

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

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

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

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

  1. /var/lib/rancher/rke2/bin/kubectl --kubeconfig /etc/rancher/rke2/rke2.yaml get pods -A
  2. NAMESPACE NAME READY STATUS RESTARTS AGE
  3. kube-system cloud-controller-manager-rke2-server-1 1/1 Running 0 2m28s
  4. kube-system cloud-controller-manager-rke2-server-2 1/1 Running 0 61s
  5. kube-system cloud-controller-manager-rke2-server-3 1/1 Running 0 49s
  6. kube-system etcd-rke2-server-1 1/1 Running 0 2m13s
  7. kube-system etcd-rke2-server-2 1/1 Running 0 87s
  8. kube-system etcd-rke2-server-3 1/1 Running 0 56s
  9. kube-system helm-install-rke2-canal-hs6sx 0/1 Completed 0 2m17s
  10. kube-system helm-install-rke2-coredns-xmzm8 0/1 Completed 0 2m17s
  11. kube-system helm-install-rke2-ingress-nginx-flwnl 0/1 Completed 0 2m17s
  12. kube-system helm-install-rke2-metrics-server-7sggn 0/1 Completed 0 2m17s
  13. kube-system kube-apiserver-rke2-server-1 1/1 Running 0 116s
  14. kube-system kube-apiserver-rke2-server-2 1/1 Running 0 66s
  15. kube-system kube-apiserver-rke2-server-3 1/1 Running 0 48s
  16. kube-system kube-controller-manager-rke2-server-1 1/1 Running 0 2m30s
  17. kube-system kube-controller-manager-rke2-server-2 1/1 Running 0 57s
  18. kube-system kube-controller-manager-rke2-server-3 1/1 Running 0 42s
  19. kube-system kube-proxy-rke2-server-1 1/1 Running 0 2m25s
  20. kube-system kube-proxy-rke2-server-2 1/1 Running 0 59s
  21. kube-system kube-proxy-rke2-server-3 1/1 Running 0 85s
  22. kube-system kube-scheduler-rke2-server-1 1/1 Running 0 2m30s
  23. kube-system kube-scheduler-rke2-server-2 1/1 Running 0 57s
  24. kube-system kube-scheduler-rke2-server-3 1/1 Running 0 42s
  25. kube-system rke2-canal-b9lvm 2/2 Running 0 91s
  26. kube-system rke2-canal-khwp2 2/2 Running 0 2m5s
  27. kube-system rke2-canal-swfmq 2/2 Running 0 105s
  28. kube-system rke2-coredns-rke2-coredns-547d5499cb-6tvwb 1/1 Running 0 92s
  29. kube-system rke2-coredns-rke2-coredns-547d5499cb-rdttj 1/1 Running 0 2m8s
  30. kube-system rke2-coredns-rke2-coredns-autoscaler-65c9bb465d-85sq5 1/1 Running 0 2m8s
  31. kube-system rke2-ingress-nginx-controller-69qxc 1/1 Running 0 52s
  32. kube-system rke2-ingress-nginx-controller-7hprp 1/1 Running 0 52s
  33. kube-system rke2-ingress-nginx-controller-x658h 1/1 Running 0 52s
  34. kube-system rke2-metrics-server-6564db4569-vdfkn 1/1 Running 0 66s

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