使用Rancher快速搭建一个k8s集群

Rancher介绍

Rancher是一个开源的企业级容器管理平台。通过Rancher,企业再也不必自己使用一系列的开源软件去从头搭建容器服务平台。Rancher提供了在生产环境中使用的管理Docker和Kubernetes的全栈化容器部署与管理平台。

简单的说,就是一个可以让你通过 web 界面管理 docker 容器的平台。定位上和 K8s 比较接近,都是通过 web 界面赋予完全的 docker 服务编排功能。

Rancher 的特色

能够做到这么流行,总归有几板斧头的。rancher 的几个比较突出的点有:

平台部署方便。管理 docker 的平台本身也基于 docker 部署。只要你有 docker ,一句命令就完成平台的部署了。

平台扩展方便。通过 agent 机制,一句 docker 命令完成 agent 部署,快速增加你的物理机。同时也支持 AWS 等云主机, 2.0 版本甚至还支持 K8s 。

服务部署方便。通过应用商店,2步完成应用部署,而且还是像 docker-compose 那样各个中间件独立编排,可以随时扩容的哦。

自带账户权限。相比 K8s 没有账号管理,rancher 自带账号权限体系。账号可以独立创建,也可以很方便地接入 ldap 等账号体系。对于公司使用是一大利器。

部署Rancher server单节点

安装环境:
三台centos7 虚拟机,都安装好docker

下面介绍三种不同证书情况下的安装方式

使用自签证书
安装rancher(包括持久化和支持本机部署,自签证书)

docker run -d --restart=unless-stopped \
  -p 8080:80 -p 8443:443 \
  -v /root/rancher:/var/lib/rancher \
  rancher/rancher:latest

使用自有证书部署

docker run -d --restart=unless-stopped \
	-p 80:80 -p 443:443 \
	-v /root/ssl/certificate.pem:/etc/rancher/ssl/cert.pem \
	-v /root/ssl/key.pem:/etc/rancher/ssl/key.pem \
  -v /root/rancher:/var/lib/rancher \
	rancher/rancher:latest --no-cacerts

使用acme自动证书部署

docker run -d --restart=unless-stopped \
  -p 80:80 -p 443:443 \
  -v /root/rancher:/var/lib/rancher \
  rancher/rancher:latest \
  --acme-domain asoco.ac.cn

ps:如果需要挂载外部数据库,可以加如下命令

-v <host_vol>:/var/lib/mysql

更多部署方式可以参考官方部署文档

部署Rancher agent节点

首先我们先添加一个集群,点击添加集群按钮后,可以看到如下图:

Rancher可以添加来自云服务商提供的k8s集群,支持阿里云、谷歌云、微软云等。也可以添加自己本地的集群,就是红色方框的这个选项。本次我们在自己的虚拟机上添加k8s集群。注意,这里并不需要你得虚拟机上先装好k8s集群,Rancher会自动帮你安装,只需要虚拟机上正常安装好了docker即可。

下面的集群选项,选择v1.13.5-rancher1-2,然后网络组件选择Canal,云提供商就选择无。当然这里的配置也可以根据实际情况进行修改。选完之后点击下一步。

点击下一步后我们可以看到一个自定义选项,选择我们的节点机是什么角色。这里我们全选。选择完成之后,再复制下面自动生成的命令。例如:

sudo docker run -d --privileged --restart=unless-stopped --net=host -v /etc/kubernetes:/etc/kubernetes -v /var/run:/var/run rancher/rancher-agent:v2.2.2 --server https://192.168.1.22:8443 --token 4rrw6844ztxdqsss9qjmf9np --ca-checksum b68bdaad339 --worker --etcd --controlplane

每个人生成的命令都不一样,不能直接复制我的命令使用。复制完命令即可再刚才的节点机中,直接运行该命令即可,会自动帮我们安装k8s集群,并且配置好对应的角色。

等待大约10分钟这样,agent主机即可安装完成。

然后我们就可以在集群界面看到集群的相关信息,如下图。这里我是启用了集群监控,所以多了一个grafana。

集群总览

主机总览

配置Rancher

安装完成之后,打开rancher,首次登陆需要设置admin账户的密码,设置完成之后,就可以看到rancher的管理界面了。然后我们需要添加集群和agent节点

开启集群监控

点击集群后,在上面选择工具→监控。点击启用监控,配置对应的选项后,保存即可自动启动集群级别的监控。这里的配置如果不修改,直接启用也是可以的。
集群监控配置:

等待几分钟后,监控服务就启动好了,然后在刚才的集群界面就可以看到整个集群的性能监控指标。

除此之外,我们还可以开启单个项目组的监控。点开一个项目,然后再工具--监控中启用监控。

这样所有的监控就已经启动了,我可以监控每一个pod、容器(包括已经删除的容器)的CPU、内存、网络io数据。

我们可以点开一个pod或者直接查看集群的grafana,来查看性能数据大盘。如下图所示:

配置应用商店

Rancher本身就自带了应用商店,但是应用数量非常的少。但是Rancher本身是支持Helm仓库的配置的,所以我们可以添加一些Helm仓库来增加应用。当前也可以添加自有的Helm仓库

这里我选择添加微软的Helm仓库
在应用商店的选项中,点击添加应用商店,如下图:

名字随便取一个,比如azure
地址填写为http://mirror.azure.cn/kubernetes/charts/
然后点出创建,等带同步数据后,就可以在应用商店看到多出来的应用了。

创建一个应用

从应用商店中创建

选择刚才创建好的集群,然后选择默认的空间。点击应用商店,然后点击启动。
在默认的商店library中,我们可以找到mysql选项,然后点击查看详情。

如上图,再这里我们可以配置很多选项,比如mysql的用户名、密码、端口等,这里就不做详细介绍了。

点击启动,然后就可以看到再默认的命名空间中,启动了一个容器。第一次会需要下载容器镜像,所以需要等待一段时间,完成后,我们可以看到状态显示为active(如下图)。然后我们可以用navicat访问下设置的端口,进入mysql。

到此应用就正式创建完成了。

手动创建自己的应用

大部分的时候,应用商店里面的应用不符合我们的要求,需要自己手动创建。这里同样,选择默认的命名空间,再选择工作负载,然后点击部署服务。

这里还是以mysql服务为例,我们部署一个mysql服务。所以镜像部分填写的是mysql:5.7.14 。

然后下面的环境变量配置中,可以像使用docker容器一样,配置环境变量。例如我们直接docker安装mysql的时候运行的命令是docker run --name mysql5.7 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -v $PWD/logs:/logs -v $PWD/data:/var/lib/mysql -d mysql:5.7

其中-e 参数就是环境变量,所以我们就可以再环境变量中填写变量为MYSQL_ROOT_PASSWORD ,值为123456
然后-v参数就是挂载数据卷,那么再数据卷中,就可以一样的配置挂载目录,达到持久化的目的。

由于k8s的集群特性,所以这还有主机调度策略和缩放升级策略,健康检查。这里不过多介绍,可以自己去摸索,而且都是中文汉化,应该很好理解。

最后点击启动,然后等待容器状态变成active即可。

总结

Rancher提供了一个很好的容器管理平台,使得我们可以轻松的借助该平台管理k8s集群和创建k8s集群服务。另外还有cli可以接入持续集成,实现自动部署等功能。此外Rancher还有集群报警、日志管理等多个功能,支持企业微信的报警推送。