docker微服务部署之:六、Rancher管理部署微服务

docker微服务部署之:五、利用DockerMaven插件自动构建镜像

一、 什么是Rancher

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

Rancher官网:https://rancher.com

二、Docker中下载Rancher镜像并运行

#Rancher镜像下载
$ sudo docker pull rancher/server
$ sudo docker images | grep rancher/server
rancher/server            latest              aff17b0067db        1 second ago         1.09GB

#Rancher安装
docker run -d --name=rancher -p 8080:8080 rancher/server

在浏览器中输入:http://192.168.31.181:8080,如果能打开欢迎页,表示安装成功。(提示:rancher的启动会有点慢,可能需要等一会儿)

全是英文,看不懂?没关系,可以点击右下键的English,选择语言为简体中文。

三、Rancher环境管理

Rancher的作用就是用来管理Docker容器的环境。可以通过Rancher的环境管理,来管理不同团队的Docker环境。每套Ranhcer环境之间,都是隔离的,相互之间没有影响。

3.1. 添加环境

点击顶部导航栏的Default,点击环境管理

进入了环境管理界面,点击添加环境

打开了添加环境界面,输入相应名称和描述,并选择环境模板,最后点击创建,完成环境的添加。

在环境列表界面,可以看到已经创建好了一个名为test的环境,并且该环境已经完成了启动。

3.2.在环境中,管理docker中的微服务

首先切换到刚创建的test环境。点击顶部导航栏的Default,点击test

打开了test中的用户应用管理界面

四、配置主机

切换到了test环境,那个该环境,rancher需要管理哪台主机docker中的微服务呢?这就是这一步需要做的事情。

点击顶部导航栏中的基础架构,点击主机

进入了主机列表界面,点击添加主机

进入添加主机界面,(如果是新安装的rancher,没有进行过配置,可能会出现类似如下界面,看看当前站点地址是否为需要被管理的docker的主机的ip地址,如果是,直接点击下面的保存即可。)

进入了添加主机界面,在4处输入需要管理的docker的主机IP地址,然后点击5处的复制按钮,把复制之后的代码脚本,在填入的主机中执行,执行完成之后,点击关闭按钮,完成主机的添加操作。

复制的代码脚本是干嘛的呢?其实就是在docker主机中,安装rancher的代理,以便让rancher可以管理docker。

附上执行上面复制的代码脚本过程

$ sudo docker run -e CATTLE_AGENT_IP="192.168.31.181"  --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.31.181:8080/v1/scripts/41FD60E2D772FF772A69:1546214400000:Z2mxv2DC4Id5S34xJIgZaokUpoY

INFO: Running Agent Registration Process, CATTLE_URL=http://192.168.31.181:8080/v1
INFO: Attempting to connect to: http://192.168.31.181:8080/v1
INFO: http://192.168.31.181:8080/v1 is accessible
INFO: Configured Host Registration URL info: CATTLE_URL=http://192.168.31.181:8080/v1 ENV_URL=http://192.168.31.181:8080/v1
INFO: Inspecting host capabilities
INFO: Boot2Docker: false
INFO: Host writable: true
INFO: Token: xxxxxxxx
INFO: Running registration
INFO: Printing Environment
INFO: ENV: CATTLE_ACCESS_KEY=A2ED98628633A662C191
INFO: ENV: CATTLE_AGENT_IP=192.168.31.181
INFO: ENV: CATTLE_HOME=/var/lib/cattle
INFO: ENV: CATTLE_REGISTRATION_ACCESS_KEY=registrationToken
INFO: ENV: CATTLE_REGISTRATION_SECRET_KEY=xxxxxxx
INFO: ENV: CATTLE_SECRET_KEY=xxxxxxx
INFO: ENV: CATTLE_URL=http://192.168.31.181:8080/v1
INFO: ENV: DETECTED_CATTLE_AGENT_IP=172.17.0.1
INFO: ENV: RANCHER_AGENT_IMAGE=rancher/agent:v1.2.11
INFO: Launched Rancher Agent: fea792c5f8413fece7c635f4feaf7127f62911cfb1ef44b38fe0aa5323aba473
[root@localhost ~]# docker images
REPOSITORY                TAG                 IMAGE ID            CREATED             SIZE
zuul                      latest              ffed513f7188        32 hours ago        642MB
article                   latest              b80e1550a5ce        32 hours ago        651MB
eureka                    latest              9b410097b49e        34 hours ago        645MB
jdk1.8                    latest              1f2578d93bd0        2 days ago          598MB
centos                    centos7             9f38484d220f        7 days ago          202MB
centos/mysql-57-centos7   latest              ee80146ff512        5 weeks ago         453MB
rancher/server            latest              aff17b0067db        7 weeks ago         1.09GB
rancher/scheduler         v0.8.6              fbedeaddc3e9        8 weeks ago         248MB
rancher/agent             v1.2.11             1cc7591af4f5        7 months ago        243MB
rancher/net               v0.13.17            f170c38e3763        8 months ago        311MB
rancher/dns               v0.17.4             678bde0de4d2        8 months ago        249MB
rancher/healthcheck       v0.3.8              ce78cf69cc0b        8 months ago        391MB
rancher/metadata          v0.10.4             02104eb6e270        8 months ago        251MB
rancher/network-manager   v0.7.22             13381626c510        8 months ago        256MB
rancher/net               holder              665d9f6e8cc1        23 months ago       267MB

点击关闭之后,可能需要等待一点点时间,就可以看到在主机列表界面,看到连上了我们刚添加的192.168.31.181主机。

可以看到主机已经出去可用状态(ACTIVE),并且可以看到主机的一些信息,如操作系统,ip地址,内存一级硬盘等等,还有容器中的服务,以及这些服务的状态。

五、往Docker主机中添加应用

上面已经做了这么多,那么如何把自己的服务部署到docker中。

服务都是放在应用中,所以需要先创建一个应用。

创建应用的步骤如下:

首先,点击顶部导航栏中的应用,点击全部

打开应用列表管理界面,可以看到有4个应用,就是刚刚执行复制的代码脚本,在docker中运行了这4个应用。并且该4个应用最前面的图标都是绿色的,表示处于运行状态。

点击添加应用,给应用取个名字,并添加描述,然后点击创建,完成应用的添加操作

进入microservice服务管理界面

六、添加服务

把自己的微服务都部署到相应的应用中,便于管理。下面演示如何添加服务到应用中。

=================================================================

提示:

由于下面要演示添加docker微服务部署前面的章节中的eureka、article、zuul服务,如果是按照前面章节一章一章操作的同学,可能现在docker中已经有正在运行的eureka、article和zuul服务。为了和下面要演示的内容有冲突,故需要把这三个服务停止掉,并删除,只保留镜像。 删除的步骤为:

  1. 先通过docker ps -a查看容器中的所有服务,在NAMES下查看是否有eureka等服务,STATUS为该服务对应的状态(UP为正在运行,Exited为已经停止)
  2. 通过docker stop xx(xx为上一步中NAMES中的名称),停止正在运行的服务。
  3. 最后通过docker rm xx(xx为第1步中NAMES的名称),删除服务。

=================================================================

6.1 添加eureka服务

添加第一个服务:eureka服务。

在上面的最后一个界面,也就是microservice应用的服务列表管理界面,点击添加服务,打开服务编辑界面

配置详解:

名称、描述,都是rancher中标识用的。

选择镜像输入eureka,因为名为eureka的镜像,已经在镜像本地仓库(docker images中可以查看到),所以取消创建前总是拉去镜像的勾选。

点击添加映射端口,第一个7000位主机公开端口,第二个7000位私有容器端口。

最后滚动到页面最下面,点击创建,完成eureka服务的创建。

回到microservice应用的服务列表管理界面,可以看到eureka已经启动。可点击最右边竖着的...,然后进行升级镜像,重启、停止、删除服务操作等。

可在浏览器中访问http://192.168.31.181:7000/访问eureka服务

6.2 添加aritcle服务

在microservice应用的服务列表管理界面,点击添加服务,打开服务编辑界面

配置详解:

名称、描述,都是rancher中标识用的。

选择镜像输入article,因为名为article的镜像,已经在镜像本地仓库(docker images中可以查看到),所以取消创建前总是拉去镜像的勾选。

点击添加映射端口,第一个9001位主机公开端口,第二个9001位私有容器端口。

最后滚动到页面最下面,点击创建,完成article服务的创建。

回到microservice应用的服务列表管理界面,可以看到article已经启动。(因为article中需要访问mysql,如果mysql服务没有部署,或者mysql中没有相应的数据库等,出启动报错,然后一直循环启动,如下图所示)

可点击服务名article,进入article服务详情页面,点击article的容器标签,在article的状态为Running状态下,点击右边竖着的...,然后点击查看日志,如图:

如果此时,你把上面的错误:“Communications link failure”和“‎The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server”,拿去百度一下,发现都是一堆让你修改Mysql的连接时间之类的,这些答案简直就是瞎扯。

原因很简单,就是因为mysql服务没有启动。(以上是为了演示当添加服务启动失败时,如何查看日志)。

$ sudo docker ps -a
CONTAINER ID        IMAGE                             COMMAND                  CREATED             STATUS                    PORTS       NAMES
...
652a36962b86        centos/mysql-57-centos7           "container-entrypoin…"   3 days ago          Exited (0) 31 hours ago               mysql...# 可以看到myql的STATUS为Exited(0)表示没有启动,下面启动mysql$ sudo docker start mysqlmysql

此时再来microservice应用的服务列表管理界面,可以看到article已经启动成功了。

看看eureka管理界面中,article服务是否已经注册上来

也可通过浏览器访问article服务

6.3 添加zuul服务

在microservice应用的服务列表管理界面,点击添加服务,打开服务编辑界面

配置详解:

名称、描述,都是rancher中标识用的。

选择镜像输入zuul,应为名为zuul的镜像,已经在镜像本地仓库(docker images中可以查看到),所以取消创建前总是拉去镜像的勾选。

点击添加映射端口,第一个9001位主机公开端口,第二个9001位私有容器端口。

最后滚动到页面最下面,点击创建,完成zuul服务的创建。

回到microservice应用的服务列表管理界面,可以看到zuul已经启动。

看看eureka管理界面中,zuul服务是否已经注册上来

也可通过zuul的网关代理,来访问article服务

6.4 添加mysql服务(可选步骤,但推荐观看,学习下rancher中,添加服务时,如何配置环境变量,以及在容器中执行命令行)

上面我们已经把eureka、article、zuul三个服务,都移植到了通过rancher来管理。唯独剩下一个mysql服务,然后也在被rancher管理,但是没有放到rancher的某个应用中,如果是多数据源系统,则不同的应用需要不同的数据库。

刚说了mysql也被rancher管理,怎么没看到呢?其实就是在主机里,下面的独立容器中,可以看到mysql服务,该mysql服务,和应用中的服务是一样的,都可方便的进行操作,和查看日志等等。

那么如何把mysql也放到应用中呢?(目的是为了演示如何在添加服务时,配置环境变量)

可以看到mysql当前处于启动状态,首先我们需要把该mysql服务停止并删除掉。注意:删除mysql之前,记得把mysql中的数据先导出来,备份一下(可使用Navicat工具,连接数据库,导出结构和数据)。

可通过点击上图中mysql后面竖着的三点来选择停止和删除,也可通过如下命令进行停止和删除。

$ sudo docker stop mysql
$ sudo docker rm mysql

然后点击顶部导航栏中的应用,选择全部,回到全部应用列表管理界面

可点击添加服务,(和点击microservice进入microservice应用的服务列表管理界面,再点击添加服务,效果是一样的)

进入添加服务界面

配置详解:

名称、描述,都是rancher中标识用的。

选择镜像输入centos/mysql-57-centos7,因为我pull下来的不是名为mysql的镜像,而是pull的一个名为centos/mysql-57-centos7的mysql镜像。而且该centos/mysql-57-centos7的镜像,已经在镜像本地仓库(docker images中可以查看到),所以取消创建前总是拉去镜像的勾选。

点击添加映射端口,第一个3306位主机公开端口,第二个3306位私有容器端口。

在命令标签页,环境变量处,点击添加环境变量,把MYSQL_ROOT_PASSWORD=123456粘贴进去。

最后点击创建,完成mysql服务的创建。

回到microservice应用的服务列表管理界面,可以看到mysql已经启动。

如果我们此时再访问article服务,会发现访问不了,出现500错误。

我们点击article进入article服务,查看article运行日志,可以看到原来是无法连接docker数据库

通过Naticat软件,是可以连接到该mysql服务的,但是该数据库里,却没了我们的数据库docker,以及相关的表和数据(这也就是为什么让大家在删除前先备份的原因)。

我们通过Naticat新建一个数据库docker,字符集为utf8,排序规则为utf8_general_ci,创建好数据库之后。在数据库docker下,在表上右键,选择运行SQL文件,在打开的窗口中,选择前面备份的docker.sql文件,然后点击开始即可。推荐使用这种外部工具导入的方式,回复数据库中数据。

除上诉方式外,也可通过点击mysql服务,选择容器标签,然后点击后面竖着的三点,点击执行命令行(该中方式会有问题,具体什么问题,接着往下看)

然后在打开的黑乎乎的命令行界面,执行如下命令:

mysql -u root -p
#在出现Enter password:时,按回车,连接mysql数据库,进入mysql>命令行模式

#查看当前所有数据库,发现并没有一个名为docker的数据库
show databases;

#创建docker数据库,指定字符集和排序规则
create database docker default character set utf8 collate utf8_general_ci;

#选择docker数据库
use docker;

#创建tb_article表

CREATE TABLE `tb_article`  (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `title` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `content` mediumtext CHARACTER SET utf8 COLLATE utf8_general_ci NULL,
  `author` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `add_time` datetime(0) NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = MyISAM AUTO_INCREMENT = 5 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

#插入数据INSERT INTO `tb_article` VALUES (1, ‘docker‘, ‘部署微服务‘, ‘tom‘, ‘2019-03-20 08:00:00‘);

界面如下图所示:

注意:该命令行模式,不支持中文输入,所以,上面的insert语句中的content字段的内容“部署微服务”,被自动替换为空。以上演示,主要是告诉大家如何在rancher中使用命令行,以及需要注意的地方。

到此,docker数据库已经创建好了,并有了相应数据,此时,我们再来刷新article服务看看:

好了,到此,把手动创建服务,改造成在rancher中创建服务,已经完成。

docker微服务部署之:七、Rancher进行微服务扩容和缩容

原文地址:https://www.cnblogs.com/ztone/p/10580704.html

时间: 2024-10-11 23:41:37

docker微服务部署之:六、Rancher管理部署微服务的相关文章

如何使用Docker、Docker-Compose和Rancher搭建部署Pipeline(四)

在这篇文章中,我们将讨论如何用Rancher实现consul的服务发现. 如果你还没有准备好,推荐你阅读本系列中先前的文章: 第一篇:CI /CD和Docker入门 第二篇:使部署逻辑向使用Docker Compose更进一步 第三篇:借力Rancher完成容器编排 在这构建部署流水线系列的最后一篇文章中,我们将探讨在转换到Rancher进行集群调度时面临的一些挑战.在之前的文章中,我们通过使用Rancher执行调度,让运维人员无须再负责选择每一次容器运行的位置.要使用这个新方案,我们必须让环境

微服务实战(六):选择微服务部署策略

动机 部署一个单体式应用意味运行大型应用的多个副本,典型的提供若干个(N)服务器(物理或者虚拟),运行若干个(M)个应用实例.部署单体式应用不会很直接,但是肯定比部署微服务应用简单些. 一个微服务应用由上百个服务构成,服务可以采用不同语言和框架分别写就.每个服务都是一个单一应用,可以有自己的部署.资源.扩展和监控需求.例如,可以根据服务需求运行若干个服务实例,除此之外,每个实例必须有自己的CPU,内存和I/O资源.尽管很复杂,但是更挑战的是服务部署必须快速.可靠和性价比高. 有一些微服务部署的模

如何使用Docker、Docker-Compose和Rancher搭建部署Pipeline(二)

在这一系列文章的第一篇中,我们分享了只用Docker时我们开发的初步的工作流,如何创建一个基础的构建和部署流水线.容器的部署方式不再是在登陆server的时候从内存中输入Docker命令.我们已经通过Jenkins server实现了镜像的自动化构建.我们使用脚本将Docker命令进行封装,将其存储到GitHub中并且设置版本.目前我们正采取措施,通过逐步改善现有过程来实现持续部署.然而,仍有一些痛点需要我们去解决.在这篇文章中,我们将看看如何使用Docker Compose 和 Ansible

可能是最详细的部署:Docker Registry企业级私有镜像仓库Harbor管理WEB UI

上一篇文章搭建了一个具有基础功能,权限认证.TLS 的私有仓库,但是Docker Registry 作为镜像仓库,连管理界面都没有,甚至连一些运维必备的功能都是缺失的,还有什么 Docker 镜像仓库管理工具呢?这里有一个简单好用的企业级 Registry 服务器 - Harbor,推荐在生产环境上使用. Harbor 简介 Harbor是VMware公司开源的企业级Docker Registry项目,其目标是帮助用户迅速搭建一个企业级的Docker registry服务. 它以Docker公司

SpringCloud系列四:Eureka 服务发现框架(定义 Eureka 服务端、Eureka 服务信息、Eureka 发现管理、Eureka 安全配置、Eureka-HA(高可用) 机制、Eureka 服务打包部署)

1.概念:Eureka 服务发现框架 2.具体内容 对于服务发现框架可以简单的理解为服务的注册以及使用操作步骤,例如:在 ZooKeeper 组件,这个组件里面已经明确的描述了一个服务的注册以及发现操作流程,在整个 Rest 架构里面,会存在有大量的微服务的信息. 在 SpringCloud 之中使用了大量的 Netflix 的开源项目,而其中 Eureka 就属于 Netflix 提供的发现服务组件,所有的微服务在使用之中全部向 Eureka 之中进行注册,而后客户端直接利用 Eureka 进

k8s 集群管理和微服务 适合做啥

k8s 集群管理和微服务 适合做啥 都知道k8s是集群 适合微服务 有很多教程 但你可以先了解他能干啥 traefix 是负载均衡工具 k8s 适合部署无状态依赖的微服务 可以按需求开启多个微服务 管理工具能自动发现并均衡 像redis sql ceph(对象存储)这些 支撑 和有状态依赖的服务 并不适合k8 原文地址:https://www.cnblogs.com/ham-731/p/12231693.html

如何更高效的管理原生微服务应用

阿里云分布式应用服务EDAS 最近发布了支持原生Dubbo和Spring Cloud应用功能的新版本,此功能是以非侵入方式支持的,且几乎不需要修改任何代码.在此我们体验了一下如何在EDAS上部署原生Dubbo和Spring Cloud应用. 原生Dubbo应用自从阿里重启Dubbo维护以来,其热度迅速蹿升,Github上的星标数已经达到了2.2万个之多,可谓中国开源软件界的明星产品.但是作为自家商业化输出的EDAS产品,却一直以来只能支持闭源的HSF微服务框架,对用户而言不能不说是一种遗憾.虽然

分析解剖微服务系列(一)-什么是微服务

微服务架构,是以专注单一责任的小型功能模块为基础.通过API集相互通讯的方式完成复杂业务系统搭建的一种设计思想 一.架构趋势图 软件发展的不同时期.阶段,对技术的理解.选择和应用都有着不一样的诉求.架构的选型,永远只有“合适与不合适”,永远没有“哪个更好”的说法.我们今天来谈论微服务,并不是因为它更牛,而是经过谨慎分析,认为微服务的思想更符合我们的目标. 二.微服务的故事 很久以前的一天,Martin 在跟好友的交流中悟到了一种很棒的架构设计.他总结了一下,然后告诉了好友,好友说,这不是新鲜东西

OpenStack入门篇(九)之nova服务(控制节点)的部署与测试

1.Nova介绍 Nova是openstack最早的两块模块之一,另一个是对象存储swift.在openstack体系中一个叫做计算节点,一个叫做控制节点.这个主要和nova相关,我们把安装为计算节点成为:nova-compute,把除了nova-compute叫做控制节点.nova-compute是创建虚拟机的,只是创建虚拟机,所有的控制都在另一台上.OpenStack计算组件请求OpenStack Identity服务进行认证:请求OpenStack Image服务提供磁盘镜像:为OpenS