聚指尖 2019-02-25
* Rancher概览
Rancher是一个开源的企业级容器管理平台。通过Rancher,企业再也不必自己使用一系列的开源软件去从头搭建容器服务平台。Rancher提供了在生产环境中使用的管理Docker和Kubernetes的全栈化容器部署与管理平台。
Rancher由以下四个部分组成:
基础设施编排
Rancher可以使用任何公有云或者私有云的Linux主机资源。Linux主机可以是虚拟机,也可以是物理机。Rancher仅需要主机有CPU,内存,本地磁盘和网络资源。从Rancher的角度来说,一台云厂商提供的云主机和一台自己的物理机是一样的。
Rancher为运行容器化的应用实现了一层灵活的基础设施服务。Rancher的基础设施服务包括网络, 存储, 负载均衡, DNS和安全模块。Rancher的基础设施服务也是通过容器部署的,所以同样Rancher的基础设施服务可以运行在任何Linux主机上。
容器编排与调度
很多用户都会选择使用容器编排调度框架来运行容器化应用。Rancher包含了当前全部主流的编排调度引擎,例如Docker Swarm, Kubernetes, 和Mesos。同一个用户可以创建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 Server安装
准备linux主机:CentOS7 (docker环境)
主机IP:192.168.18.113(Rancher服务器)
主机IP:192.168.18.114
Docker安装
添加yum源:
$ sudo tee /etc/yum.repos.d/docker.repo <<-'EOF' [dockerrepo] name=Docker Repository baseurl=https://yum.dockerproject.org/repo/main/centos/$releasever/ enabled=1 gpgcheck=1 gpgkey=https://yum.dockerproject.org/gpg EOF
yum缓存更新,安装docker-engine。
$ sudo yum update (不更新Linux内核系统,不操作) $ sudo yum install -y docker-engine
启动docker。
systemctl start docker.service systemctl enable docker.service
Rancher服务器启动(单容器部署)
Rancher单容器部署无需考虑数据库(rancher使用内部数据库,测试环境使用)。$ sudo docker run -d --restart=always -p 8080:8080 rancher/server
Rancher单容器部署使用外部数据库Link。$ sudo docker run -d --restart=unless-stopped -p 8080:8080 rancher/server --db-host xxx --db-port 3306 --db-user username --db-pass password --db-name dbname
rancher/server:latest最新版,rancher/server:stable稳定版生产环境建议使用此版本。
单容器安装部署$ sudo docker run -d --restart=always -p 8080:8080 rancher/server
显示 Rancher 服务器的容器 ID,替换containerid
$ sudo docker ps docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES b1164aef82ff rancher/server "/usr/bin/entry /u..." 9 minutes ago Up 9 minutes 3306/tcp, 0.0.0.0:8080->8080/tcp vigorous_wing
显示并查看 Rancher 服务器的日志
$ sudo docker logs -f containerid docker logs -f b1164aef82ff
启动 Rancher 服务器可能需要花几分钟时间。这取决于下载 Rancher Server镜像的速度(sudo docker run -d --restart=always -p 8080:8080 rancher/server,目前很慢,花了一个晚上自己下载)。当日志中显示 “…. Startup Succeeded, Listening on port…” 以后,Rancher UI 图形界面现在就能正常访问。
添加主机
添加运行Rancher服务器容器的主机。而在实际的生产环境中,建议使用专用的主机来运行Rancher服务器。
另一台主机IP:192.168.18.114已经安装好docker。
点击图形界面的 Infrastructure 标签来添加主机,然后您将会看到 Hosts 页面。Rancher 会提示您选择一个 IP 地址。这个 IP 地址必须可以被所有即将添加的主机访问到。
添加 Rancher 服务器主机自身,因此我们可以忽略这个提示信息。点击 Save ;
进入默认的Custom 选项页面,可以得到运行 rancher/agent 容器的命令。在每台需要添加到rancher控制台的主机上运行 rancher/agent。
Rancher 提供的用于添加主机的命令如下:
$ 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.11 http://192.168.18.113:8080/v1/scripts/273C726DB6B906917F5B:1514678400000:7Do96pJNElcw1OYHz1aGuiQKe
在运行 Rancher 服务器的主机上运行 rancher/agent 容器命令。
在 Rancher 的页面中点击 Close 按钮后,您会被返回到 Infrastructure -> Hosts 页面。在一两分钟后,这个主机将自动出现在这里。
使用图形界面创建一容器
进入 Applications -> Stacks 页面,如果这里还没有服务,你可以点击 “Add Service” 按钮。你可以输入一个类似 “firstcontainer” 的名字。您现在使用默认配置并点击 Create 。Rancher 将开始在这个主机上启动两个容器。一个容器是您所创建的名为firstcontainer ;另外一个容器是Network Agent,这是个由 Rancher 创建的系统容器,它用来处理扩主机联网和健康检查等任务。
不管你的主机是什么 IP 地址,first_container 和 Network Agent 将会的到 10.42.. 网段的 IP 地址。Rancher 已经创建了能在不同主机之上的让所有容器可以相互通信的覆盖网络。
如果你点击 first_container的下拉菜单,你可以执行各种动作,例如:停止容器,查看日志,或者进入容器的控制台。
使用docker原生命令创建一容器
Rancher 会显示所有在主机上的容器,即使有些容器是在图形界面之外创建的。在主机的 shell 命令行里创建一个容器。阿里云镜像仓库中pull下来。$ docker run -it --name=container-tomcat-qa registry.cn-hangzhou.aliyuncs.com/xmbaby-test/test-tomcat
在Rancher图形界面中,你将看到container-tomcat-qa在你的主机上出现!
如果通过退出命令行来退出(ctrl+C)用命令方式创建的容器,在 Rancher 图形界面中将立刻显示这个容器的状态为停止。
Rancher 可以对带外发生的事件作出反应,并把当前的显示状况如实地整合在它的视图中。
如果你查看容器container-tomcat-qa的 IP 地址,你会注意到他不在 10.42.. 网段中。它的 IP 地址是通过 Docker 后台服务获得的。这是通过命令行方式创建容器的正常的结果。
如果希望通过命令行创建的容器依然具有 Ranger 覆盖网络的网络地址呢?我们所需要做的就仅仅是在命令中加一个标签。$ [root@rancher-qa ~]# docker run -it --label io.rancher.container.network=true --name=container-tomcat-qa11 registry.cn-hangzhou.aliyuncs.com/xmbaby-test/test-tomcat
标签 io.rancher.container.network 让我们通过命令行传递了一个通知,这样 Rancher 会为把容器配置为连接到覆盖网络。