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 集群
成功启动和运行集群后,您可以使用kubectl和kubeconfig文件控制集群。