使用Rancher快速搭建Kubernetes集群

最早在推动公司应用容器化过程一直使用内部的容器云平台,由于内部的容器云平台做了一层封装,对 Kubernetes 一些原生的功能开放性不足。近期准备调研 Service Mesh,需要一套干净的 Kubernetes 集群作为 POC 环境做测试,通过查找一些资料,最终选择了用 Rancher 来搭建 Kubernetes,花了半天就搭建完成了。现在搭建一套 Kubernetes 集群来测试学习还是挺方便的,这里做些记录分享,尽管这类型的内容比较容易过时,还是希望对读者有些帮助。

预备知识

Kubernetes组件

通过官方文档 Kubernetes Components 可以了解到1个 Kubernetes 集群通常用多个节点组成,这些节点主要分为两类:

  1. Control Plane 节点:Control Plane 节点包含许多组件,主要负责整个集群的决策,管理所有 Worker 节点,响应处理集群的事件等等。为了高可用一般都会部署多个 Control Plane 节点,并且相关的组件一般部署在同一台服务器上。
  2. Worker 节点:主要包含 kubelet 组件和 kube-proxy 组件,一般会有多个节点,kubelet 与 Control Plane 的 API server 交互,负责处理 Worker Node 的所有 Pod,而 kube-proxy 则负责该节点的网络规则,流量转发等。

以下是官方的架构概览图,可以通过官方文档详细了解。

image-20220209142312578

Rancher架构

Rancher 是在 Kubernetes 之上更加抽象的一个平台,它让企业更加方便地构建 Kubernetes 集群,用户可以通过 Rancher Kubernetes Engine (RKE) 以图形化的方式快速搭建多个 Kubernetes 集群,还可以结合云厂商的来创建集群等等。用户搭建一个 Rancher Server 就可以标准化地管理多个 Kubernetes 集群,这很大程度上节省了大量的运维成本。

Rancher Server 的部署方式可以分为两种:

  1. 集群部署:在生产环境推荐这种使用高可用集群方式部署,Rancher 管理着多个 Kubernetes 集群的,自身的可用性需要做好保障。使用集群部署的方式一般是在一个已有的 Kubernetes 集群上部署,建议这个 Kubernetes 集群专门用来部署 Rancher。
  2. 单节点部署:在开发测试环境资源有限的情况下,可以在一台安装有 Docker 环境的服务器上,快速搭建单节点的 Rancher,再通过 Rancher 管理多台服务器来创建 Kubernetes 集群。

先搭建 Rancher 后再搭建 Kubernetes,还是先搭建 Kubernetes 再搭建 Rancher?这个问题有点像“鸡生蛋还是蛋生鸡”,一开始我也有点困惑。但是如果在生产环境操作,就强烈建议先有一套专门的小 Kubernetes 集群来部署 Rancher。

以下是官方Rancher的架构图,可以结合官方文档熟悉了解。Rancher Server Architecture

image-20220209141942864

部署步骤

由于这里搭建 Kubernetes 集群主要是为了开发测试使用,固采用简单的单节点 Docker 的方式来部署 Rancher,Kubernetes 集群则采用3个节点集群的高可用方式来部署。

准备3台虚拟机

  • 10.0.0.1:计划安装单机版 Rancher,并作为 Kubernetes 集群的 Control Plane 节点
  • 10.0.0.2:作为 Kubernetes 集群的 Worker 节点
  • 10.0.0.3:作为 Kubernetes 集群的 Worker 节点

相关说明

  1. 以上3台机器均为8核16G,使用 CentOS 7 操作系统
  2. 注意必须禁用交换内存,注释 /etc/fstab 含 swap 关键字的行后重启机器即可
  3. 注意3台机器的 hostname 需要设置成不一样,修改 /etc/hostname 即可
  4. 更多前期准备可以参考 Installing kubeadm#Before you begin

安装Docker

目前使用 Docker 作为容器运行时,分别在3台机器上安装 Docker,安装过程非常简单,自行参照官方文档进行安装。Install Docker Engine

安装完毕后启动 Docker 并设置默认开机启动 Docker,执行以下命令:

1
2
systemctl start docker
systemctl enable docker

安装Rancher

参照官网文档 Installing Rancher on a Single Node Using Docker 的第一种方式,当然最好指定下版本号,如我使用 rancher/rancher:v2.5.12

1
2
3
docker run -d --name rancher --restart=unless-stopped \
-p 80:80 -p 443:443 \
rancher/rancher:v2.5.12

可以通过 docker logs -f rancher 查看标准输出日志,等待一段时间初始化完毕后就可以打开浏览器访问网页 http://10.0.0.1 。设置下admin密码后就可以开始使用 Rancher 管理端了。

创建 Kubertetes 集群

Rancher 创建 Kubernetes 集群也非常多傻瓜式,这里不重复细节,依据官方文档设置来即可。Rancher Manual Quick Start

image-20220209174214150

勾选Kubernetes 的节点角色后 Rancher 会生成一些命令,直接拷贝命令到对应的机器运行。在这里提供下我节点角色的分配以供参考:

  • 10.0.0.1: etcd, Control Plane, Worker
  • 10.0.0.2: Worker
  • 10.0.0.3: Worker

等待各个节点的初始化完成注册后,在 Rancher 就可以看到集群已经就绪可用的状态。

image-20220209175206103

安装 Rancher CLI,kubectl

最后为了方便本地通过终端工具操作 Rancher 及 Kubernetes 集群,建议安装相应的CLI工具,以下相关文档 CLI with Rancher 自行安装。安装完毕后接可以愉快的玩耍了。

1
2
3
4
5
6
7
8
9
10
11
12
➜  ~ rancher nodes
ID NAME STATE POOL DESCRIPTION
c-rhnr4:m-924c09dacfb5 devserv-01 active
c-rhnr4:m-8842c2782391 devserv-02 active
c-rhnr4:m-286a6c78bd24 devserv-03 active
➜ ~
➜ ~ kubectl get nodes
NAME STATUS ROLES AGE VERSION
devserv-01 Ready controlplane,etcd,worker 25h v1.20.14
devserv-02 Ready worker 24h v1.20.14
devserv-03 Ready worker 24h v1.20.14
➜ ~

总结

未来是 Kubernetes 的天下,会有很多云原生相关技术,有一套开发测试环境能快速了解一些技术原理及相关机制,利用好技术红利能帮助企业大大地提高效率及降低成本。也许这内容容易过时,毕竟技术更新迭代太快了,但是这是了解云原生技术的第一步,现在搭建环境已经不是什么难事,唯一要做的就是仔细阅读官方文档,最好不要从其他人的博客文章来获取搭建步骤,当然也包括本文。这里仅作为搭建过程的参考,希望你能通过官方文档自己完成集群的搭建。

References