3、安装 Kubernetes 集群

提示

如果要使用 Docker 在单个节点上安装 Rancher,请跳过本节。

本节描述了如何根据 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。

在离线环境中安装 Kubernetes 集群的步骤会根据是在 RKE 上安装 Rancher 还是在 K3s 上安装 Rancher 有所不同。

安装 K3s 集群

先决条件

  • 已经在离线环境中创建了节点
  • 已经部署了 Docker 私有镜像仓库

1、准备镜像目录

  1. 版本发布页面获取要运行的 K3s 版本的镜像tar文件。
提示

国内用户,可以导航到 http://mirror.cnrancher.com 下载所需资源

  1. 在每个节点上启动 K3s 之前,将这个tar文件放在 images 目录中,例如:
  1. sudo mkdir -p /var/lib/rancher/k3s/agent/images/
  2. sudo cp ./k3s-airgap-images-$ARCH.tar /var/lib/rancher/k3s/agent/images/

2、创建镜像库 YAML

/etc/rancher/k3s/registries.yaml创建registries.yaml文件。这将告诉 K3s 如何连接到您的私有镜像仓库。

下面是一个registries.yaml文件的示例:

  1. ---
  2. mirrors:
  3. customreg:
  4. endpoint:
  5. - "https://ip-to-server:5000"
  6. configs:
  7. customreg:
  8. auth:
  9. username: xxxxxx # 镜像仓库用户名
  10. password: xxxxxx # 镜像仓库密码
  11. tls:
  12. cert_file: <镜像仓库所用的客户端证书文件路径>
  13. key_file: <镜像仓库所用的客户端密钥文件路径>
  14. ca_file: <镜像仓库所用的ca文件路径>

请注意,目前,K3s 仅支持安全的镜像仓库(HTTPS)。

有关 K3s 的私有镜像仓库配置文件的更多信息,请参考K3s 文档

3、安装 K3s 集群

Rancher 需要安装在支持的 Kubernetes 版本上。要了解你的 Rancher 版本支持哪些 Kubernetes 版本,请参考这里

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

  1. 版本发布页面获取 K3s 二进制文件,找到与版本对应的镜像tar文件包,并通过 https://get.k3s.io 获取 K3s 安装脚本。
提示

国内用户,可以导航到 http://mirror.cnrancher.com 下载所需资源

  1. 将二进制文件放在每个节点上的/usr/local/bin中。

  2. 将安装脚本放置在每个节点上的任何位置,并将其命名为install.sh

  3. 请根据您的准备好的数据库,替换以下命令中的数据库连接字符串,并在准备好的两台 Linux 节点中运行命令来安装 K3s:

  1. INSTALL_K3S_SKIP_DOWNLOAD=true INSTALL_K3S_EXEC='server --datastore-endpoint="mysql://username:password@tcp(hostname:3306)/database-name"' ./install.sh

注意: K3s 还为 kubelet 提供了一个--resolv-conf 参数,这可能有助于在离线环境中配置 DNS。

4、保存并使用 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
注意

如果需要在本地通过 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文件访问集群的部分。

升级提示

可以通过以下方式完成离线环境的升级:

  • 版本发布页面下载要升级的 K3s 版本的新镜像包(tar文件)。将tar包放在每个节点上的/var/lib/rancher/k3s/agent/images/目录中。删除旧的 tar 文件。
提示

国内用户,可以导航到 http://mirror.cnrancher.com 下载资源

  • 复制并替换每个节点上/usr/local/bin中的旧的 K3s 二进制文件。因为自上一发行以来,脚本可能已更改,单击这里获取新的二进制文件。与过去一样,使用相同的环境变量再次运行脚本。
  • 重新启动 K3s 服务(如果安装程序未自动重启 K3s)。

安装 RKE 集群

先决条件

  • 已安装 RKE
  • 已创建 RKE 配置文件

1、安装 RKE

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

2、创建 RKE 配置文件

在可以访问 Linux 节点上的 22 / tcp 端口和 6443 / tcp 端口的系统上,使用以下示例创建一个名为rancher-cluster.yml的新文件。

该文件是 RKE 配置文件,其中包括了您将要部署的集群的配置。

使用您创建的3 个节点的 IP 地址或 DNS 名称,替换下面的代码示例中的值。

提示:有关可用选项的更多详细信息,请参见 RKE 配置选项

RKE 选项

选项是否必选描述
address离线环境中节点的 DNS 或 IP
user可以在节点上执行 docker 命令的用户
role想要给节点分配的一个或多个 Kubernetes 角色
internal_address1离线环境中节点的内部 DNS 或内网 IP
ssh_key_path用来登录节点的 SSH 私钥文件路径(默认值为~/.ssh/id_rsa

1 如果您想使用自引用安全组或防火墙,某些服务(如 AWS EC2)需要设置`internal_address`。

  1. nodes:
  2. - address: 10.10.3.187 # 离线环境节点 IP
  3. internal_address: 172.31.7.22 # 节点内网 IP
  4. user: rancher
  5. role: ["controlplane", "etcd", "worker"]
  6. ssh_key_path: /home/user/.ssh/id_rsa
  7. - address: 10.10.3.254 # 离线环境节点 IP
  8. internal_address: 172.31.13.132 # 节点内网 IP
  9. user: rancher
  10. role: ["controlplane", "etcd", "worker"]
  11. ssh_key_path: /home/user/.ssh/id_rsa
  12. - address: 10.10.3.89 # 离线环境节点 IP
  13. internal_address: 172.31.3.216 # 节点内网 IP
  14. user: rancher
  15. role: ["controlplane", "etcd", "worker"]
  16. ssh_key_path: /home/user/.ssh/id_rsa
  17. private_registries:
  18. - url: <REGISTRY.YOURDOMAIN.COM:PORT> # 私有镜像库地址
  19. user: rancher
  20. password: "*********"
  21. is_default: true

3、执行 RKE

配置完rancher-cluster.yml之后,启动您的 Kubernetes 集群:

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

4、保存您的文件

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

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

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

问题排查

请查看问题排查页面,获取常见问题和解决方法。

后续操作

安装 Rancher