Fleet问题

Fleet问题1.  是否能自由部署fleetservices在1台或多台machine上。(可以指定部署1个服务在某台机器上,或者指定某个服务在多台机器上)

大家好,又见面了,我是你们的朋友全栈君。

机器:10.58.9.85 / 10.58.9.82 / 10.58.9.83 / 10.58.9.86
概念:(以下名称中Unit也可以称作Service,如UnitFile也可以叫ServiceFile)
(1)UnitFile :单元文件,类似Java类的概念,例子https://github.com/coreos/fleet/blob/master/Documentation/examples/example-deployment.md
(2)Unit:单元实例,对应概念Java实例</p>
(3)TemplateUnitFile:示例:wys-wpa@.service, 这是一个TemplateUnitFile,如果我们想通过这个模板UnitFile来启动多个Unit,可以这样
fleetctl start wys-wpa@{1..3}.service 
wys-wpa@1.service               <span style="font-family: Arial, Helvetica, sans-serif;">336043c3.../10.58.9.85  active  running</span>
wys-wpa@2.service               364cd1ff.../10.58.9.83  active  running
wys-wpa@3.service               364cd1ff.../10.58.9.83  active  running

这里面的每一个在跑的Unit我们叫做一个Unit的实例,如wys-wpa@1.service可以称作wys-wpa实例1,他们都对应一个UntFile,只是可能通过Unit名称传进去的参数不同

另外还有语法如fleetctl start wys-wpa@{1,5,7}.service 

(4)如何传参数进Unit

3中提到通过启动Unit的名称传递参数,这是systemd的特性,官方文档是这样的http://www.freedesktop.org/software/systemd/man/systemd.unit.html#Specifiers

%i Instance name For instantiated units: this is the string between the “@” character and the suffix of the unit name.
%p Prefix name For instantiated units, this refers to the string before the “@” character of the unit name. For non-instantiated units, this refers to the name of the unit with the type suffix removed.

也就是说我们启动wys-wpa@1.service时,%i=1,%p=wys-wpa

如果我们wys-wpa@.service这个UnitFile中有这样一句话

ExecStart=/usr/bin/docker run -name wpa%i -p 1000%i:80 wordpress

那么就可以相当于在启动时动态指定某些参数,最重要的在于可以动态指定端口

1.     是否能 自由部署fleetservices 在1台或多台 machine 上。(可以指定部署1个服务在某台机器上,或者指定某个服务在多台机器上)

答:可以通过UnitFile 的 MachineID 参数来精准控制这个UnitFile对应的Unit应该跑在哪个机器上; 可以通过UnitFIle中Gloable=true 来将这个Unit跑到所有的集群中的机器上,注意此时并不通过Fleet的engine来进行调度,而只是会参考UnitFIle中[X-Fleet]的参数来判断符合条件的机器,把Unit跑在上面;另外我认为同一服务的不同实例(如对应wys-wpa@service这个UnitFile的wys-wpa@1.service,wys-wpa@2.service也可以指定跑在同一个Machine上,只要他们的端口不冲突

实验:

(1)指定一个Unit(Service)跑在一台机器上(注意–etcd-key-prefix指定了前缀,所有命令都要加上这一个参数,否则fleetctl会默认去/_coreos.com/fleet/下找key value)

1.fleetctl –etcd-key-prefix=/fleet list-machines -l

MACHINE                                 IP              METADATA
336043c3dba3e566192154d0544f626d        10.58.9.85      role=default
364cd1ff8ac5dc300e15c293544f7cec        10.58.9.83      'role=default'
93499a83f33431a60235662254573164        10.58.9.86      'role=default'
e3583575125c30bdf50d4473544f7eba        10.58.9.82      'role=default'

2.vim wys-wpa@.service ,Template Unit File 如下

[Unit]
Descrption=Wordpress All Service (Connect to MOSSIN DB instance)
After=docker.service
Requires=docker.service
[Service]
EnvironementFile=/lib/systemd/system/wys-wpa-env
TimeoutStartSec=0
ExecStartPre=-/usr/bin/docker kill wpa%i
ExecStartPre=-/usr/bin/docker rm wpa%i
ExecStart=/usr/bin/docker run -p 1000%i:80 -name wpa%i tutum/wordpress
ExecStop=/usr/bin/docker stop wpa%i
ExecStop=/usr/bin/docker kill wpa%i
[X-Fleet]
MachineID=e3583575125c30bdf50d4473544f7eba

3.systemctl daemon-reload

4.fleetctl -etcd-key-prefix=/fleet start wys-wpa@{2..3}.service

Unit wys-wpa@2.service launched on e3583575.../10.58.9.82
Unit wys-wpa@3.service launched on e3583575.../10.58.9.82
5.fleetctl -etcd-key-prefix=/fleet list-units

wys-wpa@2.service               e3583575.../10.58.9.82  active          running
wys-wpa@3.service               e3583575.../10.58.9.82  active          running

可以看到两个service都在指定的机器上跑了

6.在82上netstat -tulpn可以看到docker-proxy占用了10002,10003端口

这个实验也解决了“同一服务的不同实例”是否可以跑在同一个机器上的问题,只要端口不冲突,都是可以的

7.另一种方法:我们也可以通过

MachineMetadata Limit eligible machines to those with this specific metadata.

这个参数来匹配Unit到不同的Machine上,这需要在启动fleetd的时候加上-metadata这样的参数,需要在UnitFile中改动

设想:我觉得在实际运维过程中应该使用MetaData这样的方法,这样的方法更灵活,比如一个机器可以设置两个Meatadata参数:“AppServerMachineCluster”,“10.58.9.83”

假设我们有一个Unit file叫做Appserver@.service,我们可以在这个基础上搞出一个Appserver-cluster@.service这样的TemplateUnitFile,并且在里面设置Matadata包含AppServerMachineCluster,这样就可以部署到对应的集群上面。如果想专门部署到83上,则可以搞一个Appserver-83@.service,并在里面设置Metadata包含10.58.9.83,这样这个Unit就会只跑在83上了

(2)一个service部署在多台机器上

将wys-wpa@.service中加入,

[X-Fleet]
Global=true

fleetctl –etcd-key-prefix=/fleet start wys-wpa@{3..3}.service

可以看到

wys-wpa@3.service               2855ac14.../10.58.9.82  active          running
wys-wpa@3.service               da060b6c.../10.58.9.85  active          running

两个服务同名,使用

fleetctl –etcd-key-prefix=fleet destroy wys-wpa@3.service

可以将两个Unit一起destroy掉

根据官方的说法,这种global unit用于在每台机器上采集信息这样的程序

global unit的schedule尽管不通过Engine,但也会考虑Metadata的匹配问题,metadata不合适的机器上是不会跑起来的

目前发现Global unit的Status是没法观测的

fleetctl --etcd-key-prefix=fleet status wys-wpa@3.service
Unable to determine status of global unit wys-wpa@3.service.

2.指定任意埠在某个服务,发布时自动增加,埠可控制区间对于某个服务来说,如[20001-20010]=apps.war

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/129977.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 全球NB-IoT发展面临六大挑战

    全球NB-IoT发展面临六大挑战

    2022年3月4日
    37
  • 小熊工厂 bt[通俗易懂]

    小熊工厂 bt[通俗易懂]Welcometomyblog!小熊工厂 软件大小:20986KB软件语言:简体中文软件类别:国产软件/共享版/趣味软件应用平台:Win9x/NT/2000/XP/2003界面预览:无插件情况: 投诉更新时间:2006-09-2214:55:33下载次数:4426推荐等级:联系人:ricky408163.com开发商:小熊工厂

    2022年6月13日
    33
  • Javaweb实现旅游管理系统(商城项目)(一)

    Javaweb实现旅游管理系统(商城项目)(一)一.选题的意义及选题内容概述随着信息资源的逐步网络化,信息消费者将被笼罩在巨大的信息网络之中,并由此而具备充分的获取信息的能力。此时,消费者对信息的需求将更具针对性,更为个性化。因此,网络信息服务具有传统信息服务所不具备的双向性,消费者能够更多地参与信息服务的过程,从而加速个性化服务时代的到来。锻炼自己的操作能力,将大学理论课程的学习转化为动手能力提高的基础。通过本系统,用户可以方便查询旅

    2022年6月6日
    107
  • vue跨域解决方案_vueaxios跨域请求

    vue跨域解决方案_vueaxios跨域请求vue跨域解决方案在浏览器里面只要域名,端口,ip地址,协议,有任何不同则为跨域如:A网站:http://localhost:8080/B网站:http://localhost:3030/已经跨域解决方案:JOSNP(只能处理get请求)cors(后端开启)axios服务器代理跨域只存在浏览器中服务器之间不存在跨域所以可以通过服务器代理(在后端不给配置的情况下)1.先下载axios2.先创建一个vue.config.js文

    2022年10月1日
    1
  • mybatis返回对象_存储过程不能返回结果

    mybatis返回对象_存储过程不能返回结果论MyBatis返回结果集_返回实体类还是Map在更多的了解mybatis后发现不单单通过实体类可以直接返回数据,还可以直接返回一个Map结果集(resultType="java.util.Map"),如果是多条数据则返回一个List&lt;Map&lt;String,Object&gt;&gt;结果集。很多人会觉得发现,直接返回一个Map的话太方便了,什么映射什么的全都不用管,只用在sql书…

    2022年10月4日
    2
  • linux修改用户名命令6,linux用命令改用户名

    linux修改用户名命令6,linux用命令改用户名怎样更改linux的用户名Linux中可以使用usermod命令更改用户名,具体的操作方法如下:首先打开linux的终端,输入指令修改用户名,简单的用户名修改是usermod加参数l,后面跟新用户名,最后是旧用户名。此时用cd命令来到home目录,会发现存在一点小问题。linux下命令怎么修改用户名先用终端进入到根目录下的root文件夹然后su权限不用我说了吧然后用下面这个命令:usermo…

    2022年9月17日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号