Tungsten Fabric入门宝典丨首次启动和运行指南

Tungsten Fabric入门宝典系列文章,来自技术大牛倾囊相授的实践经验,由TF中文社区为您编译呈现,旨在帮助新手深入理解TF的运行、安装、集成、调试等全流程。如果您有相关经验或疑问,欢迎与我们互动,并与社区极客们进一步交流。更多TF技术文章,请点击TF中文社区公众号底部按钮>学习>文章合集。
作者:Tatsuya Naganawa 译者:TF编译组

在这里插入图片描述
两年来,我在Tungsten Fabric的旅程中学到了不少知识,接下来,我会用几篇文章来简要介绍一下。

1为什么要用Tungsten Fabric?

首先,让我们来看一个重要的问题,SDN/Neutron/CNI都有很多不错的实现案例,为什么还要再尝试另一个呢?据我所知,Tungsten Fabric具有两个关键的差异化特征,这使它变得如此与众不同。

I. 与ASIC的互操作性

尽管有很多技术使Linux软件成为生产路由器/交换机的理想选择,但ASIC仍然是这一行业的重要组成部分。为了与它们进行互操作,SDN平台需要使用路由协议,例如BGP或OVSDB。

许多服务提供商和云服务商使用VRF来终结和分离每个客户的网络连接,这使得路由器和SDN之间的连接变得很复杂。

  • 通常,它们之间可以使用VLAN,但是SDN平台上的终结点可能会成为瓶颈
  • 此外,每个SDN终结点(类似于OpenStack中的网络节点)需要为每个客户进行单独的配置,这使配置更加复杂

借助MP-BGP这个已经成熟实现的协议,Tungsten Fabric解决了上述问题,该协议允许路由器上的每个VRF将报文直接发送到vRouter,这些vRouter服务于每个客户的应用程序。此功能允许基于控制平面(而不是数据平面),对具有每个客户独立网络的计算节点进行水平扩展,并使其更加直观。

II. 可扩展性

由于报文是从路由器直接发送到vRouter的,因此不需要网络节点,这使得Tungsten Fabric在数据平面上具有更大的可扩展性。

另外,从控制平面的角度来看,Tungsten Fabric具有一个名为“路由目标过滤器(route target filtering)”(https://tools.ietf.org/html/rfc4684)的有意思的功能。

  • 此功能在MP-BGP中很常见,其他路由器也具有这个功能
  • 这个功能意味着,如果vRouter没有该路由目标(route target)的前缀,那么控制平面接收到它时会丢弃前缀

在云服务中,客户只使用云服务商的数据中心的有限功能,并且不同客户使用不同的路由目标,因此vRouter和控制器不需要知道所有前缀。路由目标过滤功能使这种行为成为可能,并大大减少了每个vRouter以及每个控制器(如果在它们之间使用RR的话)需要考虑的前缀数量,这使得该控制平面更具可扩展性。

对于私有云或托管云来说,将其与安全策略、网络策略/逻辑路由器(与AWS中的VPC peerling或transit-gateway类似)等其它功能结合在一起,这将是VPC基础架构(类似于AWS/Azure/GCP VPC/vnet)的一个不错的选择,并且使其成为一个非常值得一试的有趣平台。

2Tungsten Fabric,启动并运行

在第一次尝试使用Tungsten Fabric时,即使你已经熟悉其他CNI的部署,还是建议使用ansible-deployer(https://github.com/Juniper/contrail-ansible-deployer),因为Tungsten Fabric使用了很多种没有集成在Vanilla Linux中的工具。因此,建议首先尝试可以良好运行的设置,以查看新功能,然后再集成其它系统。

不幸的是,许多Tungsten Fabric的repos都与rawhide类似,并且在某些情况下已经失去了依赖性。

因此,我选择了一种组合,是我认为通常都能正常工作并且足够稳定,可以用来尝试大多数功能。

要尝试此操作,你需要两台服务器,一台用于K8s主服务器,另一台用于K8s节点。K8s主服务器需要至少有2个vCPU、8GB内存和8GB磁盘空间。K8s节点服务器需要1个vCPU、4GB内存和8GB磁盘空间。

  • 我个人通常在AWS的ap-northeast-1区域中使用ami-3185744e(CentOS7.5, login-id:
    centos),t2.large的规格
  • 由于在我看来,与Tungsten Fabric进行OpenStack和vCenter集成比使用Kubernetes进行集成要复杂得多,因此即使你不需要容器支持,我还是建议首先尝试此设置
  • 安装过程,需要有互联网连接
##all the commands are typed at k8s master node
sudo yum -y remove PyYAML python-requests
sudo yum -y install git
sudo easy_install pip
sudo pip install PyYAML requests ansible==2.7.15
ssh-keygen
cd .ssh/
cat id_rsa.pub >> authorized_keys
ssh-copy-id root@(k8s node's ip) ## or manually register id_rsa.pub to authorized_keys
cd
git clone -b R5.1 http://github.com/Juniper/contrail-ansible-deployer
cd contrail-ansible-deployer
vi config/instances.yaml
(replace contents with this)
provider_config:
  bms:
   ssh_user: root
   ssh_public_key: /root/.ssh/id_rsa.pub
   ssh_private_key: /root/.ssh/id_rsa
   domainsuffix: local
   ntpserver: 0.centos.pool.ntp.org
instances:
  bms1:
   provider: bms
   roles:
      config_database:
      config:
      control:
      analytics:
      analytics_database:
      webui:
      k8s_master:
      kubemanager:
   ip: 172.31.14.47 ## k8s master's ip
  bms2:
   provider: bms
   roles:
     vrouter:
     k8s_node:
   ip: 172.31.41.236 ## k8s node's ip
contrail_configuration:
  CONTRAIL_CONTAINER_TAG: r5.1
  KUBERNETES_CLUSTER_PROJECT: {
   }
  JVM_EXTRA_OPTS: "-Xms128m -Xmx1g"
global_configuration:
  CONTAINER_REGISTRY: tungstenfabric

ansible-playbook -e orchestrator=kubernetes -i inventory/ playbooks/configure_instances.yml
 - it takes about 10 minutes
ansible-playbook -e orchestrator=kubernetes -i inventory/ playbooks/install_k8s.yml
 - it takes about 5 minutes
ansible-playbook -e orchestrator=kubernetes -i inventory/ playbooks/install_contrail.yml
 - it takes about 20 minutes

需要注意的一点是,使用受支持的内核版本是一项相当严格的要求,因为Tungsten Fabric将自己

的内核模块(vrouter.ko)用于其数据平面。我尝试了CentOS7.5、7.6,Ubuntu Xenial,并发现它也运行良好(对于Ubuntu Bionic,需要进行一些修改),但如果是第一次尝试,我建议使用特定的AMI ID,因为由于不能正常工作而进行调试和排错不是一件容易的事。

如果所有“剧本”(playbooks)都运行良好,可以先输入内容,

contrail-status

它负责检查一切是否正常。

[root@ip-172-31-14-47 contrail-ansible-deployer]# contrail-status 
Pod              Service         Original Name                          State    Status             
                 redis           contrail-external-redis                running  Up 5 minutes       
analytics        alarm-gen       contrail-analytics-alarm-gen           running  Up 2 minutes       
analytics        api             contrail-analytics-api                 running  Up 2 minutes       
analytics        collector       contrail-analytics-collector           running  Up 2 minutes       
analytics        nodemgr         contrail-nodemgr                       running  Up 2 minutes       
analytics        query-engine    contrail-analytics-query-engine        running  Up 2 minutes       
analytics        snmp-collector  contrail-analytics-snmp-collector      running  Up 2 minutes       
analytics        topology        contrail-analytics-topology            running  Up 2 minutes       
config           api             contrail-controller-config-api         running  Up 4 minutes       
config           device-manager  contrail-controller-config-devicemgr   running  Up 3 minutes       
config           nodemgr         contrail-nodemgr                       running  Up 4 minutes       
config           schema          contrail-controller-config-schema      running  Up 4 minutes       
config           svc-monitor     contrail-controller-config-svcmonitor  running  Up 4 minutes       
config-database  cassandra       contrail-external-cassandra            running  Up 4 minutes       
config-database  nodemgr         contrail-nodemgr                       running  Up 4 minutes       
config-database  rabbitmq        contrail-external-rabbitmq             running  Up 4 minutes       
config-database  zookeeper       contrail-external-zookeeper            running  Up 4 minutes       
control          control         contrail-controller-control-control    running  Up 3 minutes       
control          dns             contrail-controller-control-dns        running  Up 3 minutes       
control          named           contrail-controller-control-named      running  Up 3 minutes       
control          nodemgr         contrail-nodemgr                       running  Up 3 minutes       
database         cassandra       contrail-external-cassandra            running  Up 2 minutes       
database         kafka           contrail-external-kafka                running  Up 2 minutes       
database         nodemgr         contrail-nodemgr                       running  Up 2 minutes       
database         zookeeper       contrail-external-zookeeper            running  Up 2 minutes       
kubernetes       kube-manager    contrail-kubernetes-kube-manager       running  Up About a minute  
webui            job             contrail-controller-webui-job          running  Up 3 minutes       
webui            web             contrail-controller-webui-web          running  Up 3 minutes       

WARNING: container with original name 'contrail-external-redis' have Pod or Service empty. Pod: '' / Service: 'redis'. Please pass NODE_TYPE with pod name to container's env

== Contrail control ==
control: active
nodemgr: active
named: active
dns: active

== Contrail config-database ==
nodemgr: initializing (Disk for DB is too low. )
zookeeper: active
rabbitmq: active
cassandra: active

== Contrail kubernetes ==
kube-manager: active

== Contrail database ==
kafka: active
nodemgr: initializing (Disk for DB is too low. )
zookeeper: active
cassandra: active

== Contrail analytics ==
snmp-collector: active
query-engine: active
api: active
alarm-gen: active
nodemgr: active
collector: active
topology: active

== Contrail webui ==
web: active
job: active

== Contrail config ==
svc-monitor: active
nodemgr: active
device-manager: active
api: active
schema: active

[root@ip-172-31-14-47 contrail-ansible-deployer]# 

[root@ip-172-31-41-236 ~]# contrail-status 
Pod      Service  Original Name           State    Status         
vrouter  agent    contrail-vrouter-agent  running  Up 52 seco
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值