本节描述了如何根据我们的 Rancher Server 环境的最佳实践来安装 Kubernetes 集群。该集群应专用于运行 Rancher Server。

对于 v2.4 之前的 Rancher,Rancher 应该安装在 RKE(Rancher Kubernetes Engine)Kubernetes 集群上。RKE 是经过 CNCF 认证的 Kubernetes 发行版,并且全部组件完全在 Docker 容器内运行。

从 Rancher v2.4 开始,Rancher Server 可以安装在 RKE Kubernetes 集群或 K3s Kubernetes 集群上。K3s 也是 Rancher 发布的经过完全认证的 Kubernetes 发行版,但比 RKE 更新。我们建议在 K3s 上安装 Rancher,因为 K3s 易于使用且更轻量,全部组件都打包在了一个二进制文件里。并且这个二进制文件小于 100 MB。注意:如果在 RKE 集群上安装了 Rancher 之后,目前没有办法将这个高可用迁移到 K3s 集群上。

Rancher Server 只能在使用 RKE 或 K3s 安装的 Kubernetes 集群中运行。不支持在托管的 Kubernetes 集群(例如 EKS)上使用 Rancher。

对于无法直接访问 Internet 的系统,请参阅 Rancher 离线安装指南

单节点 Kubernetes 集群安装提示:

在单节点 Kubernetes 集群中,Rancher Server 不具有高可用性,但高可用性这对于在生产环境中运行 Rancher 至关重要。如果要在短期内通过使用单个节点来节省资源,同时保留高可用性迁移路径,则在单节点 Kubernetes 集群上安装 Rancher 可能会很有用。

要创建单节点 RKE 集群,只需在cluster.yml中配置一个节点。这个节点应该具有所有三个角色:etcdcontrolplaneworker

要创建单节点 K3s 集群,只需在一个节点上运行安装命令即可,并不需要像高可用集群一样在两个节点上安装。

配置完单节点的 Kubernetes 集群后,就可以像在其他高可用集群上安装一样,使用 Helm 安装 Rancher。

安装 Kubernetes

创建 Kubernetes 集群的步骤,根据是使用 RKE 还是使用 K3s 而不同。请选择一种适合您的方式安装 Kubernetes。

安装 K3s 集群

1、安装 Kubernetes 并配置 K3s Server

运行启动 K3s Kubernetes API Server 的命令时,您需要传入先前设置的外部数据库参数。

  1. 连接到您准备运行 Rancher Server 的 Linux 节点之一。

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

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

    注意:您也可以通过环境变量$K3S_DATASTORE_ENDPOINT来配置数据库端点。

:::note 提示 国内用户,可以使用以下方法加速安装:

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

:::

  1. 在您的另外一台 Linux 节点上执行同样的操作。

2、确认 K3s 是否创建成功

要确认已成功设置 K3s,请在任一 K3s Server 节点上运行以下命令:

  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

然后测试集群容器的运行状况:

  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。您需要手动更改这个地址为负载均衡器的 DNS,并且指定端口 6443。(Kubernetes API Server 的端口为 6443,Rancher Server 的端口为 80 和 443。)以下是一个示例k3s.yaml

:::important 注意 如果需要在本地通过 kubectl 访问这个 K3s 集群,请确保在您的负载均衡器中配置将6443端口的流量也转发到这两个节点上。 :::

  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 Server 了。

安装 RKE 集群

1、安装需要的 CLI 工具

安装 Kubernetes 命令行工具 kubectl

另外,安装RKE,Rancher Kubernetes Engine,一种 Kubernetes 分发版和命令行工具。

请按照RKE 文档中的说明安装 RKE。

2、创建 RKE 配置文件

在本节中,您将创建一个名为rancher-cluster.yml的 Kubernetes 集群配置文件。在后续步骤中,当使用 RKE 命令设置集群时,它将使用此文件在节点上安装 Kubernetes。

使用下面的示例,创建rancher-cluster.yml文件。将nodes列表中的 IP 地址替换为您创建的 3 个节点的 IP 地址或 DNS 名称。

如果您的节点具有公共和内部地址,建议设置internal_address:这样 Kubernetes 会将其用于集群内通信。某些服务(例如 AWS EC2)在使用自引用安全组或防火墙时需要设置internal_address:

RKE 需要通过 SSH 连接到每个节点,并且它将在默认位置~/.ssh/id_rsa中寻找私钥。如果您的默认私钥与节点的私钥不在同一个位置,则还需要为该节点配置ssh_key_path选项。

  1. nodes:
  2. - address: 165.227.114.63
  3. internal_address: 172.16.22.12
  4. user: ubuntu
  5. role: [controlplane, worker, etcd]
  6. - address: 165.227.116.167
  7. internal_address: 172.16.32.37
  8. user: ubuntu
  9. role: [controlplane, worker, etcd]
  10. - address: 165.227.127.226
  11. internal_address: 172.16.42.73
  12. user: ubuntu
  13. role: [controlplane, worker, etcd]
  14. services:
  15. etcd:
  16. snapshot: true
  17. creation: 6h
  18. retention: 24h
  19. # 当使用外部 TLS 终止,并且使用 ingress-nginx v0.22或以上版本时,必须。
  20. ingress:
  21. provider: nginx
  22. options:
  23. use-forwarded-headers: "true"

常用 RKE 节点选项

选项必填描述
address公用 DNS 或 IP 地址
user可以运行 docker 命令的用户
role分配给节点的 Kubernetes 角色列表
internal_address内部集群流量的专用 DNS 或 IP 地址
ssh_key_path用于对节点进行身份验证的 SSH 私钥的路径(默认为~/.ssh/id_rsa

高级配置: RKE 有许多配置选项可用于在您的特定环境中进行自定义安装。

请参阅RKE 文档来了解 RKE 的选项和功能的完整列表。

要为大规模 Rancher 安装 etcd 集群,请参阅etcd 设置指南

3、运行 RKE

  1. rke up --config ./rancher-cluster.yml

完成后,它应该以这样一行结束: Finished building Kubernetes cluster successfully.

4、测试集群

本节介绍如何在您的工作区进行设置,以便您可以在本地使用kubectl命令行工具与此集群进行交互。

如果您已经安装了kubectl,您需要将kubeconfig文件放置在kubectl可以访问的位置。kubeconfig文件包含使用kubectl访问集群所必需的凭证。

当您运行 rke up 时,RKE 应该已经创建了一个名为kube_config_rancher-cluster.ymlkubeconfig文件。该文件具有kubectlhelm的凭据。

注意: 如果您使用了与rancher-cluster.yml不同的文件名,则 kubeconfig 文件将命名为kube_config_<FILE_NAME>.yml

您可以将此文件复制到$HOME/.kube/config,或者如果您使用多个 Kubernetes 集群,请将KUBECONFIG环境变量设置为kube_config_rancher-cluster.yml的路径:

  1. export KUBECONFIG=$(pwd)/kube_config_rancher-cluster.yml

使用kubectl测试您的连通性,并查看您的所有节点是否都处于Ready状态:

  1. kubectl get nodes
  2. NAME STATUS ROLES AGE VERSION
  3. 165.227.114.63 Ready controlplane,etcd,worker 11m v1.13.5
  4. 165.227.116.167 Ready controlplane,etcd,worker 11m v1.13.5
  5. 165.227.127.226 Ready controlplane,etcd,worker 11m v1.13.5

5、检查集群 Pod 的运行状况

检查所有必需的 Pod 和容器是否状况良好,然后可以继续进行。

  • Pod 是RunningCompleted状态。
  • STATUSRunning 的 Pod,READY 应该显示所有容器正在运行 (例如,3/3)。
  • STATUSCompleted的 Pod 是一次运行的作业。对于这些 Pod,READY应为0/1
  1. kubectl get pods --all-namespaces
  2. NAMESPACE NAME READY STATUS RESTARTS AGE
  3. ingress-nginx nginx-ingress-controller-tnsn4 1/1 Running 0 30s
  4. ingress-nginx nginx-ingress-controller-tw2ht 1/1 Running 0 30s
  5. ingress-nginx nginx-ingress-controller-v874b 1/1 Running 0 30s
  6. kube-system canal-jp4hz 3/3 Running 0 30s
  7. kube-system canal-z2hg8 3/3 Running 0 30s
  8. kube-system canal-z6kpw 3/3 Running 0 30s
  9. kube-system kube-dns-7588d5b5f5-sf4vh 3/3 Running 0 30s
  10. kube-system kube-dns-autoscaler-5db9bbb766-jz2k6 1/1 Running 0 30s
  11. kube-system metrics-server-97bc649d5-4rl2q 1/1 Running 0 30s
  12. kube-system rke-ingress-controller-deploy-job-bhzgm 0/1 Completed 0 30s
  13. kube-system rke-kubedns-addon-deploy-job-gl7t4 0/1 Completed 0 30s
  14. kube-system rke-metrics-addon-deploy-job-7ljkc 0/1 Completed 0 30s
  15. kube-system rke-network-plugin-deploy-job-6pbgj 0/1 Completed 0 30s

这确认您已经成功安装了可以运行 Rancher Server 的 Kubernetes 集群。

6、保存文件

:::important 重要 需要用以下文件来进行集群维护,集群升级和故障排查。 :::

将以下文件的副本保存在安全的位置:

  • rancher-cluster.yml: RKE 集群配置文件。
  • kube_config_rancher-cluster.yml: 集群的Kubeconfig 文件,此文件包含用于访问集群的凭据。
  • rancher-cluster.rkestate: Kubernetes 集群状态文件,此文件包含用于完全访问集群的凭据。

    Kubernetes 集群状态文件仅在使用 RKE v0.2.0 或更高版本时创建。

注意: 后两个文件名的“rancher-cluster”部分取决于您如何命名 RKE 集群的配置文件。

遇到问题或错误?

请参阅故障排查页面。

下一步:安装 Rancher