RKE 集群研究记录

RKE 产品简介

Rancher Kubernetes Engine,简称 RKE,是一个经过CNCF认证的 Kubernetes 安装程序。RKE 支持多种操作系统,包括 MacOS、Linux 和 Windows,可以在裸金属服务器(BMS)和虚拟服务器(Virtualized Server)上运行。

市面上的其他 Kubernetes 部署工具存在一个共性问题:在使用工具之前需要满足的先决条件比较多,例如,在使用工具前需要完成安装 kubelet、配置网络等一系列的繁琐操作。而 RKE 简化了部署 Kubernetes 集群的过程,只有一个先决条件:只要您使用的 Docker 是 RKE 支持的版本,就可以通过 RKE 安装 Kubernetes,部署和运行 Kubernetes 集群。

RKE 既可以单独使用,作为创建 Kubernetes 集群的工具,也可以配合 Rancher2.x 使用,作为 Rancher2.x 的组件,在 Rancher 中部署和运行 Kubernetes 集群。

安装要求

操作系统要求

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

  • SSH 用户 - 使用 SSH 访问节点的用户必须是节点上docker用户组的成员。请运行以下命令,把使用 SSH 的用户添加到docker用户组里面。
usermod -aG docker <user_name>

说明:
添加到docker用户组的用户会自动获得主机的 root 权限,运行上述命令前,请确认您是否想让该用户获得 root 权限。运行命令后,请妥善保存该用户的认证凭据。
如果您无法切换到 root 用户,不能运行上述命令将用户添加到docker用户组,请参考 Docker 官方文档(https://docs.docker.com/install/linux/linux-postinstall/#manage-docker-as-a-non-root-user ),该文档提供了以非 root 用户的身份管理 Docker 的操作步骤。

  • 禁用所有 woker 节点上的交换功能(Swap)

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

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

    • Calico
    • Flannel
    • Canal (Combination Calico and Flannel)
    • Weave

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

软件要求

OpenSSH

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

Kubernetes

请参考RKE 版本说明(https://github.com/rancher/rke/releases) ,获取每个版本的 RKE 支持的 Kubernetes 版本。

Docker

每一个 Kubernetes 版本支持的 Docker 版本都不同,详情请参考,Kubernetes 的版本说明(https://kubernetes.io/docs/setup/release/notes/#dependencies)。

硬件

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

大型 Kubernetes 集群

对于大型 Kubernetes 集群的硬件建议,请参考 Kubernetes 官方文档(https://www.cnblogs.com/varden/p/15020295.html)构建大型集群。

Etcd 集群

生产环境中 etcd 集群的硬件推荐,参考官方 etcd 文档(https://www.cnblogs.com/varden/p/15020328.html)。

端口要求

使用 iptables 打开 TCP/6443 端口

# Open TCP/6443 for all
iptables -A INPUT -p tcp --dport 6443 -j ACCEPT

# Open TCP/6443 for one specific IP
iptables -A INPUT -p tcp -s your_ip_here --dport 6443 -j ACCEPT

使用 firewalld 打开 TCP/6443 端口

# Open TCP/6443 for all
firewall-cmd --zone=public --add-port=6443/tcp --permanent
firewall-cmd --reload

# Open TCP/6443 for one specific IP
firewall-cmd --permanent --zone=public --add-rich-rule='
  rule family="ipv4"
  source address="your_ip_here/32"
  port protocol="tcp" port="6443" accept'
firewall-cmd --reload

SSH Server 配置

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

AllowTcpForwarding yes

安装介绍

1.下载 RKE 二进制安装包

https://github.com/rancher/rke/releases

Linux 用户请运行以下命令:

mv rke_linux-amd64 /usr/local/bin/rke
chmod +x /usr/local/bin/rke
rke --version

2.为 Kubernetes 集群准备节点

Kubernetes 集群组件需要在 Linux 发行版上的 Docker 中运行,只要是能安装和运行 Docker 的 Linux 发行版,您都可以使用。请参考本博客操作系统要求,正确地配置每一个节点。

3. 创建集群配置文件

RKE 使用集群配置文件cluster.yml规划集群中的节点,例如集群中应该包含哪些节点,如何部署 Kubernetes。您可以通过该文件修改很多集群配置选项。

创建集群配置文件cluster.yml的方式有两种:

  • 使用 minimal cluster.yml 创建集群配置文件,然后将您使用的节点的相关信息添加到文件中。
nodes:
  - address: 1.2.3.4
    user: ubuntu
    role:
      - controlplane
      - etcd
      - worker
  • 使用rke config命令创建集群配置文件,然后将集群参数逐个输入到该文件中。

使用rke config

rke config --name cluster.yml  # 在当前路径下创建 cluster.yml文件,这条命令会引导您输入创建集群所需的所有参数。
rke config --empty --name cluster.yml  # 创建一个空白的集群配置文件
rke config --print  # 将cluster.yml文件的内容显示出来

高可用集群

RKE 适配了高可用集群,您可以在cluster.yml文件中配置多个controlplane节点。RKE 会把 master 节点的组件部署在所有被列为controlplane的节点上,同时把 kubelets 的默认连接地址配置为127.0.0.1:6443。这个地址是nginx-proxy请求所有 master 节点的地址。

创建高可用集群需要指定两个或更多的节点作为controlplane。

证书

默认情况下,Kubernetes 集群需要用到证书,而 RKE 会自动为所有集群组件生成证书。您也可以使用自定义证书。部署集群后,您可以管理这些自动生成的证书,详情请参考管理自动生成的证书。

4. 使用 RKE 部署 Kubernetes 集群

rke up  # 这条命令默认cluster.yml已经保存在了您运行命令所处的路径下。

运行该命令后,返回的最后一行信息应该是Finished building Kubernetes cluster successfully,表示成功部署集群,可以开始使用集群。在创建 Kubernetes 集群的过程中,会创建一个kubeconfig 文件,它的文件名称是 kube_config_cluster.yml,您可以使用它控制 Kubernetes 集群。

说明:
如果您之前使用的集群配置文件名称不是cluster.yml,那么这里生成的 kube_config 文件的名称也会随之变化为kube_config_<FILE_NAME>.yml

5. 保存文件(重要)

重要:请保存下文中列出来的所有文件,这些文件可以用于维护集群,排查问题和升级集群

请将这些文件复制并保存到安全的位置:

  • cluster.yml:RKE 集群的配置文件。
  • kube_config_cluster.yml:该集群的Kubeconfig 文件包含了获取该集群所有权限的认证凭据。
  • cluster.rkestate:Kubernetes 集群状态文件,包含了获取该集群所有权限的认证凭据,使用 RKE v0.2.0 时才会创建这个文件。

说明:kube_config_cluster.yml和cluster.rkestate两个文件的名称取决于您如何命名 RKE 集群配置文件,如果您修改的集群配置文件的名称,那么后两个文件的名称可能会跟上面列出来的文件名称不一样。

Kubernetes 集群状态文件

v0.2.0 以及更新版本的 RKE 会在保存集群配置文件 cluster.yml的路径下创建一个.rkestate文件。该文件包含当前集群的状态、RKE 配置信息和证书信息。请妥善保存该文件的副本。

6. 操作 Kubernetes 集群

成功启动和运行集群后,您可以使用kubectlkubeconfig文件控制集群。

posted @ 2022-03-10 11:01  Varden  阅读(286)  评论(0编辑  收藏  举报