Rancher容器管理平台搭建

1. Rancher容器管理平台简介

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

Rancher由以下四个部分组成:

  • 基础设施编排

Rancher可以使用任何公有云或者私有云的Linux主机资源。Linux主机可以是虚拟机,也可以是物理机。Rancher仅需要主机有CPU,内存,本地磁盘和网络资源。从Rancher的角度来说,一台云厂商提供的云主机和一台自己的物理机是一样的。

Rancher为运行容器化的应用实现了一层灵活的基础设施服务。Rancher的基础设施服务包括网络存储负载均衡DNS和安全模块。Rancher的基础设施服务也是通过容器部署的,所以同样Rancher的基础设施服务可以运行在任何Linux主机上。

  • 容器编排与调度

很多用户都会选择使用容器编排调度框架来运行容器化应用。Rancher包含了当前全部主流的编排调度引擎,例如Docker SwarmKubernetesMesos。同一个用户可以创建Swarm或者Kubernetes集群。并且可以使用原生的Swarm或者Kubernetes工具管理应用。

除了Swarm,Kubernetes和Mesos之外,Rancher还支持自己的Cattle容器编排调度引擎。Cattle被广泛用于编排Rancher自己的基础设施服务以及用于Swarm集群,Kubernetes集群和Mesos集群的配置,管理与升级。

  • 应用商店

Rancher的用户可以在应用商店里一键部署由多个容器组成的应用。用户可以管理这个部署的应用,并且可以在这个应用有新的可用版本时进行自动化的升级。Rancher提供了一个由Rancher社区维护的应用商店,其中包括了一系列的流行应用。Rancher的用户也可以创建自己的私有应用商店

  • 企业级权限管理

Rancher支持灵活的插件式的用户认证。支持Active Directory,LDAP, Github等 认证方式。 Rancher支持在环境级别的基于角色的访问控制 (RBAC),可以通过角色来配置某个用户或者用户组对开发环境或者生产环境的访问权限。

下图展示了Rancher的主要组件和功能:

Rancher组件和功能

2. Rancher容器管理平台搭建

2.1 安装环境要求

  • 操作系统: CentOS 7.0+

  • 内存: 1GB+

  • 硬盘: 100GB+

  • 数据库: MySQL5.0+

    • MySQL服务器需要 max_connections 的设置 > 150

    • MYSQL配置需求

      • 选项1: 用默认COMPACT选项运行Antelope
      • 选项2: 运行MySQL 5.7,使用Barracuda。默认选项ROW_FORMAT需设置成Dynamic
    • 推荐设定

      • max_packet_size >= 32M
      • innodb_log_file_size >= 256M (如果你已有现存数据库,请根据实际情况更改此设定)
      • innodb_file_per_table=1
      • innodb_buffer_pool_size >= 1GB (对于更高需求的配置,请在专属MySQL服务器机器上使用4-8G的值)
  • 服务依赖:Docker服务

  • Rancher版本: Rancher 1.5+

2.2 Rancher Server版本说明

Rancher Server当前版本中有2个不同的标签。对于每一个主要的release标签,我们都会提供对应版本的文档。

  • rancher/server:latest 此标签是我们的最新一次开发的构建版本。这些构建已经被我们的CI框架自动验证测试。但这些release并不代表可以在生产环境部署。
  • rancher/server:stable 此标签是我们最新一个稳定的release构建。这个标签代表我们推荐在生产环境中使用的版本。

注: 请不要使用任何带有 rancher/server:rc{n} 前缀的release。这些都是Rancher构建的测试版本。

2.3 Rancher部署

2.3.1 单容器部署(使用容器内部自带的MySQL数据库)

在安装和部署了Docker容器环境的Linux服务器上,使用一个简单的命令就可以启动一个单实例的Rancher。

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

2.3.2 单容器部署(使用外部MySQL数据库)

除了使用内部的数据库,你可以启动一个Rancher Server并使用一个外部的数据库。启动命令与之前一样,但添加了一些额外的参数去说明如何连接你的外部数据库。

使用外部数据库,需要提前创建数据库名和数据库用户,Rancher服务启动后会自动创建Rancher管理平台需要的数据库表。以下为相关的建库脚本, 可供参考:

> CREATE DATABASE IF NOT EXISTS cattle COLLATE = 'utf8_general_ci' CHARACTER SET = 'utf8';
> GRANT ALL ON cattle.* TO 'cattle'@'%' IDENTIFIED BY 'cattle';
> GRANT ALL ON cattle.* TO 'cattle'@'localhost' IDENTIFIED BY 'cattle';

启动一个Rancher连接一个外部数据库,你需要在启动容器的命令中添加额外参数。

$ sudo docker run -d --restart=unless-stopped -p 8080:8080 rancher/server \
    --db-host 192.168.202.44 --db-port 3306 --db-user username --db-pass password --db-name cattle

大部分的输入参数都有默认值并且是可选的,只有MySQL数据库主机地址配置项是必须配置的。

--db-host               数据库主机名或IP地址
--db-port               数据库服务端口(默认为:3306)
--db-user               数据库用户名(默认为:cattle)
--db-pass               数据库用户密码(默认为:cattle)
--db-name               数据库名(默认为:cattle)

2.3.3 高可用集群部署

在高可用(HA)的模式下运行Rancher Server与单容器部署方式一样简单,但需要暴露一个额外的服务端口用于实现集群节点之间的通讯,需要添加额外的参数到启动命令中,并且运行一个外部的负载均衡就可以了。

1. HA部署需求

  • HA 节点:
    • 9345, 8080 端口需要在各个节点之间能够互相访问
    • 至少1GB内存
  • MySQL数据库
    • 至少 1 GB内存
    • 每个Rancher Server节点需要50个连接 (例如:3个节点的Rancher则需要至少150个连接)
    • MYSQL配置要求
      • 选项1: 用默认COMPACT选项运行Antelope
      • 选项2: 运行MySQL 5.7,使用Barracuda。默认选项ROW_FORMAT需设置成Dynamic
  • 外部负载均衡服务器
    • 负载均衡服务器需要能访问Rancher Server节点的 8080 端口

注意:目前Rancher中并不支持Docker for Mac

2. 大规模部署建议

  • 每一个Rancher Server节点需要有4 GB 或者8 GB的堆空间,意味着需要8 GB或者16 GB内存
  • MySQL数据库需要有高性能磁盘
  • 对于一个完整的HA,建议使用一个有备份的MySQL数据库。另一种选择则是使用MySQL集群(Galera)。

3. 部署步骤

  1. 在每个需要加入Rancher Server HA集群的节点上,运行以下命令:

    $ docker run -d --restart=unless-stopped -p 8080:8080 -p 9345:9345 \
        rancher/server --db-host 1952.168.202.44 --db-port 3306 \
        --db-user Cattle --db-pass cattle --db-name cattle \
        --advertise-address <IP_of_the_Node>
    

    在每个节点上,<IP_of_the_Node> 需要在每个节点上唯一,因为这个IP会被添加到HA的设置中。

    如果你修改了 -p 8080:8080 并在host上暴露了一个不一样的端口,你需要添加 --advertise-http-port <host_port> 参数到命令中, 如下所示:

    $ docker run -d --restart=unless-stopped -p 8000:8080 -p 9345:9345 \
        rancher/server --db-host 1952.168.202.44 --db-port 3306 \
        --db-user Cattle --db-pass cattle --db-name cattle \
        --advertise-address 192.168.202.15 --advertise-http-port 8000
    

    ADVERTISE-ADDRESS参数配置说明:

    • 使用IP地址 --advertise-address 192.168.202.14
    • 使用网络接口 --advertise-address eth0
  2. 在负载均衡应用(如Nginx、HAProxy等)中添加负载均衡配置,这个负责均衡负责将例如80443端口的流量,转发到运行Rancher Server的节点的8080端口中。负载均衡器必须支持websockets 以及 forwarded-for 的Http请求头以支持Rancher的功能。

4. 注意事项

如果修改了Rancher集群节点上的IP地址,Rancher集群上该节点将不会再提供服务,此时需要删除修改IP地址的容器节点服务, 并重新运行新的容器并配置修改后的IP地址。

推荐阅读更多精彩内容