构建微服务实验环境(三):Rancher 管理平台

构建微服务实验环境(三):Rancher 管理平台

【摘要】微服务架构目前最流行的方案(最佳实践)是容器集群。AWS 的 ECS、Docker 的 Swarm、google 的 Kubernetes(K8s),apache 的 mesos,包括 Rancher Labs 的 Rancher 。 建议使用 AWS 或 阿里云 等共有云部署,会有更多技术支持,让你体验不同方案的优势。这里仅为了让你更好理解容器集群工作原理,介绍在 Centos 集群上部署 Swarm、K8s、 Rancher 的方案。

(1)容器与应用: 讲述 centos docker的安装,仓库、镜像、容器、服务的概念, dockerfile,compose 文件,容器管理图形界面,以单机操作为主线。
(2)Docker Swarm 集群:讲述集群(cluster)manager,worker,node 的概念与应用在集群部署。重点讲述容器网络、存储管理、集群管理、服务发现等知识。
(3)Rancher 管理平台:讲述多租户多主机容器运行管理平台 Rancher 的租户、环境、主机、环境模板概念与应用。包括 Rancher 自带集群管理 Cattle 的栈、服务的管理,需要读者对比与Docker Swarm 集群在容器基础服务、管理方式方面的差异。

  • 构建微服务实验环境三Rancher 管理平台
    • 1简介
    • 2快速入门
    • 3安装
    • 4平台使用
      • 1 系统与租户管理
      • 2 环境管理
      • 3 创建与管理项目
    • 5Rancher 基础设施服务

1、简介

Rancher(牧场主)是以在生产环境中运行容器为目标而构建的开源软件平台*。全图形化 UI 界面,简单易用。文档支持比较完善,特别是中文资源比较丰富。

  • 中文网站:http://www.cnrancher.com/
  • 中文手册:http://www.dockerinfo.net/247.html Docker info 有系列支持文章(容器服务发展太快,谨慎对待)。
  • 最新文档(英文,201707): http://docs.rancher.com/rancher/v1.6/en/

特点:

  • (1)基础设施编排(Orchestration):Rancher 的计算资源可以是公有云或私有云的 Linux 主机,它们是虚拟机或物理机。Rancher 为它们提供了网络,存储,负载平衡器,DNS 和安全性等基础架构服务。
  • (2)容器编排与调度: Rancher 提供了自己的容器 (Cattle,成为“牛”)的编排服务,也支持 Docker Swarm,Kubernetes 和 Mesos 等容器集群服务。
  • (3)应用目录:Rancher 提供应用目录管理,帮助客户一键部署集群应用
  • (4)企业级控制:Rancher 支持灵活的用户验证插件,并与Active Directory,LDAP和GitHub 进行用户身份验证集成。

Rancher 总体结构图:

2、快速入门

(1) 准备一台管理机

管理机是一台安装 docker 的 64 位 linux 主机,内核版本 3.10+(用 uname -a 检查)。
假设该机器(虚拟机)配置是: hostname = rancher-m1, ip=192.168.56.120,运行 Centos mini版。
执行命令:

docker run -d --restart=unless-stopped -p 8080:8080 rancher/server:stable

UI 暴露在该机器 8080 端口,用浏览器访问 http://192.168.56.120:8080 ,看到 Rancher 管理界面。
第一次进入,会看到系统提示添加一台主机(Add Host)

(2)准备主机(Host)

复制一台 linux 虚拟机(64 位 linux 主机,内核版本 3.10+),如 centos 7。 安装 Rancher 支持的docker 版本。这里以 docker 1.12.6 为例:

curl https://releases.rancher.com/install-docker/1.12.sh | sh

很快系统完成安装。这时 docker 服务没有启动,需要启动服务:

systemctl start docker
systemctl enable docker
systemctl status docker

使用 docker version 检查 docker 服务是否启动。

(3)添加主机(host)

在管理机选择(Add Host)。首先选择主机驱动,这里选择 “Custom”,如果是公有云则要选择驱动,如阿里云则需要先选驱动,其他都不需要改变,将产生的脚本在 host 上运行。例如:

sudo docker run --rm --privileged -v /var/run/docker.sock:/var/run/docker.sock -v /var/lib/rancher:/var/lib/rancher rancher/agent:v1.2.2 http://192.168.56.120:8080/v1/scripts/11886140EE03E8F391EA:1483142400000:Lk2htsaSPLUMwtwAdq9OP7kaQf0

其中:

  • --privileged 容器中的 root 拥有 host root 的特权。
  • -v /var/run/docker.sock:/var/run/docker.sock 获取了该主机 docker REST Api 访问入口。
  • http://192.168.56.120:8080/v1 rancher REST Api 入口。后面应该是创建主机的公有密钥等。

运行后,它又启动一些容器。docker ps 列出一个常常列表。

在管理机上:

菜单 INFRASTRUCTURE -> Hosts 就可以看到这个主机和它启动的应用和容器,包括:

  • rancher-agent:主机管理代理 standalone
  • stack:network-services:主机网络服务,docker0 网络上。网络管理。
  • stack:scheduler:调度服务,工作在 Overlay 网络 10.42.*.*
  • stack:ipsec : 网络安全,Overlay 网络 10.42.*.*
  • stack:healthcheck:健康管理,Overlay 网络 10.42.*.*

注意:主机上并没有这个网络驱动,在 rancher 中这个网络是名字是managed

(4)创建容器

使用 UI 创建容器

菜单 STACKS -> users -->> Add stack --> Add service : 如果你熟悉 compose.ymldocker service 命令 ,设置不是问题。

使用默认的 ubuntu:14.04.2centos 镜像可以创建一个first-container容器。这个容器只能启动在这个主机中,网络使用 10.42.*.*

使用 docker 创建容器

在 host 上执行:

docker run -d -it --name=second-container centos

尽管我们在 manager 机器上, 菜单INFRASTRUCTURE -> Hosts 可以看到并管理 second-container 容器,但它与 first-container 不在一个网络中。如果需要在 rancher managed 网络上,需要添加一个特殊标签:

docker run -d -it --name=second-container --label io.rancher.container.network=true centos

注意: 这个容器在 INFRASTRUCTURE -> Hosts 中显示 standalone,它不属于任何服务或栈。

容器 UI 管理*

在容器上下文菜单中,操作有。 start, stop, delete | Execute Shell,View Logs,View in API | Edit 其中:

  • Execute Shell 类似 docker exec xxx /bin/bash
  • View in API 类似 docker inspect xxx

3、安装

建议参考:Rancher单节点服务器安装
注意:安装时,输入具体命令前,请参考对应版本的英文说明

Rancher Manage 比较另类的使用 mysql 作为主机与容器管理平台。可能是更关注用户、主机、网络等资源管理,而集群不是其管理的重点有关。

4、平台使用

4.1 系统与租户管理

到目前为止,菜单 ADMIN 上都有一个红色的警告标志! 表示没有配备安全的账户,任何人都可以访问您的管理中心。

创建平台账户

菜单 ADMIN -> Access Control -->> LOCAL 注意:这仅是实验平台的认证方案。请根据云平台特点,合理使用用户认证与授权策略。

启动用户认证策略后,我们建立了 root 管理员用户。

租户管理(Tenant )

菜单 ADMIN -> Accounts -->> Add Account 添加一个普通组(User)用户,这样就创建了租户。

有了租户,我们就可以为租户提供容器服务环境。

4.2 环境管理

环境的概念

Rancher 环境是一组计算资源与相关服务的集合,包括主机、网络服务、DNS服务、存储服务等等。不同的环境之间是相互隔离的。通常环境命名为“dev”、“test”、“production”等,也可以为租户提供的自己的容器运行环境。

环境模板

为了方便为租户快速创建容器运行环境,Rancher 预先提供了 Cattle,K8S,Mesos, Swarm 等模板。用户如果需要定制网络、存储、框架服务等,则需要订制自己的模板。

创建一个租户环境

(1)菜单 Environment -> Manage Environments -->> Add Environment
(2)输入环境名 lab , 选择模板 Cattle
(3)Access Control:添加租户为这个环境的成员 (member)
(4)Create
(5)菜单 Environment -> <环境名> 进入该环境,系统提示添加主机(Add Host)

为租户环境添加主机

添加新的主机,配置例如: hostname=rancher-h2, ip=192.168.56.122。按前面“快速入门”加入 Rancher 管理集群。这时,我们有一台管理机和两台主机。

lab 环境中添加主机:用 ssh 登陆 rancher-h1 和 rancher-h2,输入该环境添加主机的命令。我们看到这个环境中有了两台主机。

菜单 用户 -->> Log Out 用普通用户账户登陆

4.3 创建与管理项目

Rancher 与 Docker Swarm 在项目管理上概念是一致的。

  • 栈(Stack)
  • 服务(Service)

注意: docker-compose.yml 支持 version 2 ! 不是 3

(1)快速部署一个项目

  • 菜单 当前环境 -->> Add Stack 添加 Stack 命名 myapp
  • 进入当前栈,Add Service 添加 database 服务,镜像 mongo ,点创建
  • Add Service 添加 database 服务,镜像 sdelements/lets-chat , 在 Service Links 添加连接服务database 别名 mongo , 点创建
  • Add Service 右边下拉菜单Add Load Balancer Rancher 自动出现 HAProxy 的配置页面。添加负载均衡名称 letschatapplb 并定义源 port 为 80 , target 服务 web port 为 8080
  • 分别用 link graph 视图 和 compose YAML 视图观察服务的定义。

等服务启动,点击 list 视图的 80/tcp 连接,进入应用,我们就看到一个 web 聊天的应用。

(似乎有一些bug,当强制迁移 database 转移到另一台机器,会导致 web 不断启动,database 无法下载。关闭 web 服务,database 下载就顺利完成了)

(2)栈、服务

与 docker swarm 几乎一样,选择也类似。

service 有许多设置,包括:任务数(Tasks or Scale);镜像(Image);端口映射(Ports);服务链接(Links);调度策略(Scheduling);Label(标签);健康检测(Healthcheck)等等。

Port 映射:注意,使用 Port 映射时,Scale 不能大于主机数量,否则会出现主机端口冲突。(Docker Swarm 则不会出现问题,为什么?
服务 Link 与内部 DNS: 在一个栈中,服务连接使用内部 DNS 服务,DNS 映射表(服务名)实现服务消费者与生产者的负载均衡。(Rancher 没提及 DNS 的自定义调度策略
服务调度策略:包括主机最低负载调度,全局调度,按调度规则选择主机调度。

(3)负载均衡

Rancher 默认的负载均衡使用 HAProxy,在非 managed 网络中不一定能服务。主要配置要求:

  • HAProxy 也是该栈的一个服务,服务配置需要满足前面的配置要求。不能超过主机数量
  • Service Rule 用于映射入口访问到目标服务的映射:
    • Access:外部访问,栈内访问;
    • Protocol:HTTP,TCP等。如果你选择 HTTPS 和 TLS,则需要在下面 SSL Termination 标签 中提供证书。
    • request host:用于支持 HTTP1.1 协议,利用请求头中域名,定位到不同的服务。例如,某大学有两个域名 xxx.cn 和 xxx.org 分别是中文和英文服务,可以用这个域名定位到不同服务。WILDCARDS支持。
    • source port:外部访问端口,不能是该主机使用的端口,如 42 健康检查等等。
    • path:入口路径
    • target service, port: 注意:Rancher 没说明它提供的服务是重写(rewrite)转发服务规则。
  • Service Rule 用于映射入口访问到目标(Labeled)服务的映射:
    • target service 使用服务的 label 。由于 Rancher 仅支持 docker-compose 的版本2,所以 label 只能用 Rancher 自己的组合定义

SSL 与 session Stickiness 配置!

(4)外部服务

这是 Rancher 的一个扩展,提供栈内访问外部 IP 和 网站的能力。这样,外部访问就可以直接跨越内部 DNS,直接通过 NAT 转入外网。

(5)与外部 DNS 协作

由于外部 DNS 并不能感知集群内服务动态变化,因此需要提供服务检测集群内配置(元数据)的变化,使外部 DNS 正常工作。 Rancher 与 社区提供了一些外部 DNS 服务, 似乎需要管理员权限。

5、Rancher 基础设施服务

Rancher 提供了容器多租户管理需要的核心概念:租户、环境、主机,其中,环境建立在环境模板上,支持 Cattle,K8s 等多种集群环境,并可以自己定义模板与服务。

其他还包括 外部DNS,网络,存储和框架服务(即内部dns, 元数据和健康检查)。

网路服务

Rnancher 实现 CNI(Container Network Interface) 服务。默认所有模板都启动 Network Service, 此外采用 IPsec 隧道驱动,实现了安全的 overlay 网络通讯。有以下需求需要仔细阅读官方手册:

  • 了解 Managed 网络与 rancher 1.2 以前版本的区别
  • 使用 CNI 驱动,在 docker 元数据中,不能发现容器的网络,以及 managed 网络。如 docker inspect xxxdocker network ls 都得不到期望结果。
  • 默认相同环境的容器间,仅能通过 managed 网络通讯。如需使用 host,bridge 等网络,需要进一步阅读手册
  • 需要自己配置 IPsec 网络服务
  • 需要更复杂的通讯策略,请阅读Network Policy

存储服务

Rancher 支持多种数据卷的驱动服务。即可以在设置模板环境时选择,如果你是当前环境的 owner,也可以在菜单 CATALOG -> Library 启动 Storage 服务。以下条件你需要进一步阅读手册

  • 使用跨主机共享数据卷。Rancher 自己提供了不错的 NFS 支持
  • 使用云平台供应商提供的存储服务作为数据卷

负载均衡与DNS

  • 了解更多 HAProxy 的配置
  • 了解内部 DNS 项与使用

Rancher CLI 与 REST API

Rancher CLI 似乎用途不大。

REST API 可见 API 菜单,如果项目需要,可参考:
项目中调用Rancher Rest API实践

6、小结

Rancher 实现了一个多租户多主机的容器运行管理平台。主要概念:租户、环境、主机。它自带 Cattle 集群环境,支持集群应用的管理与部署,主要概念包括:栈、服务、容器、负载均衡、外部服务、外部DNS 等。网络服务和存储服务配置需要较多专业知识,但算简单、容易了。

Rancher 的容器服务 UI 非常专业,风格一致,易于使用。能和 AWS 的 ECS 的界面比一比的。其中 API View 对应用开发者特别友好。中文支持非常好啊。

你可能感兴趣的:(微服务)