Tungsten Fabric入門寶典丨開始第二天的工作

TF中文社群發表於2020-05-14
Tungsten Fabric入門寶典系列文章 ,來自技術大牛傾囊相授的實踐經驗,由TF中文社群為您編譯呈現,旨在幫助新手深入理解TF的執行、安裝、整合、除錯等全流程。如果您有相關經驗或疑問,歡迎與我們互動,並與社群極客們進一步交流。更多TF技術文章,請點選 【TF中文社群】微信公眾號底部按鈕>學習>文章合集。


作者:Tatsuya Naganawa  譯者:TF編譯組



首次啟動和執行,以及 運營安裝之後。使用者需要檢視執行狀態(例如路由表和vif狀態),並在Tungsten Fabric DB中配置各種物件,例如virtual-network, logical-router, bgp-router等。

儘管Tungsten Fabric與OpenStack Neutron和Kubernetes YAML整合在一起以配置一些引數,但是在許多情況下,這些DB需要由Tungsten Fabric API或Tungsten Fabric webui直接編輯。

下面我來介紹能實現此目標的幾種選擇。

ist. py

由於ist.py在本文件中已經使用很多次了,這裡沒有更多可以說的了。


它可以基於各種Tungsten Fabric元件的introspect API,使用路由的操作命令來轉儲類似資訊,包括路由表、bgp狀態、元件狀態等。

有一點需要補充的是,在vRouter上,還有其他幾個命令會顯示類似的資訊,比如vif、flow、vxlan、nh、rt、......


由於ist.py將從vrouter-agent中選擇資訊,而那些工具從netlink中選擇資訊,因此(大多數)資訊始終會同步。

  • 不過,當vRouter吞吐量是關鍵時,實時資訊如vif --list --rate, flow -s將是一個很好的補充。


contrail-api-cli

當需要從CLI更新Tungsten Fabric的配置時,也許使用這個工具將是最好的方法之一。


它也可以像Unix shell一樣,以直觀的方式轉儲和遍歷Tungsten Fabric DB的內容,並在需要時執行ls、cat、edit,並檢查ref和back_refs。

下面介紹一些我認為有用的命令。

安裝步驟

請鍵入以下命令,以在Centos7上安裝此工具。


yum -y  install gcc python-devel
pip  install contrail-api-cli


如果顯示某些依賴性錯誤,virtualenv可能會有所幫助。

yum -y  install gcc python-devel
pip  install virtualenv
virtualenv venv
source venv/ bin/ activate
  pip  install contrail-api-cli


完成安裝後,請嘗試以下命令來測試Tungsten Fabric訪問(在此示例中使用了Kubernetes安裝)。


contrail-api-cli --host xx.xx.xx.xx ls   ## xx.xx.xx.xx indicates config-api's ip


Is

如果安裝了此工具,我首先建議鍵入這個命令。

contrail-api-cli  --host  xx.xx.xx.xx  ls  -l \*


然後,它會將所有的uuid以原來的名字轉儲到Tungsten Fabric DB中!

結合這一點和cat命令,只需幾行就可以寫出一個轉儲DB內所有配置的命令,這對於調查配置的內容非常有用。

for i  in $(contrail-api-cli --host xx.xx.xx.xx ls \*)
do
  echo  $i
 contrail-api-cli --host xx.xx.xx.xx cat  $i
done


cat

此命令類似於Unix cat,它將json檔案轉儲到Tungsten Fabric DB中。要檢視每個元素中配置的內容,可以使用此命令。


contrail-api-cli --host xx.xx.xx.xx ls -l  virtual-network
contrail-api-cli --host xx.xx.xx.xx cat  virtual-network/xxxx-xxxx-xxxx-xxxx


tree

該命令有兩個選項,我認為這兩個選項都很有用。

這條命令基本上可以把一個元素所擁有的 refs 和 back_refs 轉儲出來。

舉個例子,如果要檢視一個virtual-network中的所有埠,就需要用到此命令。


(forward_refs)
contrail-api-cli --host xx.xx.xx.xx tree  virtual-network/xxxx-xxxx-xxxx-xxxx
(back_refs)
contrail-api-cli -r --host xx.xx.xx.xx tree  virtual-network/xxxx-xxxx-xxxx-xxxx


另外一個選項是-P,它轉儲一個元素的父級。此選項在某些情況下也很有用。


contrail-api-cli -P --host xx.xx.xx.xx tree  virtual-network/xxxx-xxxx-xxxx-xxxx


edit

該命令的基本思想是,首先GET具有特定uuid的json檔案,並將其儲存在臨時檔案中,然後編輯(edit)該檔案,再使用相同的uuid來PUT該檔案以更新內容。

  • 舉例來說,與visudo的行為比較類似


此外,由於支援EDITOR環境變數,該命令可能會更強大。

預設情況下,EDITOR被定義為“vim”,但由於它可以是任何命令或指令碼(例如python檔案),因此可以說,它為Tungsten Fabric的自動化打下了良好的基礎(基於REST API)。

  • 不幸的是,由於目前尚無任何主要的自動化工具(如ansible、manageiq、terraform)直接支援Tungsten Fabric API,因此這可能是配置Tungsten Fabric特定選項(如virtual-networks的route-target,或埠的packet-mode)的唯一方法。

  • 如果安裝了neutron-plugin,你還可以透過Neutron API使用ansible、manageiq、terraform等工具


此命令的基本用法將像這樣,以更新uuid指定的某些元素。


contrail-api-cli edit --host xx.xx.xx.xx cat  virtual-network/xxxx-xxxx-xxxx-xxxx
EDITOR=/bin/vi contrail-api-cli edit --host xx.xx.xx.xx cat  virtual-network/xxxx-xxxx-xxxx-xxxx


如果自動化是一個預期的用例,可以使用與此類似的命令。

EDITOR=(path- of-a-script) contrail-api-cli edit --host xx.xx.xx.xx cat virtual-network/xxxx-xxxx-xxxx-xxxx


(venv) [root@ip -172-31-11-240 ~] # EDITOR=/tmp/configure-vn.py contrail-api-cli --host 172.31.11.240 edit virtual-network/035a1e3d-966b-45fd-941c-b845fd48d0c5
 -> json  in Tungsten Fabric DB  is updated

(venv) [root@ip -172-31-11-240 ~] # cat /tmp/configure-vn.py 
#!/usr/bin/python
import sys
import json
filename=sys.argv[ 1]

with open (filename)  as f:
 js=json.load(f)

##print (js)
js[ "flood_unknown_unicast"]= True  ### edit json data here

with open (filename,  'w') as f:
 json.dump(js, f)
(venv) [root@ip -172-31-11-240 ~] #


因此,透過這個命令,你可以在沒有深入瞭解 Tungsten Fabric API 的情況下,對 Tungsten Fabric json 進行程式設計編輯。由於許多物件都是由Neutron API等建立的,因此可能首先要使用它們,然後藉助此工具,使用Tungsten Fabric特定引數(比如route-target)對其進行更新。

webui

儘管目前有幾種出色的CLI工具可以用,但從歷史上看,大多數操作都是透過Tungsten Fabric webui完成的。

你可以在 https://(controller-ip):8143 找到它,預設的使用者名稱/密碼為admin/ contrail123。

  • 使用者名稱/密碼可以透過webui config引數更改:


左上角有四個圖示,分別表示“Monitor”、“Configure”、“Inspect”、“Query”。
每個模組都具有這些功能。

  1. Monitor:在某些情況下,此模組主要基於introspect、analytics UVE和配置DB的資訊,來顯示每個元件的狀態。(如果未安裝analyticsdb,則某些功能可能無法正常執行)


  2. Configure:大多數的配置任務將在此模組中完成。


  3. Inspect:該模組具有三個選項卡:list-of-uuid、introspect、config editor。Introspect顯示與ist.py相同的資訊。List-of-uuid和config editor顯示與contil-api-cli ls和contrail-api-cli cat / edit類似的資訊。


  4. Query:該模組將查詢analyticsdb的內容。它顯示了與contrail-logs、contrail-flows、contrail-sessions等命令相同的資訊。

    () 如果未安裝analyticsdb,該模組將顯示為灰色。


雖然這個webui對於掌握Tungsten Fabric的現狀是非常有用的,但是如果節點數量很多(如超過2000個),它的響應可能會有點慢。在這種情況下,基於CLI的方法會更有意義。

backup和restore

對於SDN配置這樣的重要資料來說,backup / restore是非常重要的功能。

Tungsten Fabric支援透過db_json_exim.py指令碼進行backup和restore。這個過程描述如下。

  • https://www.juniper.net/documentation/en_US/contrail5.1/topics/concept/backup-using-json-50.html


注意:這個repo也可能有用(restore已透過測試)


更改容器引數

在R5.0以後,Tungsten Fabric元件透過docker容器分發。由於這些容器有各種環境變數來改變行為,所以有時需要在安裝後更新容器的環境變數。下面我來介紹一下如何更改它們。

容器引數列表

容器引數通常用於在/entrypoint.sh中建立conf檔案,該檔案會更改每個微服務的行為。要檢視容器環境和相關引數,最直接的方法就是檢視這個repo。


此repo包含各種容器的Dockerfile和entrypoint.sh,因此,透過該操作,你可以檢查如何修改所需的引數。

例如,如果你要更改vrouter-agent的閘道器引數,可以檢查此檔案,然後直接使用VROUTER_GATEWAY替換該引數。


[VIRTUAL-HOST-INTERFACE]
name=vhost0
ip= $vrouter_cidr
physical_interface= $phys_int
gateway= $VROUTER_GATEWAY   ### this is the container environment variable which needs to be changed
compute_node_address= $vrouter_ip


因此,如果你知道所需的微服務引數,可以檢查相應的容器環境變數。

請注意,在某些情況下,沒有容器環境變數可以直接修改微服務引數。

在這種情況下,可以使用add_ini_params_from_env函式,該函式位於每個entrypoint.sh的最後一部分。


add_ini_params_from_env VROUTER_AGENT /etc/contrail/contrail-vrouter-agent.conf


此時,如果你給出這個環境變數,

VROUTER_AGENT__FLOWS__thread_count= 8


它可以轉換為[FLOWS], thread_count=8,於是,即使沒有提供方便的引數來修改它,你仍然可以使用該方法直接修改微服務的conf檔案。

ansible-deployer

如果使用ansible-deployer,它將使用docker-compose建立docker容器,並且在/etc/contrail/common_xxx.env中定義環境變數(xxx是角色名)。

因此,如果要更新諸如vrouter引數之類的資訊,你可以編輯(edit)/etc/contrail/common_vrouter.env,然後鍵入以下命令。


docker-compose -f /etc/contrail/vrouter/docker-compose.yaml down
docker-compose -f /etc/contrail/vrouter/docker-compose.yaml up -d


然後,vrouter容器會被重新建立,並應用新的引數。

Kubeadm

如果使用kubeadm和kubernetes yaml安裝Tungsten Fabric容器,則每個容器都將使用名為“env”的配置對映(configmap)作為環境變數的來源。因此,你可以鍵入此命令來編輯(edit)環境變數,並可以刪除一些Tungsten Fabric的pod以重新建立容器。(由於容器被定義為DaemonMap,它將自動重新建立)。


kubectl edit configmap -n kube-system env


保持資料一致性

由於cassandra不支援事務(transaction),並且zookeeper和casssandra都具有一些資料,因此當使用config-api時,不可避免地要在應用程式級別維護資料庫的一致性。


接下來我會總結一些故障情況和管理指令碼以解決此問題。

在某些情況下,你需要進行資料維護。

  1. 建立兩個具有ref和back_refs的物件,但是在新增back_refs之前config-api就崩潰了。

  2. Zookeeper維護一些物件的uuid和indexallocator列表,例如每個子網中的IP分配。因此,在更新zookeeper之後以及在更新cassandra之前config-api崩潰時,它將導致兩個資料庫之間的差異。


Config-api有一個資料維護指令碼db_manage.py來解決這種情況。


主要的命令有三個,我們將會週期性地鍵入它們。


docker exec -it config_api_1 /bin/bash
 cd /usr/lib/python2.7/site-packages/vnc_cfg_api_server
 python db_manage.py  check
 python db_manage.py  --execute clean
 python db_manage.py  --execute heal




  Tungsten Fabric入門寶典系列文章——

  1. 首次啟動和執行指南

  2. TF元件的七種“武器”

  3. 編排器整合

  4. 關於安裝的那些事(上)

  5. 關於安裝的那些事(下)

  6. 主流監控系統工具的整合


 Tungsten Fabric 架構解析 系列文章——


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69957171/viewspace-2691980/,如需轉載,請註明出處,否則將追究法律責任。

相關文章