Kubernetes 好伙伴 Rancher 2.x
2020-03-21 by dongnan
开始之前
为什么要使用 Rancher 2.x 来管理 K8S集群?
如果仅仅是运维一个角色使用 K8S 集群,那么 kubect 命令行已经足够强大能够并覆盖所有工作环节,
但是一个项目更常见的场景是 开发、测试、运维 三个角色相互配合完成工作的,
让开发和测试通过使用 kubectl 命令来完成 K8S 日常使用操作,学习和使用的成本非常高。
术业有专攻,开发、测试人员应该聚焦在业务功能代码实现、业务功能测试,在这种环境下如果能有一个Web控制台能够通过简单的鼠标点击就能完成任务,
最好还能带有权限&角色管理功能,以方便根据需求分配不同的权限。
猜对了这些事情 Rancher 能帮助你实现,例如项目代码上线场景:
- CI持续集成工具完成- Docker镜像的封装工作。
- 开发人员通过 Rancher完成代码上线。
- 测试人员进行测试并通过 Rancher查看测试数据。
- 全部通过,运维人员通过 Rancher完成生产环境上线工作。
在这里我们可以简单的理解 Rancher 是一个UI 是一个Web形式的kubectl,当然 Rancher 的强大的功能远不止这些,
详细信息请访问 Rancher 官网 。
接下来会介绍如何将部署好的K8S集群,导入到 Rancher 管理和使用。
环境描述
kubernetes
测试的k8s集群由一个Master管理节点、两个Worker计算节点组成,详细请参考这里。
Rancher
软件版本: v2.3.2
这里我们将 Rancher部署在阿里云平台上,使用 ECS作为Docker宿主机,使用SLB作为L7负载均衡器。 
为了方便演示,Rancher采用”单节点 Docker 安装“开箱即用的方式,将 Rancher部署在 K8S Master相同的主机上(生产环境不建议)。 
Rancher 服务端部署完成后,将上一章中已经部署好的K8S集群导入Rancher中。
关于SSL终止
- Rancher 2.x规定必须使用- HTTPS协议通信,这里将采用的方式为 单节点 + 外部L7负载均衡 这种方式。
- 外部负载均衡器作为SSL终止,请求通过负载均衡器的HTTPS(443)被反向代理到Rancher Server HTTP(80)端口上。
- 外部负载均衡器需要配置 X-Forwarded-Proto: https参数,Rancher Server HTTP(80)上收到负载均衡器的请求后,就不会再重定向到HTTPS(443)上。
- 如果希望SSL证书直接部署在Rancher服务端的方式,详细请参考这里。
操作步骤
部署 Rancher
Rancher 服务端 
docker run -d --restart=unless-stopped \
    --name rancher2 \
    -p 80:80 -p 443:443 \
    -v rancher-data:/var/lib/rancher/ \
    -v rancher-log:/var/log/auditlog \
    -e TZ=Asia/Shanghai \
    -e LANG=en_US.UTF-8 \
    -e CATTLE_SYSTEM_CATALOG=bundled \
    -e AUDIT_LEVEL=3 \
    rancher/rancher:stable --no-cacerts
注意
- -v rancher-data与- -v rancher-log创建容器数据卷,保证数据持久化。
- 添加 --no-cacerts参数禁止Rancher生成默认CA证书。
- CATTLE_SYSTEM_CATALOG=bundled,该变量将告诉- Rancher使用- Chart的本地副本,而不是尝试从- GitHub上获取它们。
配置 SLB 负载均衡
使用准备的 rancher2.xyc.com 域名作为 Rancher Server 地址。
SLB 负载均衡 HTTPS 监听配置部分请参考 SSL终止 部分。
导入 K8S 集群
部署完成后,就可以访问 rancher 控制台了,首次登录会要求设置 admin 管理员的密码。
基础工作准备好以后,就可以添加集群了。
路径:添加集群 -> 选择集群类型 -> 导入现有Kubernetes集群 -> 按照提示操作即可。

设置集群名称并创建集群

将K8S导入rancher选择第2个(在现有的受支持的Kubernetes集群上运行下面的kubectl命令,将其导入Rancher: )

最后完成添加集群任务

验证
创建一个 Deployment, Yaml文档参考这里

小结
- 可以简单的将 Rancher理解为一个UI负责指挥k8s集群。
- 也可以理解 Rancher是一个Web形式的kubectl负责与Kubernetes Master进行通信。
- 不过 Rancher的功能非常强大、软件生态也很丰富(RKE k3s rancher-os),详细信息请访问 Rancher 官网 。