使用 RKE2 安装 Kubernetes

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

    这些说明假定你已经设置了三个节点、一个负载均衡器和一个 DNS record.

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

    Rancher 需要安装在支持的 Kubernetes 版本上。要想知道你的 Rancher 版本支持哪些版本的 Kubernetes,请参考。要想指定 RKE2 版本,在运行 RKE2 安装脚本时使用 环境变量。

    RKE2 服务器使用嵌入式 etcd 运行,所以你不需要设置外部数据存储就可以在 HA 模式下运行。

    在第一个节点上,你应该用你自己的预共享密钥作为令牌来设置配置文件。令牌参数可以在启动时设置。

    如果你没有指定预共享密钥,RKE2 将生成一个预共享密钥并将其放在/var/lib/rancher/rke2/server/node-token 中。

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

    首先,你需要创建要存放 RKE2 配置文件的目录:

    Copy

    接下来,使用以下示例在 /etc/rancher/rke2/config.yaml 中创建 RKE2 配置文件:

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

    Copy

    1. curl -sfL https://get.rke2.io | INSTALL_RKE2_CHANNEL=v1.20 sh -
    2. systemctl enable rke2-server.service
    3. systemctl start rke2-server.service

    Copy

    提示

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

    1. curl -sfL http://rancher-mirror.rancher.cn/rke2/install.sh | INSTALL_RKE2_MIRROR=cn INSTALL_RKE2_CHANNEL=v1.20 sh -

    Copy

    1. 要加入其余的节点,你需要用相同的共享令牌或自动生成的令牌来配置每个额外的节点。下面是一个配置文件的例子:

    Copy

    之后,你需要运行安装程序并启用,然后启动 RKE2:

    1. curl -sfL https://get.rke2.io | sh -
    2. systemctl enable rke2-server.service
    3. systemctl start rke2-server.service

    Copy

    提示

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

    1. curl -sfL http://rancher-mirror.rancher.cn/rke2/install.sh | INSTALL_RKE2_MIRROR=cn sh -

    Copy

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

    一旦你在所有服务器节点上启动了 rke2 服务器进程,确保集群已经正常启动,请运行以下命令:

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

    Copy

    你应该看到你的服务器节点处于就绪状态。然后测试集群 Pod 的健康状况。

    Copy

    当你在每个 Rancher 服务器节点上安装 RKE2 时,在节点上创建了一个kubeconfig文件,地址是/etc/rancher/rke2/rke2.yaml。这个文件包含了完全访问集群的凭证,你应该把这个文件保存在一个安全的地方。

    要使用这个kubeconfig文件,请参考以下步骤:

    1. 安装[kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/#install-kubectl)。
    2. 复制/etc/rancher/rke2/rke2.yaml的文件,并保存到本地机器上的~/.kube/config目录。
    3. 在 kubeconfig 文件中,server指令被定义为 localhost。将该服务器配置为你的负载平衡器的 DNS,参考端口 6443。(Kubernetes API 服务器将在 6443 端口到达,而 Rancher 服务器将在 80 和 443 端口到达)。下面是一个rke2.yaml的例子:
    1. apiVersion: v1
    2. clusters:
    3. - cluster:
    4. server: [LOAD-BALANCER-DNS]:6443 # 请编辑此行
    5. name: default
    6. - context:
    7. cluster: default
    8. user: default
    9. name: default
    10. current-context: default
    11. kind: Config
    12. preferences: {}
    13. users:
    14. - name: default
    15. user:
    16. password: [PASSWORD]
    17. username: admin

    Copy

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

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

    Copy

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

    现在你已经设置了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 etcd-ip-172-31-18-145 1/1 Running 0 4m37s
    4. kube-system etcd-ip-172-31-25-73 1/1 Running 0 20m
    5. kube-system etcd-ip-172-31-31-210 1/1 Running 0 9m12s
    6. kube-system helm-install-rke2-canal-th9k9 0/1 Completed 0 21m
    7. kube-system helm-install-rke2-ingress-nginx-vztsd 0/1 Completed 0 21m
    8. kube-system helm-install-rke2-kube-proxy-6std5 0/1 Completed 0 21m
    9. kube-system helm-install-rke2-metrics-server-9sl7m 0/1 Completed 0 21m
    10. kube-system kube-apiserver-ip-172-31-18-145 1/1 Running 0 4m22s
    11. kube-system kube-apiserver-ip-172-31-25-73 1/1 Running 0 20m
    12. kube-system kube-apiserver-ip-172-31-31-210 1/1 Running 0 9m8s
    13. kube-system kube-controller-manager-ip-172-31-18-145 1/1 Running 0 4m8s
    14. kube-system kube-controller-manager-ip-172-31-25-73 1/1 Running 0 21m
    15. kube-system kube-controller-manager-ip-172-31-31-210 1/1 Running 0 8m55s
    16. kube-system kube-proxy-57twm 1/1 Running 0 10m
    17. kube-system kube-proxy-f7pc6 1/1 Running 0 5m24s
    18. kube-system kube-proxy-rj4t5 1/1 Running 0 21m
    19. kube-system kube-scheduler-ip-172-31-18-145 1/1 Running 0 4m15s
    20. kube-system kube-scheduler-ip-172-31-25-73 1/1 Running 0 21m
    21. kube-system kube-scheduler-ip-172-31-31-210 1/1 Running 0 8m48s
    22. kube-system rke2-canal-4x972 2/2 Running 0 10m
    23. kube-system rke2-canal-flh8m 2/2 Running 0 5m24s
    24. kube-system rke2-canal-zfhkr 2/2 Running 0 21m
    25. kube-system rke2-coredns-rke2-coredns-6cd96645d6-cmstq 1/1 Running 0 21m
    26. kube-system rke2-ingress-nginx-controller-54946dd48f-6mp76 1/1 Running 0 20m
    27. kube-system rke2-ingress-nginx-default-backend-5795954f8-p92xx 1/1 Running 0 20m

    Copy

    结果:你已经确认可以用kubectl访问集群,并且 RKE2 集群已经成功运行。现在可以在集群上安装 Rancher 管理服务器了。

    目前,RKE2 将 nginx-ingress 作为一个部署,这可能会影响 Rancher 的部署,所以你不能使用所有的服务器来代理请求到 Rancher pods。

    为了纠正这个问题,在任何一个服务器节点的 中放置以下文件。