Tungsten Fabric知識庫丨構建、安裝與公有云部署
作者:Tatsuya Naganawa 譯者:TF中文社群
如何構建Tungsten Fabric
這裡的repo檔案的說明文件大部分是有效的。
yum -y install docker git git clone https://github.com/Juniper/contrail-dev-env cd contrail-dev-env ./startup.sh docker exec -it contrail-developer-sandbox bash cd /root/contrail-dev-env yum -y remove python-devel ## it is needed to resolve dependency issue make sync make fetch_packages make setup make dep
要構建所有模組,可以使用此命令(需要1-2個小時時間,具體取決於計算機效能)。
make rpm make containers
要構建更多具體的模組,也可以使用這些命令。一個注意事項是,rpm-contrail本身是一個大的資料包,並且不能分解為更多(controller、vrouter等都包含在內)。
make list
make rpm-contrail
make list-containers
make container-general-base
make container-base
make container-kubernetes_kube-manager
- those make targets are included from this file:
/root/contrail/tools/packages/Makefile
如果僅構建vrouter.ko,此命令比較有用。
build:
cd /root/contrail
scons --opt=production --kernel-dir=/lib/modules/3.10.0-1062.el7.x86_64/build build-kmodule
clean:
cd /root/contrail/vrouter
make KERNELDIR=/lib/modules/3.10.0-1062.el7.x86_64/build clean
注意:當安裝了其它發行版的kernel-devel軟體包(我嘗試過centos 8和amazon linux 2的軟體包)時,也可以將其指定為kernel-dir。
例如,此命令為centos 8.2建立了vrouter.ko。
- 可以透過insmod命令手動載入。
# rpm -ivh --nodeps kernel-devel-4.18.0-147.8.1.el8_1.x86_64.rpm
# scons --opt=production --kernel-dir=/usr/src/kernels/4.18.0-147.8.1.el8_1.x86_64/ build-kmodule
charm安裝
Tungsten Fabric也可以透過juju charm安裝。
- 使用了bionic和Openstack Queens,有4個節點(juju node, openstack controller, openstack compute, tunsten-fabric controller)
# apt update
# snap install --classic juju
# juju add-cloud
Select cloud type: manual
Enter a name for your manual cloud: manual-cloud-1
Enter the controller's hostname or IP address: (juju node's ip)
# ssh-keygen
# cd .ssh
# cat id_rsa.pub >> authorized_keys
# cd
# ssh-copy-id (other nodes' ip)
# juju bootstrap manual-cloud-1
# git clone -b R5
# juju add-machine ssh:root@(openstack-controller ip)
# juju add-machine ssh:root@(openstack-compute ip)
# juju add-machine ssh:root@(TungstenFabric-controller ip)
# vi set-juju.sh
juju deploy ntp
juju deploy rabbitmq-server --to lxd:0
juju deploy percona-cluster mysql --config root-password=contrail123 --config max-connections=1500 --to lxd:0
juju deploy openstack-dashboard --to lxd:0
juju deploy nova-cloud-controller --config console-access-protocol=novnc --config network-manager=Neutron --to lxd:0
juju deploy neutron-api --config manage-neutron-plugin-legacy-mode=false --config neutron-security-groups=true --to lxd:0
juju deploy glance --to lxd:0
juju deploy keystone --config admin-password=contrail123 --config admin-role=admin --to lxd:0
juju deploy nova-compute --config ./nova-compute-config.yaml --to 1
CHARMS_DIRECTORY=/root
juju deploy $CHARMS_DIRECTORY/contrail-charms/contrail-keystone-auth --to 2
juju deploy $CHARMS_DIRECTORY/contrail-charms/contrail-controller --config auth-mode=rbac --config cassandra-minimum-diskgb=4 --config cassandra-jvm-extra-opts="-Xms1g -Xmx2g" --to 2
juju deploy $CHARMS_DIRECTORY/contrail-charms/contrail-analyticsdb --config cassandra-minimum-diskgb=4 --config cassandra-jvm-extra-opts="-Xms1g -Xmx2g" --to 2
juju deploy $CHARMS_DIRECTORY/contrail-charms/contrail-analytics --to 2
juju deploy $CHARMS_DIRECTORY/contrail-charms/contrail-openstack
juju deploy $CHARMS_DIRECTORY/contrail-charms/contrail-agent
juju expose openstack-dashboard
juju expose nova-cloud-controller
juju expose neutron-api
juju expose glance
juju expose keystone
juju expose contrail-controller
juju expose contrail-analytics
juju add-relation keystone:shared-db mysql:shared-db
juju add-relation glance:shared-db mysql:shared-db
juju add-relation keystone:identity-service glance:identity-service
juju add-relation nova-cloud-controller:image-service glance:image-service
juju add-relation nova-cloud-controller:identity-service keystone:identity-service
juju add-relation nova-cloud-controller:cloud-compute nova-compute:cloud-compute
juju add-relation nova-compute:image-service glance:image-service
juju add-relation nova-compute:amqp rabbitmq-server:amqp
juju add-relation nova-cloud-controller:shared-db mysql:shared-db
juju add-relation nova-cloud-controller:amqp rabbitmq-server:amqp
juju add-relation openstack-dashboard:identity-service keystone
juju add-relation neutron-api:shared-db mysql:shared-db
juju add-relation neutron-api:neutron-api nova-cloud-controller:neutron-api
juju add-relation neutron-api:identity-service keystone:identity-service
juju add-relation neutron-api:amqp rabbitmq-server:amqp
juju add-relation contrail-controller ntp
juju add-relation nova-compute:juju-info ntp:juju-info
juju add-relation contrail-controller contrail-keystone-auth
juju add-relation contrail-keystone-auth keystone
juju add-relation contrail-controller contrail-analytics
juju add-relation contrail-controller contrail-analyticsdb
juju add-relation contrail-analytics contrail-analyticsdb
juju add-relation contrail-openstack neutron-api
juju add-relation contrail-openstack nova-compute
juju add-relation contrail-openstack contrail-controller
juju add-relation contrail-agent:juju-info nova-compute:juju-info
juju add-relation contrail-agent contrail-controller
# vi nova-compute-config.yaml
nova-compute:
virt-type: qemu
enable-resize: True
enable-live-migration: True
migration-auth-type: ssh
# bash set-juju.sh
(to check status, it takes 20 minutes for every application to be active)
# juju status
# tail -f /var/log/juju/*log | grep -v -w DEBUG
為了使其成功執行,有以下兩點需要注意。
1.由於juju在內部使用LXD及其自己的子網,因此至少Tungsten Fabric節點需要具有到該子網的一些靜態路由(如果透過AWS,則可以使用VPC的路由表,還需要禁用源/目標檢查)
2.由於預設情況下LXD不允許docker執行,因此需要透過lxc config設定為允許。
juju ssh 0
sudo su -
lxc list
lxc config set juju-cb8047-0-lxd-4 security.nesting true
lxc config show juju-cb8047-0-lxd-4
lxc restart juju-cb8047-0-lxd-4
Tungsten fabric在公有云上的部署
gatewayless和snat
當安裝在公有云上時,由於沒有可用的支援MPLS over IP或VXLAN的硬體,vRouter需要具有來自underlay IP的浮動IP。
話雖如此,由於Tungsten Fabric支援gatewayless功能,因此從該虛擬網路為浮動IP提供服務不會有太大困難(辦法是將另一個IP與ENI相連,並使之成為浮動IP的來源,從而可以從外部訪問vRouter上的服務)
注意:當使用kubernetes時,我個人更喜歡將服務網路設定為gatewayless(此設定將不使用外部IP)。如果使用了帶有裸金屬例項的虛擬機器管理程式,則首選帶有一些gatewayless子網的浮動IP。
從vRouter到外部網路,分散式SNAT功能都可以解決問題。
- 帶有浮動IP的SNAT也可以很好地工作
AZ高可用性WIP
此外,還可以在vRouters上定義兩個單獨的負載均衡器以訪問同一應用程式,以使其可以從兩個不同的可用區域進行訪問,從而確保更高的可用性。
要進行此設定,需要配置幾項內容:
1.vRouter有一個gatewayless子網,其子網範圍未包含在VPC子網中。
2.在路由表中配置一個例項路由,它將gatewayless子網轉發到其中一個vRouter節點。
3.ELB將設定為gatewayless IP的IP地址。(當指定IP時,需要為“子網”配置“其它IP地址”)
4.由於在這種情況下,安全組(security-group)不會自動允許ELB的地址,因此需要手動允許VPC的CIDR進行ELB的執行狀況檢查,以使其正常工作。
vRouter的gatewayless功能的一個限制是,只有將目的地vRouter與原始接收資料包的vRouter放在同一個L2子網中,才能將資料包轉發到其它vRouter。
- 如果位於不同的子網中,vRouter會將資料包轉發到VROUTER_GATEWAY,而後者又將其傳送到vRouter,這會形成環路。
由於AWS子網不能包含相同的子網,因此,要使此設定AZ具有高可用性,需要為同一應用程式配置兩個負載均衡器,每個AZ都具有兩個不同的gatewayless子網。
由於ELB可以將資料包轉發到兩個vRouter負載均衡器,因此在ELB的幫助下它可以實現AZ高可用。
EKS整合
vRouter CNI AWS EKS是另一種可能的整合方案。
要進行此設定,首先要透過web console為EKS配置一些IAM使用者。
-
由於kubectl可以與建立該kubernetes叢集的IAM使用者一起使用,因此不建議對web console進行root訪問。
然後,以下命令將從每個工作節點中刪除VPC CNI。
注意:儘管預設情況下,無法將dockerhub容器中的vrouter.ko載入到amazon linux 2核心中,但是可以使用此步驟為該核心建立vrouter.ko。
CNI MTU設定
值得注意的是,在公有云例項中安裝vRouter時,可能會發生一些MTU問題。
更改物理介面MTU可以解決大部分問題,但是當來自容器的資料包被分段時,可能需要更改CNI的MTU設定。
vi /etc/cni/net.d/10-contrail.conf { "cniVersion" : "0.3.1" , "contrail" : { "meta-plugin" : " $KUBERNETES_CNI_META_PLUGIN " , "vrouter-ip" : "127.0.0.1" , "vrouter-port" : $VROUTER_PORT , "config-dir" : "/var/lib/contrail/ports/vm" , "poll-timeout" : 5, "poll-retries" : 15, + "mtu" : 1300, "log-file" : " $LOG_DIR /cni/opencontrail.log" , "log-level" : "4" }, "name" : "contrail-k8s-cni" , "type" : "contrail-k8s-cni" }
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69957171/viewspace-2717979/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Tungsten Fabric知識庫丨測試2000個vRouter節點部署VR
- Tungsten Fabric知識庫丨更多元件內部探秘元件
- Tungsten Fabric知識庫丨vRouter內部執行探秘VR
- Tungsten Fabric知識庫丨這裡有18個TF補丁程式,建議收藏
- Tungsten Fabric知識庫丨關於OpenStack、K8s、CentOS安裝問題的補充K8SCentOS
- Tungsten Fabric架構解析丨vRouter的部署選項架構VR
- Tungsten Fabric架構解析丨TF如何收集、分析、部署?架構
- TF實戰丨使用Vagrant安裝Tungsten Fabric
- Tungsten Fabric架構解析丨TF如何編排架構
- Tungsten Fabric入門寶典丨關於安裝的那些事(下)
- Tungsten Fabric架構解析丨TF支援API一覽架構API
- Tungsten Fabric架構解析丨TF怎麼運作?架構
- Tungsten Fabric架構解析丨TF的服務鏈架構
- Tungsten Fabric架構解析丨詳解vRouter體系結構架構VR
- 通義靈碼知識庫問答增強:知識庫構建與管理指南
- Tungsten Fabric入門寶典丨編排器整合
- Tungsten Fabric架構解析丨TF基於應用程式的安全策略架構
- Tungsten Fabric與K8s整合指南丨建立隔離名稱空間K8S
- Tungsten Fabric入門寶典丨TF元件的七種“武器”元件
- 知識圖譜構建與應用
- Tungsten Fabric架構和最新技術進展丨TF成立大會演講實錄架構
- 金融行業客戶運營知識庫:構建數字化知識庫行業
- Tungsten Fabric入門寶典丨多編排器用法及配置
- Tungsten Fabric入門寶典丨8個典型故障及排查Tips
- Tungsten Fabric入門寶典丨首次啟動和執行指南
- 教程|雲幫手部署Windows公有云管理系統Windows
- 教程|雲幫手部署Linux公有云管理系統Linux
- 構建RAG應用-day04-將LLM 接入 LangChain 構建檢索問答鏈 部署知識庫助手LangChain
- 使用 flask 構建我的 wooyun 漏洞知識庫Flask
- 基於 AnythingLLM 及 Ollama 構建本地知識庫
- 支援中文!秒建 wiki 知識庫的開源專案,構建私人知識網路
- 資料庫安裝以及基礎知識資料庫
- Tungsten Fabric入門寶典丨關於服務鏈、BGPaaS及其它
- Tungsten Fabric入門寶典丨關於叢集更新的那些事
- Tungsten Fabric架構解析|TF主要特點和用例架構
- 分享ZKEYS公有云管理系統一鍵部署操作流程
- 電商行業客戶運營知識庫:構建數字化知識庫的探索行業
- 知識圖譜Knowledge Graph構建與應用