title: 安装要求 description: 本文讲述了 RKE 对操作系统、软件、端口和 SSH 配置的要求,安装 RKE 前,请检查您的节点是否满足这些要求。 keywords:

  • rancher
  • rancher中文
  • rancher中文文档
  • rancher官网
  • rancher文档
  • Rancher
  • rancher 中文
  • rancher 中文文档
  • rancher cn
  • RKE
  • 安装要求

概述

本文讲述了 RKE 对操作系统、软件、端口和 SSH 配置的要求,安装 RKE 前,请检查您的节点是否满足这些要求。

操作系统要求

总体

RKE 可以在大多数已安装 Docker 的 Linux 操作系统上运行。RKE 的开发和测试过程是在 Ubuntu 16.04 上完成的。然而,其他操作系统对 RKE 有限制或要求。

  • SSH 用户 - 使用 SSH 访问节点的用户必须是节点上docker用户组的成员。请运行以下命令,把使用 SSH 的用户添加到docker用户组里面。注意,您需要将<user_name>占位符替换为真实的用户名称。例如,您的用户是example_user1,则最终输入的命令为usermod -aG docker example_user1。除了可以将自己添加到用户组里面,您也可以运行以下命令,将其他用户添加到用户组中,只要将<user_name>替换为其他用户的用户名即可。

    1. usermod -aG docker <user_name>

说明:

  • 添加到docker用户组的用户会自动获得主机的 root 权限,运行上述命令前,请确认您是否想让该用户获得 root 权限。运行命令后,请妥善保存该用户的认证凭据。
  • 如果您无法切换到 root 用户,不能运行上述命令将用户添加到docker用户组,请参考Docker 官方文档,该文档提供了以非 root 用户的身份管理 Docker 的操作步骤。
  • 禁用所有 woker 节点上的交换功能(Swap)

  • 运行以下命令,修改 sysctl 配置:

    1. net.bridge.bridge-nf-call-iptables=1
  • 请查看网络插件文件,了解任何额外的要求(例如,内核模块)。

:::note 说明 如果你或你的云提供商使用自定义的最小内核,一些必要的(网络)内核模块可能不存在。 :::

SUSE Linux Enterprise Server (SLES) / openSUSE

如果您使用的是 SUSE Linux Enterprise Server 或 openSUSE,请遵循以下说明。

使用的 Docker

如果你使用的是上游的 Docker,包名是docker-cedocker-ee。你可以通过执行以下命令来检查安装的软件包。

  1. rpm -q docker-ce

使用上游 Docker 包时,请按照以非 root 用户身份管理 Docker

使用 SUSE/openSUSE 打包的 Docker

如果你使用的是 SUSE/openSUSE 提供的 Docker 包,包名是docker。你可以通过执行以下命令来检查安装的软件包。

  1. rpm -q docker

为 docker 添加软件仓库

在 SUSE Linux Enterprise Server 15 SP2 中,docker 位于 Containers 模块中。 在安装 docker 之前,需要添加该模块。

要列出可用的模块,您可以运行 SUSEConnect 来列出扩展和激活命令。

  1. node:~ # SUSEConnect --list-extensions
  2. AVAILABLE EXTENSIONS AND MODULES
  3. Basesystem Module 15 SP2 x86_64 (Activated)
  4. Deactivate with: SUSEConnect -d -p sle-module-basesystem/15.2/x86_64
  5. Containers Module 15 SP2 x86_64
  6. Activate with: SUSEConnect -p sle-module-containers/15.2/x86_64

运行这个 SUSEConnect 命令来激活 Containers 模块。

  1. node:~ # SUSEConnect -p sle-module-containers/15.2/x86_64
  2. Registering system to registration proxy https://rmt.seader.us
  3. Updating system details on https://rmt.seader.us ...
  4. Activating sle-module-containers 15.2 x86_64 ...
  5. -> Adding service to system ...
  6. -> Installing release package ...
  7. Successfully registered system

为了用你的用户运行 docker cli 命令,那么你需要将这个用户添加到docker组中。 最好不要使用 root 用户。

  1. usermod -aG docker <user_name>

要验证用户是否正确配置,退出节点,使用 SSH 或其他方法登录,并执行docker ps

  1. ssh user@node
  2. user@node:~> docker ps
  3. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  4. user@node:~>

openSUSE MicroOS/Kubic (Atomic)

请参考 openSUSE MicroOS 和 Kubic 的项目页面进行安装。

openSUSE MicroOS

openSUSE MicroOS 专为托管容器工作负载而设计,具有自动管理和补丁功能。安装 openSUSE MicroOS,您将获得一个快速、小型的环境,用于部署容器,或任何其他受益于事务性更新的工作负载。作为滚动发行版,软件始终是最新的。 https://microos.opensuse.org

openSUSE Kubic

基于 openSUSE MicroOS,设计时考虑到了同样的事情,但专注于成为一个认证的 Kubernetes 发行版。 https://kubic.opensuse.org
安装说明。 https://kubic.opensuse.org/blog/2021-02-08-MicroOS-Kubic-Rancher-RKE/

RHEL、OEL 或 CentOS

因为 Red Hat Enterprise Linux(RHEL)、Oracle Enterprise Linux (OEL)和 CentOS 存在漏洞Bugzilla 1527565,所以它们不允许用户使用root作为SSH 用户。请根据你在节点上安装 Docker 的方式,按照以下说明正确设置 Docker:

注意:在 RHEL 8.4 中,NetworkManager 中包含两个额外的服务:nm-cloud-setup.servicenm-cloud-setup.timer。这些服务增加了一个路由表,干扰了 CNI 插件的配置。如果这些服务被启用,你必须使用下面的命令禁用它们,然后重新启动节点以恢复连接。

  1. systemctl disable nm-cloud-setup.service nm-cloud-setup.timer
  2. reboot

使用 upstream Docker

如果您使用的是 upstream Docker,Docker 的二进制安装包名字应该是docker-cedocker-ee,您需要输入以下命令,查询 Docker 安装包的名称。

  1. rpm -q docker-ce
  2. `

如果第一条命令的返回结果显示没有这个安装包,则表示安装包的名称可能是docker-ee,请输入以下命令确认安装包名称:

  1. rpm -q docker-ee

输入上述命令后,如果您使用的确实是docker-cedocker-ee,命令行工具会询问您是否安装,请选择不安装。因为在这个步骤中,我们只是在借用rpm -q确认安装包的名称,以确认其来源。 确认安装包的来源是 uptream Docker 后,请参考Docker 官方文档,该文档提供了以非 root 用户的身份管理 Docker 的操作步骤。

Using RHEL/CentOS packaged Docker

如果您使用的是 Red Hat 或 CentOS 提供的 Docker 二进制安装包,则安装包的名字应该是docker,您需要输入以下命令,查询 Docker 安装包的名称。输入上述命令后,如果您使用的确实是docker,命令行工具会询问您是否安装,请选择不安装。因为在这个步骤中,我们只是在借用rpm -q确认安装包的名称,以确认其来源。

  1. rpm -q docker

来源于 Red Hat 或 CentOS 的安装包会自动将dockerroot 添加到系统内。您需要创建/etc/docker/daemon.json文件,然后将下文代码示例中的键值添加到 JSON 文件中,创建一个名为dockerroot的用户组。

  1. {
  2. "group": "dockerroot"
  3. }

创建和编辑文件后,请重启 Docker。重启后,您可以打开/var/run/docker.sock,检查用户组权限。此时返回的信息显示已经创建 dockerroot用户组,该用户组有读写权限:

  1. srw-rw----. 1 root dockerroot 0 Jul 4 09:57 /var/run/docker.sock

运行以下命令,将 SSH 用户添加到dockerroot用户组中。注意,您需要将<user_name>占位符替换为真实的用户名称。例如,您的用户是example_user1,则最终输入的命令为usermod -aG docker example_user1。除了可以将自己添加到用户组里面,您也可以运行以下命令,将其他用户添加到用户组中,只要将<user_name>替换为其他用户的用户名即可。

  1. usermod -aG dockerroot <user_name>

完成添加后,您需要登出该节点,然后使用 SSH 用户的认证信息登录该节点,执行docker ps,应该返回如下信息:

  1. ssh <user_name>@node
  2. $ docker ps
  3. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

Red Hat Atomic

使用 Red Hat Atomic 节点运行 RKE 前,请完成以下两项升级。

升级 OpenSSH 版本

默认情况下,Atomic 使用的是 OpenSSH 6.4,该版本不支持 SSH 隧道协议(SSH tunneling),而 RKE 的其中一个核心需求就是 SSH 隧道协议,所以您需要将 OpenSSH 升级到 Atomic 支持的最新版,解决 SSH 隧道协议的问题。

创建 Docker 分组

Atomic 和 RHEL、CentOS 不同,没有内置的 Docker 分组,所以也就不像 RHEL 和 CentOS 那样,不可以通过编辑用户组权限、将用户添加到用户组等操作,批量分配用户权限。但是您可以运行以下命令,允许单个用户运行 RKE。如果您需要授权多个用户,请重复运行以下命令,将用户名替换成不同的用户名即可。

  1. chown <user> /var/run/docker.sock

完成权限分配后,您需要登出该节点,然后使用 SSH 用户的认证信息登录该节点,执行docker ps,应该返回如下信息:

  1. ssh <user_name>@node
  2. $ docker ps
  3. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

Flatcar Container Linux

当使用 Flatcar Container Linux 节点时,需要在集群配置文件中使用以下配置

Canal

  1. rancher_kubernetes_engine_config:
  2. network:
  3. plugin: canal
  4. options:
  5. canal_flex_volume_plugin_dir: /opt/kubernetes/kubelet-plugins/volume/exec/nodeagent~uds
  6. flannel_backend_type: vxlan
  7. services:
  8. kube-controller:
  9. extra_args:
  10. flex-volume-plugin-dir: /opt/kubernetes/kubelet-plugins/volume/exec/

Calico

  1. rancher_kubernetes_engine_config:
  2. network:
  3. plugin: calico
  4. options:
  5. calico_flex_volume_plugin_dir: /opt/kubernetes/kubelet-plugins/volume/exec/nodeagent~uds
  6. flannel_backend_type: vxlan
  7. services:
  8. kube-controller:
  9. extra_args:
  10. flex-volume-plugin-dir: /opt/kubernetes/kubelet-plugins/volume/exec/

Docker

还需要启用 Docker 服务,你可以使用以下命令启用 Docker 服务。

  1. systemctl enable docker.service

软件要求

本节描述了 RKE 对于 Docker、Kubernetes 和 SSH 的要求。

OpenSSH

为了可以通过 SSH 访问每一个节点,RKE 要求每个节点上安装的是 OpenSSH 的版本是OpenSSH 7.0+

Kubernetes

请参考RKE 版本说明 ,获取每个版本的 RKE 支持的 Kubernetes 版本。

Docker

每一个 Kubernetes 版本支持的 Docker 版本都不同,详情请参考,Kubernetes 的版本说明

安装 Docker

参考安装 Docker

检查 Docker 版本号

输入docker version --format '{{.Server.Version}}',检查支持特定版本 Kubernetes 的 Docker 是否已经成功安装到您的机器上。

硬件

本节描述了 worker 角色、大型 Kubernetes 集群和 etcd 集群的硬件要求。

关于 CPU 和内存,建议将 Kubernetes 集群的不同 plane(etcd、controlplane 和 worker)托管在不同的节点上,以便它们可以相互独立扩展。

大型 Kubernetes 集群

对于大型 Kubernetes 集群的硬件建议,请参考 Kubernetes 官方文档构建大型集群

Etcd 集群

生产环境中 etcd 集群的硬件推荐,参考官方 etcd 文档

端口要求

如果您使用的是外部防火墙,请确保在运行 RKE 的节点和创建集群的节点之间开放了 TCP/6443 端口。

使用 iptables 打开 TCP/6443 端口

运行以下命令,使用 iptables 打开 TCP/6443 端口。

  1. # Open TCP/6443 for all
  2. iptables -A INPUT -p tcp --dport 6443 -j ACCEPT
  3. # Open TCP/6443 for one specific IP
  4. iptables -A INPUT -p tcp -s your_ip_here --dport 6443 -j ACCEPT

使用 firewalld 打开 TCP/6443 端口

运行以下命令,使用 firewlld 打开 TCP/6443 端口。

  1. # Open TCP/6443 for all
  2. firewall-cmd --zone=public --add-port=6443/tcp --permanent
  3. firewall-cmd --reload
  4. # Open TCP/6443 for one specific IP
  5. firewall-cmd --permanent --zone=public --add-rich-rule='
  6. rule family="ipv4"
  7. source address="your_ip_here/32"
  8. port protocol="tcp" port="6443" accept'
  9. firewall-cmd --reload

SSH Server 配置

您的 SSH server 全系统配置文件,位于/etc/ssh/sshd_config,该文件必须包含以下代码,允许 TCP 转发。

  1. AllowTcpForwarding yes