1. 程式人生 > >Kubernetes外掛:Intel-SRIOV-CNI獲取配置資訊小指令碼

Kubernetes外掛:Intel-SRIOV-CNI獲取配置資訊小指令碼

注意 本文提供的指令碼是針對本人之前修改的sriov外掛的哈。

sriov-cni簡介

sriov-cni是hustcat/sriov-cni開發的一種容器網路外掛(Container Network Interface),它使得容器可以直接使用物理機中擴展出來的VF(virtual functions)。Intel在此基礎上,為其添加了dpdk功能。本人在Intel版本的基礎上進行了修改,對應的版本是2017.10.12,具體commit為f45d68b638df76261170bd585fb4014b99990548。 具體修改如下:

1、儲存dpdk配置檔案和開啟dpdk驅動的程式碼順序對調,保證在啟動更新成功的情況下才會儲存配置檔案;
2、配置檔案路徑新增一級容器網路名稱空間ID,從而使得容器內可以識別自身的配置檔案;
3、新增netconf的配置儲存;
4、類似VF,新增setupPF(),實現流程與setupVF()基本一致。

配置檔案雖然都進行了儲存,但是每次讀取查詢還是不夠便捷,因此又寫了個小指令碼進行配置資訊的查詢(portName, isDPDKmode, pciAddress),可以直接放到/usr/bin/下,當個小命令用。
例如:

[email protected]:~# mv getpci.py /usr/bin/getpci
[email protected]:~# chmod a+x /usr/bin/getpci   

之後就可以直接使用了。

[email protected]:~# cat getpci.py
#!/usr/bin/python2.7
import os
import json
import optparse

def getNameSpace():
    nsFile = "/proc/1/ns/net"
    nsLink = os.readlink(nsFile)
    ns = nsLink[5:-1]
    return ns

def getPci(path):
    ns = getNameSpace()
    confPath = os.path.join(path, ns)
    if not os.path.exists(confPath) :    
        print "can not find the Dir: %s"%confPath
        return
    fileList = os.listdir(confPath)

    portList={}

    for file in fileList:
        if os.path.splitext(file)[1] != '.json':
            continue
        portNew = {}
        filePath = os.path.join(confPath, file)
        fileTime = os.stat(filePath).st_ctime 
        fd = open(filePath, 'r')   
        line = fd.read()
        try:
            dic = json.loads(line)
        except ValueError, e :
            print filePath, "can not be loaded as json", e
        portName = dic.get("if0name") 
        if not portName:
            portName = dic.get("if0name") 
            print filePath,"can not find the ifname"
        pciAddr = dic.get("pci_addr")
        if not pciAddr:
            print filePath,"can not find the pci"
            continue
        isDPDKMode = dic.get("DPDKMode")
        portNew["portName"],portNew["pciAddr"],portNew["isDPDKMode"],portNew["ctime"]= portName,pciAddr,"false",fileTime

        if isDPDKMode :
            portNew["isDPDKMode"] = "true"

        if portName not in portList.keys():
            portList[portName] = portNew
        else:
            oldTime = portList.get(portName).get("ctime")
            if fileTime > oldTime:
                portList.pop(portName)
                portList[portName] = portNew
    return portList

def printPortList(portList):
    for portName in portList.keys():
        print ("portName:{:<10} isDPDKMode:{:<8}PCI:{:<}".format(portName,portList.get(portName).get("isDPDKMode"),portList.get(portName).get("pciAddr")))

if __name__  == "__main__":
    usage = "usage: %prog [options] arg"
    parser = optparse.OptionParser(usage)
    parser.add_option("-p", "--path", dest="path", help="the dir to the confFile, default is \"/opt/pci\" ", default = "/opt/pci")
    options, args = parser.parse_args()
    portList = getPci(options.path)
    if not portList:
        print "can not find any PCI information in ", options.path
    else:
        printPortList(portList)   

以上~

相關推薦

Kubernetes外掛Intel-SRIOV-CNI獲取配置資訊指令碼

注意 本文提供的指令碼是針對本人之前修改的sriov外掛的哈。 sriov-cni簡介 sriov-cni是hustcat/sriov-cni開發的一種容器網路外掛(Container Network Interface),它使得容器可以直接使用物理

Android官方開發文件Training系列課程中文版分享檔案之獲取檔案資訊

之前的課程講述了客戶端APP試圖與含有檔案的URI一同執行,APP可以請求服務端APP的檔案資訊,包括檔案的資料型別以及檔案的大小。這些資料型別可以幫助客戶端APP來判斷該檔案是否可以處理,檔案的大小可以幫助客戶端APP對該檔案設定相應大小的緩衝區。 這節

Ubuntu下獲取系統資訊shell指令碼

#!/bin/bash # 獲取系統資訊 # 獲取cpu數量 get_cpu_num(){ grep "cpu cores" /proc/cpuinfo | head -n1 | awk '

Kubernetes外掛配置管理—ConfigMap介紹

轉載於網路     其他容器編排排程工具會大談特談“輕應用”、“十二要素應用”,這樣就勢必會對企業級複雜應用做很大的改動。Kubernetes是為了解決“如何合理使用容器支撐企業級複雜應用”這個問題而誕生的,所以它的設計理念是要支援絕大多數應用的原生形態。例如,很多應用程式的

TinyMCE外掛RESPONSIVE filemanager 9 安裝與配置

RESPONSIVE filemanager 功能: 檔案上傳 檔案下載 重新命名檔案 刪除檔案 新建資料夾 為每個使用者建立子目錄 上傳檔案效果圖: 瀏覽檔案效果圖: 檔案說明: filemanager(核心程式檔案),放入TinyMCE的Plugi

TinyMCE外掛FileManager [4.x-6.x] 配置及BUG處理

FileManager最新版已升級到9.x,9.x新增了對檔案的批量處理,但仍然有部分同學在繼續使用6.x,這裡大叔整理了一份自己在配置6.x時,遇到的問題和解決方案。 安裝 下載安裝包解壓後,在根目錄下會找到兩個資料夾:langs(語言包)與plugins(核心程式/外掛包),分別將兩個資料夾拷至Ti

JQ外掛獲取文字框(textarea)內的所選字元和游標位置索引值-selection

(function($){ $.fn.selection = function(){ var s,e,range,stored_range; if(this[0].selectionStart == undefined){ var selection=document.selection; i

Spring Boot入門(二)獲取配置檔案值

本篇部落格主要講解下在Spring Boot中如何獲取配置檔案的值。 1. 使用yaml配置檔案 Spring Boot預設生成的配置檔案為application.properties,不過它也支援yaml語言的配置檔案, 兩者之間的差別並不是很大,只是yaml語言的配置檔案層次結構更明顯,可讀性更強,因此目

Kubernetes學習筆記(六)使用ConfigMap和Secret配置應用程式

## 概述 本文的核心是:如何處理應用程式的資料配置。 配置應用程式可以使用以下幾種途徑: - 向容器傳遞命令列引數 - 為每個容器配置環境變數 - 通過特殊的卷將配置檔案掛載到容器中 ## 向容器傳遞命令列引數 在Kubernetes中定義容器時,映象的ENTRYPOINT和CMD都可以被覆蓋(但是在Do

Kubernetes 教程根據 PID 獲取 Pod 名稱

> 原文連結:[https://fuckcloudnative.io/posts/find-kubernetes-pod-info-from-process-id/](https://fuckcloudnative.io/posts/find-kubernetes-pod-info-from-process-

day39-Spring 11-Spring的AOP基於AspectJ的XML配置方式

asp 技術 mage bsp aop src xml配置方式 img aspectj day39-Spring 11-Spring的AOP:基於AspectJ的XML配置方式

Linux 雙網卡配置兩個IP同時只有一個會通的原因

每次 網關 font onf ipv proc 發現 檢查 echo 根本原因: Linux默認啟用了反向路由檢查 如果2個網卡在一個Lan裏面,那麽服務器可能從eth0或者eth1發現網關, 如果一個包從eth0進入了, 而網關在eth1上, 那麽從eth1是出不去的,

老男孩教育每日一題-2017年5月12日-磁盤知識點linux系統中LVM配置實現方法?

邏輯卷管理 磁盤 每日一題 1.題目老男孩教育每日一題-2017年5月12日-磁盤知識點:linux系統中LVM配置實現方法?2.參考答案01:將一個或多個物理分區創建為一個PV# pvcreate /dev/sdb{1,2} Physical volume "/dev/sdb1" success

前端數據處理參數的獲取和組織發送

字符 字符串 div ren pri 其他 發送 其中 處理 1.var t = $(this); 當前DOM節點為開始 2.var uid = t.parent("dd).attr("perid"); 利用jquery獲取當前DOM節點父子,兄弟的屬性值 3."<d

筆記MyBatis 使用 Java API配置

resultset type alias 然而 exe enabled 取數 actor comm 我們已經討論了各種MyBatis配置元素,如envronments、typeAlias和typeHandlers,以及如何使用XML配置它們。即使你想使用基於JavaAPI的

CentOS 7使用nmcli配置雙網卡聚合LACP

lob ifconf centos7 運行程序 edge 鏈路聚合 網關 最長 ref 進入CentOS 7以後,網絡方面變化比較大,例如eth0不見了,ifconfig不見了,其原因是網絡服務全部都由NetworkManager管理了,下面記錄下今天下午用nmcli配置的

spring-boot實戰【05】Spring Boo多環境配置配置屬性註入到對象

num java red component 配置 cati 定義 fin row 項目工程結構: 配置文件application.properties文件 com.yucong.blog.name=yucong com.yucong.blog.title=Spring

通過獲取配置文件的方式獲取dataSource

cto .class 無法 nco 新增 pub 文件目錄 public inner 第一步:新建工程 SecondSpring 文件目錄結構如下: 第二步: 導入spring相關的jar包,已經 mysql的jar包 過程略... 第三步: 新建連接數據庫的配置文

《Java從入門到放棄》入門篇使用註解的方式配置hibernate映射關系

如果 borde 版本 tar -s 相關 generate rate p s 之前我們都是使用配置文件的方式來生成的代碼,雖然和JDBC比較簡單了很多,但每次都在修改時需要既改實體類又改映射文件。還是有點麻煩。 所以,這一篇,我們來說說使用註解的方式來在接在實體類上配置映

搭建一個webpack3.5.5項目建立項目的webpack配置文件

utf-8 更改 使用方法 dom echo 文件名 後綴 node www 第一步: npm init -y 【初始文件】 npm info webpack / bower info webpack【查看版本,用bower的時候要先 npm install bower】