Planet Linux of Taiwan

01月15日

sakananote's face
sakananote


縮小 展開

Ubutnu 16.04 ssh 小記

Ubutnu 16.04 ssh 小記

因為工作實驗關係, 所以有時也會幫忙準備 Ubuntu VM 給同事, 所以寫這個小記給日後的自己看

IP 設定
  • 直接使用 Network Manager 來設定 IP, 但是要記得重新啟動網路

ssh
  • 使用  #apt-get  install  openssh-server 方式來安裝套件
  • 記得使用 systemctl  status  ssh 與 systemctl  is-enabled  ssh 來檢查

停用 ipv6
  • 編輯 /etc/sysctl.conf
    • 加入 net.ipv6.conf.all.disable_ipv6 = 1
  • 重新開機或是使用 sysctl  -p
  • 可以觀察相關資訊  #cat  /proc/sys/net/ipv6/conf/all/disable_ipv6


Reference


~ enjoy it


01月14日

Thinker's face
Thinker


縮小 展開

Thinker - 2018.1.13

[attach:me.png] == 現狀 == 2017 年六月初離開前一份工作,長達五年半,已經是最長的一份工作了。現在 2018 年一月,剛結束半年的休息和充電,回到台灣思考接下來的方向。 == 聯絡 == 由於垃圾郵件太多,本人已改用 white-list。因此,沒有和本人聯絡過的朋友,可能無法直接透過 EMail 連絡到我。因此,對於這些沒在 white-list 的朋友們,請先在本頁留言,告知您的 EMail address。 == PGP Key == * linkname:[Key ID (0xFF57EAED)] attach:thinker-gpg.asc ...

sakananote's face
sakananote


縮小 展開

Ansible azure module 測試小記

Ansible azure module 測試小記

OS: openSUSE Leap 42.3 in Azure



參考

微軟的文件上面是列出 SLES 12, 然後安裝比較多的套件, 但是他列出的套件本來就有相依性, 例如 python-pip 與 python-setuptools , 所以我就先按照 Ansible 官方的 方式, 我先安裝 pip 來處理

安裝 pip ( 先使用 sudo su - 切換成管理者 root )
# zypper  install  python-pip

預設的 pip 是 7.1.2 所以如果沒有升級, 後續安裝會失敗, 先來升級 pip
# pip  install  --upgrade   pip

觀察 pip 版本
# pip  --version
pip 9.0.1 from /usr/lib/python2.7/site-packages (python 2.7)

安裝相關套件
# pip  install   ansible[azure]

確認相關資訊
# ansible   --version
ansible 2.4.2.0
 config file = None
 configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
 ansible python module location = /usr/lib/python2.7/site-packages/ansible
 executable location = /usr/bin/ansible
 python version = 2.7.13 (default, Jan 03 2017, 17:41:54) [GCC]

# pip   list   --format=columns   azure  |  grep  azure
azure-cli-core              2.0.24   
azure-cli-nspkg             3.0.1    
azure-common                1.1.8    
azure-mgmt-batch            4.1.0    
azure-mgmt-compute          2.1.0    
azure-mgmt-containerservice 1.0.0    
azure-mgmt-dns              1.2.0    
azure-mgmt-keyvault         0.40.0   
azure-mgmt-network          1.7.1    
azure-mgmt-nspkg            2.0.0    
azure-mgmt-resource         1.2.2    
azure-mgmt-sql              0.7.1    
azure-mgmt-storage          1.5.0    
azure-mgmt-web              0.32.0   
azure-nspkg                 2.0.0    
azure-storage               0.35.1   
msrestazure                 0.4.20   

接下來要來處理 Azure 驗證的問題

Ansible 官方的方式我覺得步驟太多, 所以先採用 Azure-Cli 方式
Azure-Cli 可以使用兩種方式

目前先以 Cloud-shell 方式來進行
於 Azure portal 上面點選 >_ 按鈕
就會被提示安裝 Cloud-shell , 我是選 bash 方式


他會需要一個儲存體來使用, 選取訂用帳戶之後就會建立 Cloud-shell



測試一下 az 指令來列出目前的 VM ( 覺得加上--output  table 這個方式很方便 )

==== 以下操作是在 cloud-shell 的終端機 ====

$ az  vm  list  --output  table
Name                       ResourceGroup    Location
-------------------------  ---------------  ----------
kong-0-11-1-test-20171118  SAKANATEST       eastus
test20180113               SAKANATEST       eastus

接下來回到微軟官方說的

az ad sp create-for-rbac --query [client_id: appId, secret: password, tenant: tenant]
  • az  -  Azure 工具指令
  • ad : Synchronize on-premises directories and manage Azure Active Directory resources
  • sp : Manage Azure Active Directory service principals for automation authentication
  • create-for-rbac  : Create a service principal and configure its access to Azure resources.

如果直接在 cloud-shell 執行會出現錯誤

$ az ad sp create-for-rbac --query [client_id: appId, secret: password, tenant: tenant]
az ad sp create-for-rbac: error: argument --query: invalid query value: '[client_id:'


嘗試方式 1:
這樣的方式可行
$ az  ad  sp   create-for-rbac  --query   '[appId, password, tenant]'
Retrying role assignment creation: 1/36
Retrying role assignment creation: 2/36
[
 "d69d8f91-XXXX-XXXX-XXXX-b90b15d8107d",
 "65f16417-XXXX-XXXX-XXXX-296e19bebf4c",
 "4cd326d7-XXXX-XXXX-XXXX-df56dc9dabd4"
]

所以用這樣的想法來推論, 應該是微軟官方文件上面的格式錯誤

上 Azure Taiwan Users Group 上面詢問, 與保哥討論後的方式
$ az  ad  sp  create-for-rbac --query  '{"client_id": appId, "secret": password, "tenant": tenant}'
Retrying role assignment creation: 1/36
{
 "client_id": "d06f8905-XXXX-XXXX-XXXX-3e0bcf22a853",
 "secret": "b7f0df5b-XXXX-XXXX-XXXX-8aaca284f706",
 "tenant": "4cd326d7-XXXX-XXXX-XXXX-df56dc9dabd4"
}

  • 果然兇手是符號  應該配合大括號, 以及單引號與雙引號

如何知道有建立完成呢?
可以使用 az  ad  sp  list 指令檢查, 會有 azure-cli-日期方式的 AppId

$ az  ad  sp  list  --output  table
AppId                                 DisplayName                               ObjectId                              ObjectType
------------------------------------  ----------------------------------------  ------------------------------------  ----------------
7b427a33-XXX-XXXX-XXXX-XXXXa7d8a60c  azure-cli-2018-01-13-04-22-35             f29caeda-XXXX-XXXX-XXXX-97dc15849728  ServicePrincipal


如果要刪除也是使用 az ad sp 指令來處理, 例如
$ az  ad  sp  delete --id   80027916-XXXX-XXXX-XXXX-778cddb9e155

建立的時候, password 的值請好好保存 ( 不然就刪除掉再建立一個 :p  )
因為以 az  ad  sp  show 方式是查不到 password 的喔
$ az  ad  sp  show --id   647f8726-XXXX-XXXX-XXXX-5f2e03e8f2c8


接下來還要有 subscription_id
使用 az account 指令取得

$ az  account  show  --query  "{ subscription_id: id }"
{
 "subscription_id": "6a2bdf3b-XXXX-XXXX-XXXX-3371d3401feb"
}

  • 這邊微軟官方文件上面的符號就是正確的 QQ


==== 以上操作是在 cloud-shell 的終端機, 操作結束 ====

接下來會到 openSUSE Leap 42.3 in Azure 這邊

建立 存放認証的目錄
# mkdir   ~/.azure

使用剛剛的資料建立認証的檔案
# vi   ~/.azure/credentials

[default]
subscription_id=6a2bdf3b-XXXX-XXXX-XXXX-3371d3401feb
client_id=d06f8905-XXXX-XXXX-XXXX-3e0bcf22a853
secret=b7f0df5b-XXXX-XXXX-XXXX-8aaca284f706
tenant=4cd326d7-XXXX-XXXX-XXXX-df56dc9dabd4


建立好了就可以開始測試了
首先就從最簡單的管理 IP 開始吧 :)

Module name:  azure_rm_publicipaddress

目標要從 sakanatest 這個資源群組, 建立一個 mypublic_ip 的固定 IP
先以單一指令的方式來實施吧
# ansible  localhost  -m  azure_rm_publicipaddress  -a  'resource_group=sakanatest name=mypublic_ip  allocation_method=Static'

[WARNING]: Unable to parse /etc/ansible/hosts as an inventory source

[WARNING]: No inventory was parsed, only implicit localhost is available

[WARNING]: Could not match supplied host pattern, ignoring: all

[WARNING]: provided hosts list is empty, only localhost is available

localhost | SUCCESS => {
   "changed": true,
   "state": {
       "dns_settings": {},
       "etag": "W/\"ff593fe3-XXXX-XXXX-XXXX-a3eb90006d47\"",
       "idle_timeout_in_minutes": 4,
       "ip_address": "213.192.72.82",
       "location": "eastus",
       "name": "mypublic_ip",
       "provisioning_state": "Succeeded",
       "public_ip_allocation_method": "Static",
       "tags": null,
       "type": "Microsoft.Network/publicIPAddresses"
   }
}

可以到 Azure Portal 上面確認 :)


接下來測試移除這個 IP

# ansible  localhost  -m  azure_rm_publicipaddress  -a  'resource_group=sakanatest name=mypublic_ip   state=absent'

[WARNING]: Unable to parse /etc/ansible/hosts as an inventory source

[WARNING]: No inventory was parsed, only implicit localhost is available

[WARNING]: Could not match supplied host pattern, ignoring: all

[WARNING]: provided hosts list is empty, only localhost is available

localhost | SUCCESS => {
   "changed": true,
   "state": {
       "status": "Deleted"
   }
}


總算是跨出 Ansible azure module 第一步 :)

Reference

~ enjoy it

01月10日

sakananote's face
sakananote


縮小 展開

iperf with VMware vSphere 6.5 測試小記

iperf with VMware vSphere 6.5 測試小記


Host: VMware vSphere 6.5
Hardware:  Dell R730


測試環境


VMware  Host --  >   10G Switch  -- >  VMware Host  


沒有開 Jumbo Frames, 所以 MTU 是 1500 ( 因為 10G Switch 不在我的控制範圍內 )

最近因為工作的關係, 所以要來測試網路的連線速度以及效能


一開始在 VMware 的 Guest OS ( openSUSE Leap 42.3 ) 測試 iperf 的時候, 覺得頻寬沒有達到預期.


所以就決定先測試 VMware Host 彼此對連的速度


搜尋一下 google, 找到相關文章[1] , 之前找到的文章, iperf 位置是在別的地方, 所以找不到相關指令.

Server side:


確認 VMKernel 的 vSwitch 只連接上 10G 網卡


首先是關掉 VMware vSphere 的 firewall
  • 這個部份因為是測試環境才這樣做, 不然的話開啟 iperf 預設的 TCP port 5001 也可以


連線到 VMware vSphere 主機 SSH ( 開啟 SSH 服務 )


透過 esxcli 指令觀察 firewall 狀況( 參考文章[2] ).


[root@localhost:~] esxcli  network   firewall   get
  Default Action: DROP
  Enabled: true
  Loaded: true


停用 firewall
[root@localhost:~] esxcli  network  firewall  set  --enabled   false

觀察 firewall
[root@localhost:~] esxcli  network   firewall   get
  Default Action: DROP
  Enabled: false
  Loaded: true


複製 iperf 指令
為何要複製 iperf 指令呢?


因為如果用原來的 iperf 指令, 會出現 Operation not permitted, 連線會被拒絕


[root@localhost:~] /usr/lib/vmware/vsan/bin/iperf   -s
bind failed: Operation not permitted
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 64.0 KByte (default)
------------------------------------------------------------


所以乖乖的複製吧 :)
[root@localhost:~] cp   /usr/lib/vmware/vsan/bin/iperf    /usr/lib/vmware/vsan/bin/i
perf.copy


以複製出來的指令執行 iperf   server  mode


[root@localhost:~] /usr/lib/vmware/vsan/bin/iperf.copy    -s
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 64.0 KByte (default)
------------------------------------------------------------

Client side:


確認 VMKernel 的 vSwitch 只連接上 10G 網卡


首先是關掉 VMware vSphere 的 firewall
  • 這個部份因為是測試環境才這樣做, 不然的話開啟 iperf 預設的 TCP port 5001 也可以


連線到 VMware vSphere 主機 SSH ( 開啟 SSH 服務 )


透過 esxcli 指令觀察 firewall 狀況( 參考文章[2] ).


[root@localhost:~] esxcli  network   firewall   get
  Default Action: DROP
  Enabled: true
  Loaded: true


停用 firewall
[root@localhost:~] esxcli  network  firewall  set  --enabled   false

觀察 firewall
[root@localhost:~] esxcli  network   firewall   get
  Default Action: DROP
  Enabled: false
  Loaded: true


複製 iperf 指令
[root@localhost:~] cp   /usr/lib/vmware/vsan/bin/iperf    /usr/lib/vmware/vsan/bin/i
perf.copy


以複製出來的指令執行 iperf   client  mode
  • -c 後面你加上 iperf server的 IP
  • 每次 Client 這邊的 port 都會換


[root@localhost:~] /usr/lib/vmware/vsan/bin/iperf.copy   -c   YOUR_SERVER_IP
------------------------------------------------------------
Client connecting to YOUR_SERVER_IP, TCP port 5001
TCP window size: 32.5 KByte (default)
------------------------------------------------------------
[  3] local YOUR_CLIENT_IP port 43885 connected with YOUR_SERVER_IP port 5001
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-10.0 sec  4.53 GBytes  3.89 Gbits/sec

嘗試使用 -P , --parallel  #        number of parallel client threads to run 方式執行


[root@localhost:~] /usr/lib/vmware/vsan/bin/iperf.copy   -c   YOUR_SERVER_IP  -P  8
  • 這樣的方式就是同時用 8 個連線, 可以再測試出更多一點效能與狀況
  • -w, --window    #[KM]    TCP window size (socket buffer size), 指定大小也是不錯的測試方式, 例如 -w 8M
  • 預設是 10 秒, 但是可以藉由 -t 15 指定測試 15 秒, 然後藉由 -i 1 每秒顯示結果


可以觀察測試結果


在 10G switch 使用 電的方式( 非光纖 ), 加上 MTU 為預設的 1500, 目前我測到的速度大概是 2.X Gbits / sec


[  4]  0.0-15.0 sec  4.32 GBytes  2.47 Gbits/sec


==========================
測試完 VMware vSphere, 接下來就是 Guest OS 部份


Guest OS: openSUSE Leap 42.2


VMware Guest 部份


使用 ethtool  網卡確認網卡速度


# ethtool   eth0
Settings for eth0:
Supported ports: [ TP ]
Supported link modes:   1000baseT/Full
                       10000baseT/Full
Supported pause frame use: No
Supports auto-negotiation: No
Advertised link modes:  Not reported
Advertised pause frame use: No
Advertised auto-negotiation: No
Speed: 10000Mb/s
Duplex: Full
Port: Twisted Pair
PHYAD: 0
Transceiver: internal
Auto-negotiation: off
MDI-X: Unknown
Supports Wake-on: uag
Wake-on: d
Link detected: yes


安裝  iperf 套件
# zypper   install   iperf


檢查版本
# iperf3  --version
iperf 3.0.12
Linux template 4.4.79-18.26-default #1 SMP Thu Aug 10 20:30:05 UTC 2017 (fa5a935) x86_64 x86_64 x86_64 GNU/Linux


  • 在 VMware 內的 iperf 應該是 2.x 版本, iperf 3.x 版本有多一些新選項


因為是 iperf 3.x 版本, 所以指令Server side
  • 在 5201 port listen


# iperf3   -s
-----------------------------------------------------------
Server listening on 5201
-----------------------------------------------------------

Client side 是


# iperf3  -c  YOUR_SERVER_IP

Notes

  • 要非常注意 Guest OS 的 VM網卡 Driver
    • 剛開始測試的網卡是 Flexible
      • 只有 Giga 的速度, 就算外面是 10G 也沒用 QQ, ethtool 是你的好朋友, 要先下這個指令看速度
      • E1000 我測試也是 Giga 速度
      • 有個 VM 範本不小心選到 Linux - other 32 bits, 只能選 Flexible and e1000, …….
    • 所以一定要用 VMXNET3, 才會跟 10G 做好朋友 :)

參考




~ enjoy it