fabricjs中文文档_fabricjs教程
2025-04-02 13:23 - 立有生活网
关于fabric 并行执行任务求助
$ fab taskA taskB上篇笔记介绍了Fabric的概念、支持的元作及task的定义方法,本篇笔记旨在说明如何在多台目标机器上正确地执行tasks以实现远程自动部署或运维。特别地,文中会说明如何配置fabric task以便远程执行命令时不会弹出密码输入提示。
fabricjs中文文档_fabricjs教程
fabricjs中文文档_fabricjs教程
1) Per-task, command-line host lists (fab mytask:host=host1) override absoluy rything else.
1. Fabric的任务运行规则
的确我们看下来,TungstenFabric就像文档上面所说的,对OpenShift的支持,还是比其它开源软件或商业软件要好很多,至少还能看到用TungstenFabric做二次开发的曙光。根据Fabric Execution model的说明,fabric默认以串行方式运行tasks,具体而言:
1)在fabfile及其import文件中定义的task对象依次被创建(只是创建对象,并未真正执行),任务之间保持其定义的先后顺序。
2)对于每个task,生成将要运行该task的目标机器列表。
3)fab执行tasks时,按任务被指定的顺序依次执行这些任务;针对每个任务,依次在其指定的目标机器运行且只运行一次。
4)未指定目标机器的task被当作本地任务运行,且只会被运行一次。
设在fabfile.py中定义了如下tasks:
from fabric.api import run, envenv.hosts = ['host1', 'host2']def taskA(): run('ls')def taskB(): run('whoami')
在终端运行fab –list时,我们会看到taskA和taskB两个任务,运行之:
结果示例如下:
通过上面的实例,大家应该可以明白fabric默认的串行执行策略是怎么回事。
Fabric还允许我们指定以并行方式(借助multiprocessing模块实现多个进程并行执行)在多台机器上并行地运行任务,甚至还可在同一个fabfile文件中指定某些task以并行方式运行,而某些task以默认的串行方式运行。具体地,可以借助@parallel或@serial指定任务的运行模式,还可以在命令行中通过-P参数指定任务是否要并性执行。示例如下:
from fabric.api import @paralleldef runs_in_parallel(): passdef runs_serially(): pass
当运行如下命令时:
$ fab -H host1,host2,host3 runs_in_parallel runs_serially
执行结果示例如下:
runs_in_parallel on host1, host2, and host3runs_serially on host1runs_serially on host2runs_serially on host3
此外,还可以通过对@parallel传入pool_size参数来控制并行进程数以防并行进程太多把机器拖垮。
2. 为task指定目标机器
有多种方式可以指定任务的将要运行的目标机器,下面分别进行说明。
1)通过env.hosts或env.roles进行全局指定
Fabric的env模块中定义了一系列全局变量,可以将其理解为可以控制fabric行为的环境变量。其中env.hosts和env.roles可以用来全局指定task的目标机器列表,这两个“环境变量”的默认值都是空列表[]。
env.hosts的元素是fabric约定的”host strings”,每个host strings由username@hostname:port三部分构成,其中username和port部分可以缺省。本篇笔记前面的第1个代码实例其实已经说明了如何用env.hosts全局地指定task的目标机器列表,这里不再赘述。
env.roles则是在配置了env.roledefs的情况下才有用武之地。在很多时候,不同的机器有着不同的角色,如有些是接入层,有些是业务层,有些是数据存储层。env.roledefs可以用来组织这些机器列表以体现其角色,示例如下:
from fabric.api import envenv.roledefs = { 'web': { 'hosts': ['www1', 'www2', 'www3'], }, 'db': { 'hosts': ['db1', 'db2'], }}@roles('web')def mytask(): run('ls /var/www')
上例通过env.roledefs配置了两个角色web和db,分别包含3台、2台机器,并借助@roles为mytask指定了目标机器列表。
2)通过命令行进行全局指定
$ fab -H host1,host2 mytask
需要注意的是,命令行通过-H参数指定的机器列表在fabfile脚本load前被解释,故如果fabfile中重新配置了env.hosts或env.roles,则命令行指定的机器列表会被覆盖。为了避免fabfile覆盖命令行参数,在fabfile中应该借助list.extend()指定env.hosts或env.roles,示例如下:
from fabric.api import env, runenv.hosts.extend(['host3', 'host4'])def mytask(): run('ls /var/www')
此时,当我们运行”fab -H host1,host2 mytask”时,env.hosts包含来自命令行和fabfile的4台机器。
3)通过命令行为每个任务指定机器列表
$ fab mytask:hosts="host1;host2"
上述方式会覆盖全局指定的机器列表,确保mytask只会在host1, host2上执行。
4)借助装饰器@hosts为每个任务指定目标机器
from fabric.api import hosts, run@hosts('host1', 'host2')def mytask(): run('ls /var/www')
或者:
my_hosts = ('host1', 'host2')@hosts(my_hosts)def mytask(): # ...
每个任务的@hosts装饰器指定的机器列表会覆盖全局目标机器列表,但不会覆盖通过命令行为该任务单独指定的目标机器列表。
上述4种为task指定目标机器列表的方式之间的优先级规则总结如下:
4) Globally specified host lists set on the command-line (–hosts=host1) will initialize the env variables, but that’s it.
截止目前,我们可以看到,fabric允许我们混合使用上面列出的几种目标机器指定方式,但是我们要明白混合的结果是否符合预期。
此外,fabric默认会对通过不同来源出现多次的同一个目标机器做去重,当然,可以通过设置env.dedupe_hosts为False来关闭默认的去重策略。甚至还可以指定任务需要跳过的机器列表。具体细节可以参考Fabric Execution model的说明,这里不赘述。
3. 任务执行时,目标机器的密码管理
1)通过env.password或env.passwords配置目标机器的登录信息
#!/bin/env python#-- encoding: utf-8 --from fabric.api import run, env, hosts## 需要注意的是,这里的host strings必须由username@host:port三部分构成,缺一不可,否则运行时还是会要求输入密码env.passwords = { 'slvher@10.123.11.209:22': 'xxx', 'work@10.123.11.210:23': 'yyy',}@hosts('10.123.11.209', '10.123.11.210')def host_os_type(): run('uname -a')
由于通过env.passwords配置了目标机器的登录用户名/密码,所以,当我们在终端运行fab host_os_type时,会发现不用手动输入密码了,大大方便了脚本远程自动执行。
但是,这种明文指定登录名/密码的方式存在安全性问题,所以,fabric还支持以ssh key认证的方式免密在远程机器执行任务。
在具体实现上,需要事先在目标机器上生成ssh public key并配置在~/.ssh/config文件中,然后在定义任务的fabfile中将env.use_ssh_config设置为True来启用基于ssh public key方式的身份认证,以便实现免密码远程执行任务。
具体细节可以参考Fabric Lraging native SSH config files文档的说明,或者参考StackOverflow的这篇帖子Connecting to a host listed in ~/.ssh/config when using Fabric,限于篇幅,这里不再赘述。
,DigitalOcean上一篇Fabric教程How To Use Fabric To Automate Administration Tasks And Deployments,浅显易懂,值得一读。Enjoy it
TungstenFabric:连接CMP的金钥匙
如果你亲自运行上面的示例代码,就会发现,每次在目标机器远程执行task时,fabric均会要求输入目标机器的登录名及密码。如果要在多台机器上执行task,那这些密码输入的过程可以自动化吗?作者:钱誉
TF中文社区3月Meetup活动,将聚焦TungstenFabric与K8s的集成,由重量级嘉宾分享TungstenFabric与K8s的部署和实践,详细演示作过程,并解答关于TungstenFabric和K8s的一切问题。关注TF中文社区公众号,后台点击会议活动-Meetup参与。我们找了不多10个SDN技术,从商用的到开源的,再到国产小范围应用的。
对比所有的Portal去看,不管是OpenStack还是原生的K8s,基本都是以运维视角出发的,不是一个对外提供业务的case。
在云网络环境里,可能一个租户下面无数虚拟机,里面跑了无数不同的应用方式,所有流的走向又是乱七八糟的。
OpenShift虽然是有OVS,能不能和OpenStack互通是存疑的,验证下来也是不能通的,完全是两个体系。
进入CMP的时代,如果一个应用场景在15分钟内开不起来的话,那它就失败了,更不要说借助第三方外力。
本文整理自上海数讯CIO钱誉在TF中文社区2020次Meetup上的演讲,分享早期云网络实际应用和二次开发过程中的经验教训。XXX作为合作方,经主办方和演讲者审阅授权发布。
本次演讲及TF中文社区2020次Meetup活动资料,请在TF中文社区公众号后台点击会议活动-Meetup领取。
上海数讯CIO钱誉
上海数讯是一家以传统数据中心业务为主的公司,为什么会转到云计算呢?在2011年以后,整个数据中心行业越来越像房地产了,数据中心这种业务可性比较强,竞争激烈。到2013年的时候,有一些新的技术出来,包括OpenStack的爆发式增长,于是2014年开始决定去做云计算这个事情。
当初的定义是多平台,从实际应用场景来看的话,不是说虚拟机和容器哪个好,它们两个应用在不同的场景,没有谁替代谁的问题,要做两个平台的时候,又碰到一个很尴尬的问题,虚拟机的网络和容器的网络,完全是两回事。
中间我们找了不多10个SDN技术,从商用的到开源的,再到国产小范围应用的,那个时候TungstenFabric还叫OpenContrail,当时的版本还只支持OpenStack。
CMP是这几年提出来的,但刚开始做的时候,已经有CMP的理念了。
对比所有的Portal去看,不管是OpenStack还是原生的K8s,基本都是以运维视角出发的,不是一个对外提供业务的一个case。所以从使用者来看的话,是一件非常痛苦的事情,当时我们就决定把两个平台统一,在Web上做一个完整的、基于用户自己界面的平台。
在那个时候,确定了数讯云平台和SDN的方向,当时主要是OpenStack和K8s。我们发现一个问题,K8s不是一个PaaS平台,只是解决了一个docker管理的问题。如果是小环境的话,用不用都无所谓,不一定非要搞SDN,包括OpenStack也一样,如果业务环境不是过于复杂的话,其实跑传统的VLAN,只要控制量,没有广播风暴,没有任何问题。
但如果你的业务场景非常复杂,以前收纳在虚拟机,现在收纳在容器里,这种业务的出现,会对网络造成非常大的困境,不可能对每个线的业务去做策略。一旦出现业务迁移或troubleshooting的时候,后端运维人员是崩溃的,没法调。以前写个PBR,写个静态路由,最多是挂几个交换机路由。在云网络环境里完全不是这样,可能一个租户下面无数虚拟机,里面跑了无数不同的应用方式,所有流的走向又是乱七八糟的,这种情况下,如果用传统的方式,基本就不用做了,因为看不到头。所以要采用SDN的方式。
TungstenFabric的确非常,但也有一些问题存在,完全支持OVSDB的交换机,对TungstenFabric的兼容会更好一点。也不是说Openflow不行,用流表的方式也能做,但那就比较折腾了。
数讯的底层Port,就是底层通过TungstenFabric的SDN技术支持线。当时2015年OpenContrail时代的时候,K8s刚开放,我们提出要采用基于容器的方式,因为虚拟机的方式对运维、扩容、迁移有弊端的话,后面业务是很难有保证的。那个时候OpenStack也比较早期,基本上都是自己统一部署,和Junipernetworks联合开发的时候,把OpenContrail放在一起部署。
这里就解决了VLAN映射的问题,不可能为用户提供专线,还要改变他的VLAN网络,这是不现实的,所以在这上面做了大量的二次开发。包括OpenStack和OpenShift,开源社区的版本都是单,到真正地应用到场景的话,最起码要保证多,社区版的东西要落到生产环境,包括和TungstenFabric对接,还是有很多二次开发要做。
这是在开发和调研中碰到的实际用例的问题,有些是我们自己的,有些是用户应用场景中的。
Neutron稳定性比较,我们曾经实测过,开到0个虚拟机会出现莫名其妙的抖动,导致全部崩溃,对于原生的Neutron,我们还是比较谨慎的。
如果K8s只是实现单一业务,基本原生的Flannel或Calico都能解决,Calico对于多数据中心多任务的方式是不提供支持的,Calico是目前K8s开源环境使用最多的。
OpenShift虽然是有OVS,能不能和OpenStack互通是存疑的,验证下来也是不能通的,完全是两个体系。
另外VNF和CNF是否能够共存,也是未知。为什么虚拟机要去访问容器?在我们看来极其不合理,但在金融行业或电商行业,某些业务可以跑虚拟机,某些已经买了商业软件,或者有些用户自己有开发能力,已经把一部分东西放到容器里了。
以前我们在虚拟机开一堆负载均衡,但在容器里直接一个Node无数port就解决了,包括很多注册机机制不能portal,总不能把网络做分段再做转接,他们觉得非常难,看有没有可能解决这个问题。我们试错下来,在最近解决了VNF和CNF在OpenStack虚拟机层面的互通问题,要用到管理网去做互通。
虚拟机网络与容器网络二层互访,在TungstenFabric4.0版本的时候是基于标签的方式,能用,但是用起来不方便。到现在5.1版本的时候,整个Portal也没有把这个拉出来作为一个选项,每次都要去翻虚拟机和容器去做对应,这个作比较麻烦,我们也试过做二次开发,比较累。如果有可能的话,把这两个东西放在一起,管理起来就会非常方便。
软件定义的FW、LB如何在跨场景中业务落地?大部分用户场景里,都是用商业软件,各种品牌都有,自己本身提供image,放到虚拟机都有自己的feature,怎么和TungstenFabric互通,肯定是要做二次开发的,但目前看来也就TungstenFabric有可能去做,其它的比较困难。
VPC的问题,在我们的理解里,TungstenFabric的VPC可以理解为现在国内SDNweb更合理,两段VPN建立隧道。至于你要管到公有云的虚拟机,好像不太可能。即使是给到你,可能也会放弃,光是版本迭代问题就没法解决。没人做这样的事情。好处是有Portal,能够看到整个业务的实际情况。
吐槽一下,TungstenFabric确实解决了OpenStack网络拓展和稳定性问题,但对网卡有点挑,在一些特殊的应用场景里,比如跑VDI的IDP协议,我们发现In和Broadcom的网卡不那么友善。
相比OpenStack,目前为止TungstenFabric和OpenShift的对接难度更大一点。OpenShift开源的OKD本身就有一些问题,另外只是把TungstenFabric和OpenShift或K8s装在一起,简单应用看不出问题,但如果跑几个业务链,比如标签、应用、路由、业务编排等,整个流程走下去会有问题。
关于服务链,如果能够和端口去做匹配,可能更好一点,不要干预整条网络的属性,在某些特定场景里面会比较复杂。
多云环境我们目前适配下来,只有AWS和Azure是可以的,不过还是根据实际的应用场景出发,也没必要把所有的公有云平台对接一遍,业务也没有那么复杂。
支持DPDK及artNIC我们实测过,在OpenStack默认的kernel环境下,达到安全厂商他们的软件标准,基本达不到,只有使用DPDK的方式才能达到标称值,但DPDK又是In的专属,在实际场景中碰到了一些问题,有的应用能跑起来,有的就不行。所以,要使用DPDK方式的话,还是要根据自己的使用场景去看一下。
TungstenFabric提供类似REST的API,所以即使自己要做CMP的话,去调用后端的参数,相对还是比较容易的,但针对API的文档有点乱。
到现在,我们做云计算是非常认真的,从2014年到现在一直在不断打磨自己的平台,所有的视角都是以用户实例去呈现,包括把TungstenFabric后端的API腾挪到前端,针对某个租户他就能根据自己的策略去调。进入CMP的时代,如果一个应用场景在15分钟内开不起来的话,那它就失败了,更不要说借助第三方外3) Globally specified host lists set in the fabfile (env.hosts = [‘host1’]) can override such lists set on the command-line, but only if you’re not careful (or want them to.)力。把很多权限都开放给用户。
我们的PaaS后端是OpenShift,基于PaaS平台的所有业务都在前端重做,包括TungstenFabric针对OpenShift的功能,都放在前端,包括TungstenFabric内部都可以,不用非常原始的SNMP的方式做采集,完全不需要。
目前为止,数讯的平台做到了这个程度。选择TungstenFabric是因为协议相对标准,BGPVPN就能解决,我比较抵触私有协议,某些友商总想搞个大一统,也不太可能,还是开放式大家比较能接受。
谈到VXLAN的问题,实际用下来,如果用kernel方式,如果量很大损耗还是很大,特别针对VXLAN没有做特别优化的交换机或网卡,直接性能损失大概在30%左右。
从整个TungstenFabric去看的话,基本上把不同的平台、不同的网络特性都统一管理起来了,只是容器和虚拟机还是有一定手动的工作量,如果TungstenFabric把这个问题解决掉会更好。另外,TungstenFabric在OpenStack和OpenShift认证机制上不太一致。
我们应用TungstenFabric比较早,从3.2版本就开始搞,4.0版本正式对接。我相信如果有自己的业务逻辑,有一定的开发能力,基于TungstenFabric能打造出属于自己的好的产品,TungstenFabric可编程型比较强,通用性也比较强。满分100的话,我打80分,剩下的20分是支持方面。
以上,我从实际的应用场景,到开发当中遇到的各种情况,抛出了一些问题。
非常感谢大家!
本次演讲及TF中文社区2020次Meetup活动资料,请在TF中文社区公众号后台点击会议活动-Meetup参与。
TungstenFabric:连接CMP的金钥匙
taskA executed on host1taskA executed on host2taskB executed on host1taskB executed on host2作者:钱誉
2) Per-task, decorator-specified host lists (@hosts(‘host1’)) override the env variables.我们找了不多10个SDN技术,从商用的到开源的,再到国产小范围应用的。
对比所有的Portal去看,不管是OpenStack还是原生的K8s,基本都是以运维视角出发的,不是一个对外提供业务的case。
在云网络环境里,可能一个租户下面无数虚拟机,里面跑了无数不同的应用方式,所有流的走向又是乱七八糟的。
OpenShift虽然是有OVS,能不能和OpenStack互通是存疑的,验证下来也是不能通的,完全是两个体系。
进入CMP的时代,如果一个应用场景在15分钟内开不起来的话,那它就失败了,更不要说借助第三方外力。
本文整理自上海数讯CIO钱誉在TF中文社区2020次Meetup上的演讲,分享早期云网络实际应用和二次开发过程中的经验教训。XXX作为合作方,经主办方和演讲者审阅授权发布。
本次演讲及TF中文社区2020次Meetup活动资料,请在TF中文社区公众号后台点击会议活动-Meetup领取。
上海数讯CIO钱誉
上海数讯是一家以传统数据中心业务为主的公司,为什么会转到云计算呢?在2011年以后,整个数据中心行业越来越像房地产了,数据中心这种业务可性比较强,竞争激烈。到2013年的时候,有一些新的技术出来,包括OpenStack的爆发式增长,于是2014年开始决定去做云计算这个事情。
当初的定义是多平台,从实际应用场景来看的话,不是说虚拟机和容器哪个好,它们两个应用在不同的场景,没有谁替代谁的问题,要做两个平台的时候,又碰到一个很尴尬的问题,虚拟机的网络和容器的网络,完全是两回事。
中间我们找了不多10个SDN技术,从商用的到开源的,再到国产小范围应用的,那个时候TungstenFabric还叫OpenContrail,当时的版本还只支持OpenStack。
CMP是这几年提出来的,但刚开始做的时候,已经有CMP的理念了。
对比所有的Portal去看,不管是OpenStack还是原生的K8s,基本都是以运维视角出发的,不是一个对外提供业务的一个case。所以从使用者来看的话,是一件非常痛苦的事情,当时我们就决定把两个平台统一,在Web上做一个完整的、基于用户自己界面的平台。
在那个时候,确定了数讯云平台和SDN的方向,当时主要是OpenStack和K8s。我们发现一个问题,K8s不是一个PaaS平台,只是解决了一个docker管理的问题。如果是小环境的话,用不用都无所谓,不一定非要搞SDN,包括OpenStack也一样,如果业务环境不是过于复杂的话,其实跑传统的VLAN,只要控制量,没有广播风暴,没有任何问题。
但如果你的业务场景非常复杂,以前收纳在虚拟机,现在收纳在是肯定的。实现方式有两种,下面分别进行说明。容器里,这种业务的出现,会对网络造成非常大的困境,不可能对每个线的业务去做策略。一旦出现业务迁移或troubleshooting的时候,后端运维人员是崩溃的,没法调。以前写个PBR,写个静态路由,最多是挂几个交换机路由。在云网络环境里完全不是这样,可能一个租户下面无数虚拟机,里面跑了无数不同的应用方式,所有流的走向又是乱七八糟的,这种情况下,如果用传统的方式,基本就不用做了,因为看不到头。所以要采用SDN的方式。
TungstenFabric的确非常,但也有一些问题存在,完全支持OVSDB的交换机,对TungstenFabric的兼容会更好一点。也不是说Openflow不行,用流表的方式也能做,但那就比较折腾了。
数讯的底层Port,就是底层通过TungstenFabric的SDN技术支持线。当时2015年OpenContrail时代的时候,K8s刚开放,我们提出要采用基于容器的方式,因为虚拟机的方式对运维、扩容、迁移有弊端的话,后面业务是很难有保证的。那个时候OpenStack也比较早期,基本上都是自己统一部署,和Junipernetworks联合开发的时候,把OpenContrail放在一起部署。
这里就解决了VLAN映射的问题,不可能为用户提供专线,还要改变他的VLAN网络,这是不现实的,所以在这上面做了大量的二次开发。包括OpenStack和OpenShift,开源社区的版本都是单,到真正地应用到场景的话,最起码要保证多,社区版的东西要落到生产环境,包括和TungstenFabric对接,还是有很多二次开发要做。
这是在开发和调研中碰到的实际用例的问题,有些是我们自己的,有些是用户应用场景中的。
Neutron稳定性比较,我们曾经实测过,开到0个虚拟机会出现莫名其妙的抖动,导致全部崩溃,对于原生的Neutron,我们还是比较谨慎的。
如果K8s只是实现单一业务,基本原生的Flannel或Calico都能解决,Calico对于多数据中心多任务的方式是不提供支持的,Calico是目前K8s开源环境使用最多的。
OpenShift虽然是有OVS,能不能和OpenStack互通是存疑的,验证下来也是不能通的,完全是两个体系。
另外VNF和CNF是否能够共存,也是未知。为什么虚拟机要去访问容器?在我们看来极其不合理,但在金融行业或电商行业,某些业务可以跑虚拟机,某些已经买了商业软件,或者有些用户自己有开发能力,已经把一部分东西放到容器里了。
以前我们在虚拟机开一堆负载均衡,但在容器里直接一个Node无数port就解决了,包括很多注册机机制不能portal,总不能把网络做分段再做转接,他们觉得非常难,看有没有可能解决这个问题。我们试错下来,在最近解决了VNF和CNF在OpenStack虚拟机层面的互通问题,要用到管理网去做互通。
虚拟机网络与容器网络二层互访,在TungstenFabric4.0版本的时候是基于标签的方式,能用,但是用起来不方便。到现在5.1版本的时候,整个Portal也没有把这个拉出来作为一个选项,每次都要去翻虚拟机和容器去做对应,这个作比较麻烦,我们也试过做二次开发,比较累。如果有可能的话,把这两个东西放在一起,管理起来就会非常方便。
软件定义的FW、LB如何在跨场景中业务落地?大部分用户场景里,都是用商业软件,各种品牌都有,自己本身提供image,放到虚拟机都有自己的feature,怎么和TungstenFabric互通,肯定是要做二次开发的,但目前看来也就TungstenFabric有可能去做,其它的比较困难。
VPC的问题,在我们的理解里,TungstenFabric的VPC可以理解为现在国内SDNweb更合理,两段VPN建立隧道。至于你要管到公有云的虚拟机,好像不太可能。即使是给到你,可能也会放弃,光是版本迭代问题就没法解决。没人做这样的事情。好处是有Portal,能够看到整个业务的实际情况。
吐槽一下,TungstenFabric确实解决了OpenStack网络拓展和稳定性问题,但对网卡有点挑,在一些特殊的应用场景里,比如跑VDI的IDP协议,我们发现In和Broadcom的网卡不那么友善。
相比OpenStack,目前为止TungstenFabric和OpenShift的对接难度更大一点。OpenShift开源的OKD本身就有一些问题,另外只是把TungstenFabric和OpenShift或K8s装在一起,简单应用看不出问题,但如果跑几个业务链,比如标签、应用、路由、业务编排等,整个流程走下去会有问题。
关于服务链,如果能够和端口去做匹配,可能更好一点,不要干预整条网络的属性,在某些特定场景里面会比较复杂。
多云环境我们目前适配下来,只有AWS和Azure是可以的,不过还是根据实际的应用场景出发,也没必要把所有的公有云平台对接一遍,业务也没有那么复杂。
支持DPDK及artNIC我们实测过,在OpenStack默认的kernel环境下,达到安全厂商他们的软件标准,基本达不到,只有使用DPDK的方式才能达到标称值,但DPDK又是In的专属,在实际场景中碰到了一些问题,有的应用能跑起来,有的就不行。所以,要使用DPDK方式的话,还是要根据自己的使用场景去看一下。
TungstenFabric提供类似REST的API,所以即使自己要做CMP的话,去调用后端的参数,相对还是比较容易的,但针对API的文档有点乱。
到现在,我们做云计算是非常认真的,从2014年到现在一直在不断打磨自己的平台,所有的视角都是以用户实例去呈现,包括把TungstenFabric后端的API腾挪到前端,针对某个租户他就能根据自己的策略去调。进入CMP的时代,如果一个应用场景在15分钟内开不起来的话,那它就失败了,更不要说借助第三方外力。把很多权限都开放给用户。
我们的PaaS后端是OpenShift,基于PaaS平台的所有业务都在前端重做,包括TungstenFabric针对OpenShift的功能,都放在前端,包括TungstenFabric内部都可以,不用非常原始的SNMP的方式做采集,完全不需要。
目前为止,数讯的平台做到了这个程度。选择TungstenFabric是因为协议相对标准,BGPVPN就能解决,我比较抵触私有协议,某些友商总想搞个大一统,也不太可能,还是开放式大家比较能接受。
谈到VXLAN的问题,实际用下来,如果用kernel方式,如果量很大损耗还是很大,特别针对VXLAN没有做特别优化的交换机或网卡,直接性能损失大概在30%左右。
从整个TungstenFabric去看的话,基本上把不同的平台、不同的网络特性都统一管理起来了,只是容器和虚拟机还是有一定手动的工作量,如果TungstenFabric把这个问题解决掉会更好。另外,TungstenFabric在OpenStack和OpenShift认证机制上不太一致。
我们应用TungstenFabric比较早,从3.2版本就开始搞,4.0版本正式对接。我相信如果有自己的业务逻辑,有一定的开发能力,基于TungstenFabric能打造出属于自己的好的产品,TungstenFabric可编程型比较强,通用性也比较强。满分100的话,我打80分,剩下的20分是支持方面。
以上,我从实际的应用场景,到开发当中遇到的各种情况,抛出了一些问题。
非常感谢大家!
本次演讲及TF中文社区2020次Meetup活动资料,请在TF中文社区公众号后台点击会议活动-Meetup参与。
如何学习 hyperledger nodejs
过两天就试,现阶段10台,团队成员没有完全回来,等回来后开会讨论怎么部署,包括确定OS,个数,部这几年比较痛苦的是支持比较少,不管开源社区还是,主要侧重于安装,有一部分troubleshooting,但针对于实际的应用场景部署相对比较缺失。做云计算不是开虚拟机,用不用OpenStack无所谓,KVM就解决了。所以说云计算不是虚拟化,它有一定的业务逻辑在里面,意味着平台要能对实际落地用户的业务提供很多支持。署脚本什么的,到时候一起交流啊面向初学者,内容即包含Hyperledger Fabric的书与MSP服务、权限策略、通道配置与启动、链码通信接口等核心概念,也包含Fabric网络设计、nodejs链码与应用开发的作实践,是Nodejs工程师学习Fabric区块链开发的选择K8s不是一个PaaS平台,只是解决了一个docker管理的问题。。
如何学习 hyperledger nodejs
下面的示例说明了如何通过env.passwords配置多台机器的登录信息:面向初学者,内容即包含Hype的确我们看下来,TungstenFabric就像文档上面所说的,对OpenShift的支持,还是比其它开源个教程:软件或商业软件要好很多,至少还能看到用TungstenFabric做二次开发的曙光。rledger Fabric的书与MSP服务、权限策略、通道配置与启动、链码通信接口等核心概念,也包含Fabric网络设计、nodejs链码与应用开发的作实践,是Nodejs工程师学习Fabric区块链开发的选择。
关于fabric 并行执行任务求助
上篇笔记介绍了Fabric的概念、支持的元作及task的定义方法,本篇笔记旨在说明如何在多台目标机器上正确地执行tasks以实现远程自动部署或运维。特别地,文中会说明如何配置fabric task以便远程执行命令时不会弹出密码输入提示。
1. Fabric的任务运行规则
根据Fabric Execution model的说明,fabric默认以串行方式运行tasks,具体而言:
1)在fabfile及其import文件中定义的task对象依次被创建(只是创建对象,并未真正执行),任务之间保持其定义的先后顺序。
2)对于每个task,生成将要运行该task的目标机器列表。
3)fab执行tasks时,按任务被指定的顺序依次执行这些任务;针对每个任务,依次在其指定的目标机器运行且只运行一次。
4)未指定目标机器的task被当作本地任务运行,且只会被运行一次。
设在fabfile.py中定义了如下tasks:
from fabric.api import run, envenv.hosts = ['host1', 'host2']def taskA(): run('ls')def taskB(): run('whoami')
在终端运行fab –list时,我们会看到taskA和taskB两个任务,运行之:
结果示例如下:
通过上面的实例,大家应该可以明白fabric默认的串行执行策略是怎么回事。
Fabric还允许我们指定以并行方式(借助multiprocessing模块实现多个进程并行执行)在多台机器上并行地运行任务,甚至还可在同一个fabfile文件中指定某些task以并行方式运行,而某些task以默认的串行方式运行。具体地,可以借助@parallel或@serial指定任务的运行模式,还可以在命令行中通过-P参数指定任务是否要并性执行。示例如下:
from fabric.api import @paralleldef runs_in_parallel(): passdef runs_serially(): pass
当运行如下命令时:
$ fab -H host1,host2,host3 runs_in_parallel runs_serially
执行结果示例如下:
runs_in_parallel on host1, host2, and host3runs_serially on host1runs_serially on host2runs_serially on host3
此外,还可以通过对@parallel传入pool_size参数来控制并行进程数以防并行进程太多把机器拖垮。
2. 为task指定目标机器
有多种方式可以指定任务的将要运行的目标机器,下面分别进行说明。
1)通过env.hosts或env.roles进行全局指定
Fabric的env模块中定义了一系列全局变量,可以将其理解为可以控制fabric行为的环境变量。其中env.hosts和env.roles可以用来全局指定task的目标机器列表,这两个“环境变量”的默认值都是空列表[]。
env.hosts的元素是fabric约定的”host strings”,每个host strings由username@hostname:port三部分构成,其中username和port部分可以缺省。本篇笔记前面的第1个代码实例其实已经说明了如何用env.hosts全局地指定task的目标机器列表,这里不再赘述。
env.roles则是在配置了env.roledefs的情况下才有用武之地。在很多时候,不同的机器有着不同的角色,如有些是接入层,有些是业务层,有些是数据存储层。env.roledefs可以用来组织这些机器列表以体现其角色,示例如下:
from fabric.api import envenv.roledefs = { 'web': { 'hosts': ['www1', 'www2', 'www3'], }, 'db': { 'hosts': ['db1', 'db2'], }}@roles('web')def mytask(): run('ls /var/www')
上例通过env.roledefs配置了两个角色web和db,分别包含3台、2台机器,并借助@roles为mytask指定了目标机器列表。
2)通过命令行进行全局指定
$ fab -H host1,host2 mytask
需要注意的是,命令行通过-H参数指定的机器列表在fabfile脚本load前被解释,故如果fabfile中重新配置了env.hosts或env.roles,则命令行指定的机器列表会被覆盖。为了避免fabfile覆盖命令行参数,在fabfile中应该借助list.extend()指定env.hosts或env.roles,示例如下:
from fabric.api import env, runenv.hosts.extend(['host3', 'host4'])def mytas在TF中文社区1月7日的2020次Meetup活动上,来自TungstenFabric技术研发和一线使用者、关注多云互联的从业者、开源SDN的爱好者们互相切磋、支招,现场气氛热烈,精彩内容不断。TungstenFabric在的广泛应用正在越来越真切地走来。k(): run('ls /var/www')
此时,当我们运行”fab -H host1,host2 mytask”时,env.hosts包含来自命令行和fabfile的4台机器。
3)通过命令行为每个任务指定机器列表
$ fab mytask:还有,怎么把用户实际在机房里的一堆业务场景,跟云计算的overlay网络去连接,而不是以某个的服务去试。hosts="host1;host2"
上述方式会覆盖全局指定的机器列表,确保mytask只会在host1, host2上执行。
4)借助装饰器@hosts为每个任务指定目标机器
from fabric.api import hosts, run@hosts('host1', 'host2')def mytask(): run('ls /var/www')
或者:
my_hosts = ('host1', 'host2')@hosts(my_hosts)def mytask(): # ...
每个任务的@hosts装饰器指定的机器列表会覆盖全局目标机器列表,但不会覆盖通过命令行为该任务单独指定的目标机器列表。
上述4种为task指定目标机器列表的方式之间的优先级规则总结如下:
4) Globally specified host lists set on the command-line (–hosts=host1) will initialize the env variables, but that’s it.
截止目前,我们可以看到,fabric允许我们混合使用上面列出的几种目标机器指定方式,但是我们要明白混合的结果是否符合预期。
此外,fabric默认会对通过不同来源出现多次的同一个目标机器做去重,当然,可以通过设置env.dedupe_hosts为False来关闭默认的去重策略。甚至还可以指定任务需要跳过的机器列表。具体细节可以参考Fabric Execution model的说明,这里不赘述。
3. 任务执行时,目标机器的密码管理
1)通过env.password或env.passwords配置目标机器的登录信息
#!/bin/env python#-- encoding: utf-8 --from fabric.api import run, env, hosts## 需要注意的是,这里的host strings必须由username@host:port三部分构成,缺一不可,否则运行时还是会要求输入密码env.passwords = { 'slvher@10.123.11.209:22': 'xxx', 'work@10.123.11.210:23': 'yyy',}@hosts('10.123.11.209', '10.123.11.210')def host_os_type(): run('uname -a')
由于通过env.passwords配置了目标机器的登录用户名/密码,所以,当我们在终端运行fab host_os_type时,会发现不用手动输入密码了,大大方便了脚本远程自动执行。
但是,这种明文指定登录另外,数讯作为数据中心,提供的是传统的hosting,大家都在考虑上云的问题。在云计算中我们已经使用了SDN技术,非传统VLAN的方式,那么用户上云的时候怎么接呢,不可能再开个VLAN做个什么映射,比较困难。名/密码的方式存在安全性问题,所以,fabric还支持以ssh key认证的方式免密在远程机器执行任务。
在具体实现上,需要事先在目标机器上生成ssh public key并配置在~/.ssh/config文件中,然后在定义任务的fabfile中将env.use_ssh_config设置为True来启用基于ssh public key方式的身份认证,以便实现免密码远程执行任务。
具体细节可以参考Fabric Lraging native SSH config files文档的说明,或者参考StackOverflow的这篇帖子Connecting to a host listed in ~/.ssh/config when using Fabric,限于篇幅,这里不再赘述。
,DigitalOcean上一篇Fabric教程How To Use Fabric To Automate Administration Tasks And Deployments,浅显易懂,值得一读。Enjoy it
觉悟20关怎么打_觉悟二十关怎么打

王者荣耀觉悟过关技巧 通关窍门大盘点 王者荣耀绝悟挑战1大小:1945.6MB3关怎么过?星耀一的段位要求,与最强王者只一个小单位,其难度自然不会简单,挑战的时候要眼观八方,将各种即将到来的危险提···
篮球火全集优酷 篮球火全集观看

好的日剧 但当中不要太过曲折。 潜力的话 元大鹰 交响情人梦~ 篮球火全集优酷 篮球火全集观看 篮球火全集优酷 篮球火全集观看 偷偷爱上你(日版花样少男少女) 野猪大改造(山P在里面好帅)···
期末留抵税额会计分录 期末留抵税额放在哪个

关于期末留抵税额会计分录,期末留抵税额放在哪个科目这个很多人还不知道,今天小华来为大家解答以上的问题,现在让我们一起来看看吧! 期末留抵税额会计分录 期末留抵税额放在哪个科目···