vHoge

VMwareのアレコレ備忘録。CLIでがんばるネタ多め。

VM Meetup Tokyo #1

こちらに参加してきました。
VM meetup tokyo #1 - connpass

NIFcLounge外観 案内 場所は東銀座、富士通クラウドテクノロジーズ社のイベント会場 NIFcLounge 。
先日のブログVMware DevOps Meetup #1 でようやく connpass 上にイベント出たわーと思ったら立て続けに VMware が主題のイベント が。
こちら初回は 「VMwareのネットワーク関連技術全般について」をお題に開催。

当日募集で LT 枠があるとのことなので、コネクション拡大の取っ掛かりや vExpert としての Activity とかの思惑のもと LT ネタを仕込んでの参加。

オープニング

  • LT やりたい人? → (自分含め)3名、初回だし様子見多し?
  • ユーザ間での発表や議論、VMware 社員も来ていますが基本的には喋らない
  • ビールは飲みながらやる?w → 意外に少なく21時までは真面目にやることに
  • 今後はオープンな勉強会として隔月ぐらいでやっていきたい
    • VM Meetup Tokyo → ユーザ主体、(VMware と絡めつつも) OSS 主体とかな話も
    • VM DevOps Meetup → VMware 社主体

といわけで、こちらはユーザ主催という切り分け。
DevOps の方も初回なので VMware 社主体で社員中心発表だったが、あちらもユーザで回していきたいみたいな話もあったので、
回が進むと内容的には近しくなっていくかも(主催が誰になるかの違い?)

発表資料は connpass を見れば閲覧可能。

VirtualCloudNetworkおさらいとNSX Cloud活用法

  • 資料の公開決済がとれてないので資料はアップロードとかされません…w
  • 地銀共同利用ネットワークとかやってた → クラウドネットワーク担務へ
  • NSX ファミリー → NSX SD-WAN VeloCloud, NSX Cloud, NSX Datacenter
  • NSX Datacenter → オンプレ vSphere で NW 管理、それぞれの DC に NSX がいる
    • NSX-v : VXLAN
    • NSX-T : GENEVE、 container NW とか Istio の話もこちら
  • NSX Cloud → オンプレに NSX-Manager を立て、CloudNetWorking(AWS/Azure) を Native で管理
    • 2019~2020 には GCP も対応
  • 内部はNSX-T 2.4
  • 活用方法
    • オンプレ NSX でマルチクラウドをやるときに一元管理
      • クラウド接続は VGW でも DirectConnect/Express Route でも
    • VM、IP、switch にタグをつけて抽象化、クラウドを超えてグルーピング、DFW 管理
    • 単一コンソール管理、野良 VM 検知
  • 2.4 から Identity Firewall、ADグループ (例.人事部、総部) などに基づいて Firewall
  • 検証してみて
    • クラウドAPIのログをどこで見れるか知っておきたい
    • NSX Cloud は発展途上、NSX-Tの強化に合わせて進化していくと思われる
  • NWの方向性
    • SW レイヤーで HW を抽象化、EndToEnd の NW Fabric で構築して WAN/LAN などの Function 単位で分割していた NW を統合
    • OpenFlowの垂直統合の解放から水平統合、全包囲の時代へ

CloudHealth と同じく、クラウドを抽象化してマルチクラウドを一元管理という方向。
インフラの会社からプラットフォームの会社へという話がありましたがまさにはこういう部分がそれを表している印象。次への戦略としては非常に上手いと思います。
もの自体は NSX-T は触ったことあるけど、パブリッククラウドがさっぱりなので、なんか難しそうなことやってるなぁ…ぐらいのイメージ

NSX-T Deep Dive

  • NSX-v → vCenter-NSXManager 連携必須、VXLAN、vDS
  • NSX-T → NSX-Manager は独立、GENEVE、N-VDS
  • 分散論理ルータ
    • NSX-v Controller VM が要る
    • NSX-T 不要
  • N-VDS は ESXi をトランスポートに入れると勝手にインストールされる
  • NSX-Tの評価
    • NSX-v のマルチテナント構成に適用可能か
      • 物理スイッチことに VRF
      • テナントごとに ESG を作成
  • テナントごとに Tier-0 ルータを作成
    • 1つの EDGE クラスタに Tier-0 ルータは1つのみのため不可
  • 1つの Tier-0 ルータでテナントごとの VRF
    • ルーティングテーブルは1つのみなので不可
  • テナントごとの EDGE クラスタで Tier-0 を立てる
    • これなら OK
    • ルーティングと SNAT を足すと VMNSX 外へ通信できる
    • EDGE リソースに注意
  • 冗長化
    • NSX-v → Act/Stn は仮想IP ルーティングが簡単
    • NSX-T → Act/Stn は個別IP 障害時の切り替わり設定を上位で

NSX-v 分かる人には結構ちがうと思うところがある…?NSX-v あまり知らない…
にしても NSX 自体理解して構成作るまで結構難しいので、淡々と書いてありますが、結構大変だったろうなぁ。

ところで KVM での NSX-T の話ってどこかでやってないかなぁ。
大体 vSphere での話が多くて KVM は対応しているけど話はほとんど聞いたことない…
VMworld のセッション探せばあるかな?

ニフクラの NSX-v 運用 DFW トラブルシューティング

  • 富士通クラウドテクノロジー
    • 2006~ IaaS
    • モバイルバックエンドとかもやっている
  • ニフクラ
    • IaaS で EDGE、DFW
    • 拠点間 VPN とかは VyOS
    • DRサービス で LogicalSwitch
    • DaaS で DeepSecurity
  • 1 データセンタ規模の中でも最大規模の NSX-v 活用
    • 物理 FW → DFW へ 10000VM を無停止移行
  • 体制
    • 企画、開発、運用
    • サポート
    • ニフクラアプリ
    • vSphere
    • 物理機器
  • 運用ツール
    • エンドユーザはニフクラポータルを操作
      • NSX-Manager API をたたいている
    • API 監視 → python 自作ツール
    • ログ監視 → Flunted, ZABBIX, ElasticSearch
    • 構成管理 → Gitlab, Ansible
  • DFW トラブルシューティング
    • 設定が反映されていない場合
    • 許可しているはずのルールでドロップ
  • 設定が反映されていない場合
    • ルール配信の仕組み NSX-Manager → vsfwd → vsip → dvfilter
      • NSX-Manager → UIで見る
      • vsfwd → API たたいて generation number を確認でホストまで届いているか
      • vsip → vsipioctl / vsfwd.log
      • dvfilter → summarize-dvfilter
    • VMwareTools が動いていないと IP が展開されない
      • 有効にすると NSX-Manager の CPU 負荷がかかる、検証しながらやる
  • 許可しているはずのルールでドロップ
    • 既存セッション → コネクショントラッカーテーブルを評価
    • 新規セッション → ルールテーブルを評価、コネクショントラッカーテーブルに追加
    • dvfilter 統計情報
    • パケットキャプチャ(pktcap-uw)
    • dvwpktlogs
      • 各ホストにある
    • Conntrack でドロップ
      • 非対称ルーティング

NSX-v の DFW Deep Dive な話。
ここまでのノウハウを持ち合わせてないようなら Network Insight でなんとか…難しい?
そもそもの Overlay NW 自体難しいので十分恩恵ありそうだけど。

内製で色々できる技術もっている会社だとログ周りは大体 ELK 。
Log Insight 使ってますって聞いたことないけど、エンタープライズな基幹領域とか自社開発部隊持っていないようなところだと入ってたりするのかな。

LT1:NSX の Ansible モジュールについて調べてみた

  • NSX を Ansible でアレコレするお話
  • NSX-v 向けモジュール → ほぼ開発停止… NSX-T に注力?
  • NSX-T 向けモジュール → 開発中
  • 新規 Deploy は揃っているが、config 変更周りは…
    • なので firewall rule import/export を作ってみた! → デモ
  • Ansible ユーザ会やってます

Ansible はエージェントレスで環境汚さないので個人的には好きなのだが、組織的にアレやコレやで仕事では使っておらず…
Ansible に限らず、デプロイツール x vSphere は VM まわりはそれなりに揃っているが、
vCenter インベントリ周り(DC/Cluster 作成とか ESXi 登録とか)がイマイチだった記憶。
最新事情は違うかもしれないが、その辺りも充実してくれれば… (← 自分でやれ)

LT2:ESXi 上での VM IP 取得について

自分のセッション。スライドの通りで詳細は一旦割愛。
というか、時間的に削った話もあるので、Appendix としてブログ書こうかなと画策中。

周りは NSX ネタで発表する中、一人 非 NSX なレガシー環境ネタで、
NW ネタというお題的観点でもストライクゾーンギリギリ(アウト?)な内容w
LT 枠に余裕あったし、無いよりはあったほうが盛り上がるぐらいで見てもらえると。

にしても 5分枠で7分半話してたのは真摯に反省。

LT3:(CNCI社 の NSX-v 事例)

  • バタバタしてたのでメモが取れていない…
  • CNCI社 の ニコライさんの発表
    • vForum 2018 Tokyo で vSAN 事例の話をされていた方
    • 個人的には vForum 2018 Tokyo ベストセッション
  • vForum のセッションでは次は NSX みたいな話をされていたので多分その話…?
  • 環境が Metropolitan Area Network と特有なのでその話だけでも面白い

Tinker Board S で遊ぶ

vSphere 無関係な GW 自由研究で買ってみたネタです。

Tinker Board S って?

ASUS が製造、販売している Single Board Computer(SBC) 。
www.asus.com

同じジャンルの製品だと Raspberry pi が圧倒的に有名だったりしますが、
その Raspberry pi をかなりスペックアップさせたものが本製品。
(お値段もそれなりに上がりますが)
細かい比較はどこか適当に検索…ということにして、ポイントをざっくり書くと

  • CPU (4Core/1.4GHz → 4Core/1.8GHz)
  • メモリ (DDR2 1GB → DDR3 2GB)
  • NIC (GbE over USB 2.0(Max300Mbps) → Native GbE(Max1Gbps))

個人的には Raspberry pi はセンサーとか繋げたデバイス制御向けで、
ARM PC サーバとなるとメモリや GbE 的に Tinker Board S の方が良いかなぁと。

外観とか

購入物 今回の購入物

  • Tinker Board S ¥10,756
  • 動作検証済スイッチ付きUSB ACアダプタ ¥1,600
  • クリアケース ¥950
  • microSDHC 32GB ¥470

microSD 以外は秋葉原千石電商で購入。(microSD はあきばお~が安かったので)

基盤
IF は USB 2.0 x4, RJ-45(LAN), HDMI, ステレオミニジャック, 電源用 microUSB に
GPIO, MIPI CSI, MIPI DSI と SBC にはおなじみなものも

基盤背面
背面、銀色の部分が micro SD スロット

SoC
SoC は Rockchip RK3288 で ARM プロセッサとしては Cortex-A17

ヒートシンク
ヒートシンクが同梱

ACアダプタ
基盤の端子は micro USB だが、5V/3.0A なのでよくあるケーブルでは未対応のはず

クリアケース
クリアケース自体は Raspberry pi 対応ケースとして売っていた品物

ケース搭載
IF 搭載位置は Raspberry pi と同じのため、ケースはそのまま使える

OS インストール

手順はほぼ ↓ のサイトの通りに
physical-computing-lab.net
ただ、 OS は新しめの Ubuntu が使いたかったので、
↓ より Armbian Bionic のイメージを利用。
www.armbian.com

OS 書き込み後に起動。 起動中
いつもの感じの起動ダイアログがダラダラと

ログインダイアログ
一通りの起動がログインダイアログ。
初期ユーザ/パスワードはroot/1234で。

パスワード変更
初回 root ログイン時はパスワード変更を求められるので変更

ユーザ作成
また、root 以外のユーザ作成も求められるので作成する

XFCE
ユーザ作成が終わると X Window System として XFCE が上がってくる

OS から色々見てみる

主にハードまわりで思いついたものを羅列

/proc/cpuinfo

root@tinkerboard:~ # cat /proc/cpuinfo
processor       : 0
model name      : ARMv7 Processor rev 1 (v7l)
BogoMIPS        : 57.60
Features        : half thumb fastmult vfp edsp thumbee neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm
CPU implementer : 0x41
CPU architecture: 7
CPU variant     : 0x0
CPU part        : 0xc0d
CPU revision    : 1

processor       : 1
model name      : ARMv7 Processor rev 1 (v7l)
BogoMIPS        : 57.60
Features        : half thumb fastmult vfp edsp thumbee neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm
CPU implementer : 0x41
CPU architecture: 7
CPU variant     : 0x0
CPU part        : 0xc0d
CPU revision    : 1

processor       : 2
model name      : ARMv7 Processor rev 1 (v7l)
BogoMIPS        : 57.60
Features        : half thumb fastmult vfp edsp thumbee neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm
CPU implementer : 0x41
CPU architecture: 7
CPU variant     : 0x0
CPU part        : 0xc0d
CPU revision    : 1

processor       : 3
model name      : ARMv7 Processor rev 1 (v7l)
BogoMIPS        : 57.60
Features        : half thumb fastmult vfp edsp thumbee neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm
CPU implementer : 0x41
CPU architecture: 7
CPU variant     : 0x0
CPU part        : 0xc0d
CPU revision    : 1

Hardware        : Rockchip (Device Tree)
Revision        : 0000
Serial          : 0000000000000000

/proc/meminfo

直前に reboot、daemon も追加してないほぼデフォルト起動状態

root@tinkerboard:~ # cat /proc/meminfo
MemTotal:        2050740 kB
MemFree:         1823476 kB
MemAvailable:    1895960 kB
Buffers:           14652 kB
Cached:           107208 kB
SwapCached:            0 kB
Active:            82560 kB
Inactive:          70772 kB
Active(anon):      31792 kB
Inactive(anon):     5864 kB
Active(file):      50768 kB
Inactive(file):    64908 kB
Unevictable:           0 kB
Mlocked:               0 kB
HighTotal:       1310720 kB
HighFree:        1155488 kB
LowTotal:         740020 kB
LowFree:          667988 kB
SwapTotal:       1025368 kB
SwapFree:        1025368 kB
Dirty:               156 kB
Writeback:             0 kB
AnonPages:         31512 kB
Mapped:            30860 kB
Shmem:              6188 kB
Slab:              39492 kB
SReclaimable:      19288 kB
SUnreclaim:        20204 kB
KernelStack:        1168 kB
PageTables:         1156 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:     2050736 kB
Committed_AS:     163020 kB
VmallocTotal:     245760 kB
VmallocUsed:           0 kB
VmallocChunk:          0 kB
Percpu:              480 kB
CmaTotal:              0 kB
CmaFree:               0 kB

lscpu

root@tinkerboard:~ # lscpu
Architecture:        armv7l
Byte Order:          Little Endian
CPU(s):              4
On-line CPU(s) list: 0-3
Thread(s) per core:  1
Core(s) per socket:  4
Socket(s):           1
Vendor ID:           ARM
Model:               1
Model name:          Cortex-A12
Stepping:            r0p1
CPU max MHz:         1800.0000
CPU min MHz:         126.0000
BogoMIPS:            57.60
Flags:               half thumb fastmult vfp edsp thumbee neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm

スペックシートだと Cortex-A17 と記載あるけど、表示はされない…

lsblk

root@tinkerboard:~ # lsblk
NAME         MAJ:MIN RM    SIZE RO TYPE MOUNTPOINT
mmcblk2      179:0    0   14.7G  0 disk
`-mmcblk2p1  179:1    0   14.5G  0 part /
mmcblk2boot0 179:16   0      4M  1 disk
mmcblk2boot1 179:32   0      4M  1 disk
mmcblk0      179:48   0   28.8G  0 disk
`-mmcblk0p1  179:49   0   28.8G  0 part
zram0        252:0    0     50M  0 disk /var/log
zram1        252:1    0 1001.3M  0 disk [SWAP]

容量から見て mmcblk2が eMMC で、mmcblk0 が microSD

lspci

root@tinkerboard:~ # lspci
pcilib: Cannot open /proc/bus/pci
lspci: Cannot find any working access method.

PCI バスなど無いということか

lshw

root@tinkerboard:~ # lshw
tinkerboard
    description: ARMv7 Processor rev 1 (v7l)
    product: Rockchip RK3288 Tinker Board
    width: 32 bits
    capabilities: smp
  *-core
       description: Motherboard
       physical id: 0
     *-cpu:0
          description: CPU
          product: cpu
          physical id: 0
          bus info: cpu@0
          size: 1800MHz
          capacity: 1800MHz
          capabilities: half thumb fastmult vfp edsp thumbee neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm cpufreq
     *-cpu:1
          description: CPU
          product: cpu
          physical id: 1
          bus info: cpu@1
          size: 1800MHz
          capacity: 1800MHz
          capabilities: half thumb fastmult vfp edsp thumbee neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm cpufreq
     *-cpu:2
          description: CPU
          product: cpu
          physical id: 2
          bus info: cpu@2
          size: 1800MHz
          capacity: 1800MHz
          capabilities: half thumb fastmult vfp edsp thumbee neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm cpufreq
     *-cpu:3
          description: CPU
          product: cpu
          physical id: 3
          bus info: cpu@3
          size: 1800MHz
          capacity: 1800MHz
          capabilities: half thumb fastmult vfp edsp thumbee neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm cpufreq
     *-memory
          description: System memory
          physical id: 4
          size: 2002MiB
  *-usbhost:0
       product: DWC OTG Controller
       vendor: Linux 4.19.33-rockchip dwc2_hsotg
       physical id: 2
       bus info: usb@1
       logical name: usb1
       version: 4.19
       capabilities: usb-2.00
       configuration: driver=hub slots=1 speed=480Mbit/s
     *-usb
          description: USB hub
          product: USB2.0 Hub
          vendor: Genesys Logic, Inc.
          physical id: 1
          bus info: usb@1:1
          version: 32.98
          capabilities: usb-2.00
          configuration: driver=hub maxpower=100mA slots=4 speed=480Mbit/s
  *-usbhost:1
       product: DWC OTG Controller
       vendor: Linux 4.19.33-rockchip dwc2_hsotg
       physical id: 3
       bus info: usb@2
       logical name: usb2
       version: 4.19
       capabilities: usb-2.00
       configuration: driver=hub slots=1 speed=480Mbit/s
  *-usbhost:2
       product: EHCI Host Controller
       vendor: Linux 4.19.33-rockchip ehci_hcd
       physical id: 1
       bus info: usb@3
       logical name: usb3
       version: 4.19
       capabilities: usb-2.00
       configuration: driver=hub slots=1 speed=480Mbit/s
     *-usb
          description: Audio device
          product: USB Audio
          vendor: Generic
          physical id: 1
          bus info: usb@3:1
          version: 0.00
          serial: 201405280001
          capabilities: usb-2.00 audio-control
          configuration: driver=usbhid maxpower=100mA speed=480Mbit/s
  *-network:0
       description: Wireless interface
       physical id: 4
       logical name: wlan0
       serial: d0:c5:d3:5a:8b:1f
       capabilities: ethernet physical wireless
       configuration: broadcast=yes driver=rtl8723bs multicast=yes wireless=unassociated
  *-network:1 DISABLED
       description: Ethernet interface
       physical id: 5
       logical name: dummy0
       serial: 52:dc:63:ea:af:93
       capabilities: ethernet physical
       configuration: broadcast=yes driver=dummy driverversion=1.0
  *-network:2
       description: Ethernet interface
       physical id: 6
       logical name: eth0
       serial: 0c:9d:92:0c:69:0c
       size: 1Gbit/s
       capacity: 1Gbit/s
       capabilities: ethernet physical tp mii 10bt 10bt-fd 100bt 100bt-fd 1000bt 1000bt-fd autonegotiation
       configuration: autonegotiation=on broadcast=yes driver=st_gmac driverversion=Jan_2016 duplex=full ip=192.168.0.41 link=yes multicast=yes port=MII speed=1Gbit/s

dmidecode

root@tinkerboard:~ # dmidecode
# dmidecode 3.1
Scanning /dev/mem for entry point.
/dev/mem: Operation not permitted
/dev/mem: Bad file descriptor

SMBIOS なんか対応してないということね…

ethtool eth0

root@tinkerboard:~ # ethtool eth0
Settings for eth0:
        Supported ports: [ TP MII ]
        Supported link modes:   10baseT/Half 10baseT/Full
                                100baseT/Half 100baseT/Full
                                1000baseT/Half 1000baseT/Full
        Supported pause frame use: Symmetric Receive-only
        Supports auto-negotiation: Yes
        Supported FEC modes: Not reported
        Advertised link modes:  10baseT/Half 10baseT/Full
                                100baseT/Half 100baseT/Full
                                1000baseT/Half 1000baseT/Full
        Advertised pause frame use: No
        Advertised auto-negotiation: Yes
        Advertised FEC modes: Not reported
        Link partner advertised link modes:  10baseT/Half 10baseT/Full
                                             100baseT/Half 100baseT/Full
                                             1000baseT/Half 1000baseT/Full
        Link partner advertised pause frame use: Symmetric Receive-only
        Link partner advertised auto-negotiation: Yes
        Link partner advertised FEC modes: Not reported
        Speed: 1000Mb/s
        Duplex: Full
        Port: MII
        PHYAD: 0
        Transceiver: internal
        Auto-negotiation: on
        Supports Wake-on: ug
        Wake-on: d
        Current message level: 0x0000003f (63)
                               drv probe link timer ifdown ifup
        Link detected: yes

inxi -F

root@tinkerboard:~# inxi -F
System:    Host: tinkerboard Kernel: 4.19.33-rockchip armv7l bits: 32 Console: tty 0 Distro: Ubuntu 18.04.2 LTS
Machine:   No /sys/class/dmi; using dmidecode: unknown error occurred
CPU:       Quad core ARMv7 rev 1 (v7l) (-MCP-)  (ARM)
           clock speeds: max: 1800 MHz 1: 1800 MHz 2: 1800 MHz 3: 1800 MHz 4: 1800 MHz
Graphics:  Card: Failed to Detect Video Card!
           Display Server: X.org 1.19.6 drivers: modesetting (unloaded: fbdev)
           tty size: 120x37 Advanced Data: N/A for root out of X
Audio:     Card-1 USB Audio OnBoard driver: USB-Audio Sound: ALSA v: k4.19.33-rockchip
           Card-2 rockchip driver: tinker-codec
           Card-3 Realtek driver: USB Audio
Network:   Card: Failed to Detect Network Card!
Drives:    HDD Total Size: NA (-)
           ID-1: /dev/mmcblk2 model: N/A size: 15.8GB
           ID-2: /dev/mmcblk0 model: N/A size: 31.0GB
Partition: ID-1: / size: 15G used: 1.6G (11%) fs: ext4 dev: /dev/mmcblk2p1
           ID-2: /var/log size: 49M used: 4.7M (11%) fs: ext4 dev: /dev/zram0
           ID-3: swap-1 size: 1.05GB used: 0.00GB (0%) fs: swap dev: /dev/zram1
RAID:      No RAID devices: /proc/mdstat, md_mod kernel module present
Sensors:   None detected - is lm-sensors installed and configured?
Info:      Processes: 123 Uptime: 23 min Memory: 112.2/2002.7MB Init: systemd runlevel: 3
           Client: Shell (bash) inxi: 2.3.56

ハードウェア情報何が取れるかなで調べてたら見つけたコマンドですけど、
めっちゃ便利ですね。。。

dmidecode や lspci が取れないあたり、x86 サーバでは味わえない感覚なのかと。

今後どうしよう

とりあえず ESXi 上の VM で動かしている dnsmasq はこちらに移動させたい。
(vCSA の DNS はそちら向いてて、微妙に鶏卵状態なので)
それとホームラボ用の NTP もこちらに立てておきたい。
USB ディスク挿してファイルサーバとかもいいかも。消費電力低いし。

あとは ARM で何かあればかなぁ。
ESXi on ARM とか出れば入れてみたい…どこまで対応するのかはわからないけど。

VMware DevOps Meetup #1

こちらに参加してきました。
VMware DevOps Meetup #1 - connpass

浜松町スクエア 入口 プロダクトの普及度や遊べる具合の割には今まで connpass 上に全くイベントが出てこずモヤモヤしていたが、ようやく初お目見え。
DevOps が主題ということで、OSS とか CI/CD、API 制御みたいなUser の中でも Developer 寄りの話が中心なイベント。
初回は浜松町のヴイエムウェアオフィスにて開催。

オープニング

  • VMware はインフラの会社からアプリケーションプラットフォームの会社へ
  • 初回なのでヴイエムウェア社員中心
  • 次回以降は皆様などコミュニティベースにしていきたい
  • DevOps の取り組みや OSS 活動を紹介、ディスカッションしていきたい

VMware における DevOps

  • インドにある IT Department 担当者からのリモート講演
  • Customer と同じ Experience を提供
  • 新しい機能リリース数か月 → DevOps で開発後すぐに Deploy
    • 昨年 5500 Future リリース、毎日やってる
  • Domain Driven DevOps 実践
  • 数年にわたるステップ実施
    • 1st 世界中の数千人の開発者向けにインフラ強化
    • 2nd インフラを自分たちのプライベートクラウド(One Cloud)へ
    • 3rd CI/CD の導入
  • 採用ツール
    • PaaS として Cloud Foundry
    • Container は PKS
    • CI/CD には Concourse
    • Traditional なアプリケーションは vRealize Code Stream
    • 開発者向けポータルを提供、いつでも環境を立ち上げられるように
  • チーム体制
    • 2ピザモデルへチームを分解
    • それぞれのチームに開発者、QAエンジニア
  • Continous Planing, Continous Requirement を設計していく
  • 最終的にはゼロタッチデプロイまで達成

最新の教科書に載るようなお手本というべき DevOps の Dog Fooding。
個人的にはあと test ってどんな感じかということを聞いておけば…と、後で思いつく...orz

VMware オープンソース プロジェクトの紹介

Clarity

  • Angular ベースな UI フレームワーク
  • CLRという独自なタグが追加される
  • デモで Fusion の API をたたいて VM を取得、クローン作成
    • UI を Clarity で1晩ぐらいでサクッと
    • ロジック周りは TypeScript

見える範囲だと vExpert Application Portal も Clarity ベースっぽい。

HTML ソースをのぞくと

<head>
  <!-- Meta -->
  <meta charset="utf-8">

  <title>vExpert Application Portal</title>
  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
  <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0">
  <meta content="yes" name="apple-mobile-web-app-capable">
  <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">

  <base href="/">

  <link rel="shortcut icon" href="/clarity/favicon.ico" type="image/x-icon">
  <link rel="icon" href="/clarity/favicon.ico" type="image/x-icon">

  <link rel="stylesheet" href="/clarity/clarity-icons/clarity-icons.min.css">
  <script src="/clarity/clarity-icons/clarity-icons.min.js"></script>

  <script src="/js/jquery-3.1.1.min.js"></script>
  <script src="/js/jquery.validate.min.js"></script>

  <script src="//cdn.datatables.net/1.10.13/js/jquery.dataTables.min.js"></script>
  <script src="/js/jquery.modal.min.js"></script>

  <link rel="stylesheet" href="/clarity/clarity-ui/clarity-ui.min.css">
  <link rel="stylesheet" href="/clarity/font-awesome/css/font-awesome.min.css">
  <link rel="stylesheet" href="/clarity/style.css">
  <link rel="stylesheet" href="/vexpert.css">

</head>

ログイン画面とか見ると最近よく見るなー感がある。

vSphere Automation & [py|go|rb]vmomi

  • VMware API Explorer にて Doc 公開
  • VMOMI
    • Virutal Machine Object Management Interface
    • 内部実装を多岐に渡るのでIDLとしてVMODL
    • Java(VLSI)/ Ruby / Phython / Go
  • vSphere Automation SDK
    • VMOMI をたたく
      • *Vmomi を Wrap している SDK
      • 同じことをやるにしても *Vmomi と SDK for * では記述が異なる
    • VMOMI/VMC SDK/NSX SDK/API Client
  • SDK for * / *Vmomi
    • SDK for Python が一番更新頻度が高く、サンプルが豊富
    • go だと govmomi
    • SDK for Java / Ruby / Perl / .NET
    • govmomi / pyvmomi/ rbvmomi
  • VMware Code でサンプル投稿が可能

pyVmomi/goVmomi は個人的には無茶お世話になっている代物。
SDK for Python の方がサンプル豊富とのことだが、記述方法が異なるとか MOB とも少し異なってくるとなると今から乗り換えるほどでもないかも。
ちなみにこの講演での最重要事項はVMOMI 読み方、"ぶいもみ"
ずっと謎でしたが、これが公式らしい(暫定?)

Photon OS

  • Container Host 向け Linux Distribution
    • 最小構成、非常にコンパクト
    • CloudNative App
  • Photon Platform は R.I.P.
    • PKS へ統合、戦略的撤退
    • OS は残る
  • 特徴
    • 機能
      • tdnf (dnf の C 実装):パッケージマネージャ
      • vSphere用カーネルパラメタ調整
      • pmd-cliでリモート管理 (FW / NW / Pkg / User)
    • 構成
      • Linux Kernel 4.19
      • glibc 2.28
      • Kernel Self Protection Projectで構成
      • ローリングリリースモデル
    • Usability
      • パスワード入力でログイン
      • yum 互換、systemd、vim etclll
      • OVA インポートできてサイズも小さい
  • Container Host 比較
    • サイズ ProjectAtomic > CoreOS > PhotonOS
    • kernel PhotonOS(4.19.32) ≒ CoreOS (4.19.34) < ProjectAtomic (5.0.7)
  • Photon OS 実績
    • vCSA 6.5
    • NSX Controller
    • UnifedAccessGateway
    • SiteRecoveryManager
    • ニフクラ

Container Host 向け Distribution ぐらいは知ってたけど、pmd-cli は知らなかった…
pmd-cli 次第では色々遊べる OS …?

Open Discussion

という名の懇親会。
当日集めたアンケート結果とか振り返っていた…のかな?
自分は大体知り合いと飲み食いしながら話してたので全然内容知らずw

一応 Survey だけ見るてみると
1.仕事での VMware との関係を教えてください
 4割ぐらいがパートナーで3割ぐらいが企業ユーザという具合
 ライバルメーカーって項目があって何人かいるみたいだけどどこら辺の会社だろう?
2.皆様は IT においてどんな DevOps な人ですか?
 Dev/Ops なんらかやっているという人は7割。
 その中でも Dev/Ops 兼任という人は思ってたより少なめ。
3.皆様の DevOps への関わり方は?
 仕事でエンジニアリングという人が半数。
 営業・企画サイドでという関わり方の人も。
4.DevOps・IT に関連する情報 "収集" 手法は?
 ほとんどの人が SNS で、続いて各サイト、オフラインコミュニティ、書籍と続く。
5.DevOps・IT に関連する情報 "発信" 手法は?
 こちらも SNS やブログが多い。
 書籍執筆や OSS 活動という人もチラホラ。
6.コミュニティやイベントで登壇したことは?
 6 割ぐらいが登壇経験有で、そのうち半分ぐらいは 4 回以上の強者。
7.DevOps や IT のナレッジを皆さんに向けて共有していただける方いらっしゃいますか?
 セッションとしては1割ぐらいで、LT なら…半数。
8.VMware で働くことに興味がありますか?
 マーケ調査?w
 実際どうなるかはさておき、半数以上は興味ありと好評な模様。
9.全体的に今日のイベントはいかがでしたか?
 概ね好評。もう少しテクニカルにふっても良さそう。

ESXi の root パスワードを Web UI で変更する

ESXi の root パスワードの変更。
正攻法だとコンソールなり ssh なりで乗り込み、passwdで変更が多そう。
強者だと PowerCLI のSet-VMHostAccount辺り?

これを Web UI から変更を行うお話。

Managed Object Browser

と言ってもお馴染みの vSphere Client / vSphere Web Client ではなく、
Managed Object Browser(MOB) からの操作となる。
MOB MOB が何たるかは公式 Doc
vCenter の一連の管理オブジェクト構造を UI を化しているもので、
そのオブジェクトに応じたメソッドを実行することもできる。

vSphere API (*vmomi) 系の開発やっていると無くてはならないもの。
(PowerCLI 系の開発でも見る?)

Managed ESXi Host from vCenter

と言うわけで MOB から変更ができるので試す。
vCenter TOP の↓のリンクから。
MOB はこちら URL 直で開く場合はhttps://[vCenter FQDN or IP]/mob


認証は vCenter と同じ
URL を開くとベーシック認証にて ID/Pass が求められるので、
然るべき vCenter のアカウントでログイン。
ひとまずはadministrator@vsphere.local で。


MOB TOP 細かい話は割愛。
以下の NAME の項目の VALUE がリンクになっているので、 それを辿っていき対象のホストを開く。
[content] → [rootFolder] → [childEntity] → [hostFolder] → [childEntity] → [host] → [configManager] → [accountManager]
childEntityhostはデータセンタやクラスタ、ホストでリンクが分かれているので、変更対象のホストがいるオブジェクトを選んで辿っていく。


accountManager accountManagerを開くと Properties は無く、Methods のみになっているので、
Methods の中からUpdateUserを開くと別窓が立ち上がる。


UpdateUser VALUE がテキストボックスで、XML っぽいタグが入っている。
ここの値を書き換えて実行することでパスワードを変更できる。
rootのパスワードをvhogehogeにする場合だと以下。

<user>
   <id>root</id>
   <!-- optional -->
   <password>vhogehoge</password>
   <!-- optional -->
   <description></description>
</user>

これで最後にInvoke Methodをクリックすれば変更が反映される。

Standalone ESXi Host

スタンドアロン ESXi でも基本的には同じ方法でいけるが、
ESXi の場合、デフォルトでは MOB が有効化されていない。
503 ESXi の詳細設定でConfig.HostAgent.plugins.solo.enableMobenableにしておく必要がある。
https://kb.vmware.com/s/article/2108405

ベーシック認証は ESXi のアカウントで。
ホストが 1 台しか無い分、パスはシンプルで
[content] → [accountManager] → [UpdateUser] にて
開いたウインドウで VALUE 設定。

同じようにInvoke Methodをクリックすればいける。

お気づきでしょうか?

vCenter 下の ESXi の root パスワードを変更する際、
現在の root パスワードを求められないことを…
なので、vCenter 下にはいるけど root パスワードは忘れた…
とかでも再インストールとかすることなく、容赦なくリセットできる。

code-serverをdaemon化

今日はvSphere関係無い、開発環境ネタです。

code-serverって何ぞや?

ブラウザ上で動作する Visual Studio Code
https://github.com/codercom/code-server
coder.com というクラウド IDE サービスを提供していた Coder が
code-server としてオープンソースで公開したもの。

VSCode 自体 Electron ベースなのでブラウザベースでもほとんど違和感なく動作するし、 Extension もほとんどがそのまま動作する。

まだ alpha 版ということらしいので、
触っているとバグがあったり、認証周りは突貫っぽさがあったりするが、
個人用途の開発環境としては全然使える。

Install

といってもパッケージやインストーラがあるわけではなく、
github から適当な release を拾ってきて、解凍して実行するだけ。
https://github.com/codercom/code-server/releases

% curl -fsSL https://github.com/codercom/code-server/releases/download/1.792-vsc1.33.1/code-server1.792-vsc1.33.1-linux-x64.tar.gz | tar zx
% cd code-server1.792-vsc1.33.1-linux-x64/
% ./code-server 

環境によっては

libstdc++が古いと動かないです… CentOS7 のデフォルトバージョンだとアウト。

% ./code-server 
./code-server: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by ./code-server)
./code-server: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by ./code-server)
この場合はgccを make して libstdc++ を入れ替える必要あり。

これでブラウザからhttps://【code-server実行したホスト】:8443 を開く。
パスワードは実行コンソール上に↓のような感じでているはずなので

INFO  code-server v1.792-vsc1.33.1
INFO  Additional documentation: http://github.com/codercom/code-server
INFO  Initializing {"data-dir":"/home/vhoge/.local/share/code-server","extensions-dir":"/home/vhoge/.local/share/code-server/extensions","working-dir":"/home/vhoge/code-server1.792-vsc1.33.1-linux-x64","log-dir":"/home/vhoge/.cache/code-server/logs/20190414025039640"}
INFO  Starting webserver... {"host":"0.0.0.0","port":8443}
WARN  No certificate specified. This could be insecure.
WARN  Documentation on securing your setup: https://github.com/codercom/code-server/blob/master/doc/security/ssl.md
INFO   
INFO  Password: 291d1362713deb52d14192c9 ★ コレ ★
INFO   
INFO  Started (click the link below to open):
INFO  http://localhost:8443/
INFO   
INFO  Starting shared process [1/5]...
INFO  Connected to shared process

パスワードを入力してやれば code 本体が表示され操作できるようになる。

設定周り

ブラウザから設定したり Extension 導入したものは
ユーザディレクトリ下の以下にファイルとして残っている。

 % pwd                                                                                         
/home/vhoge/.local/share/code-server
 % ls                                                                                          
Backups/           User/          extensions/     languagepacks.json  rapid_render.json  self-signed.key
CachedExtensions/  dependencies/  globalStorage/  machineid           self-signed.cert

設定や extension を別ホストでという時は
上記のディレクトリを持っていくとよい。

それと cache (というかアプリログ?) が以下に吐かれている。

/home/vhoge/.cache/code-server

こちらは移行する必要はなさげ。問題時のデバック等に。。。

daemon

いちいちサーバにログインして code-server を立ち上げ、
コンソール残しっぱなしというのもわずらわしいので daemon 化。

[Unit]
Description = code-server

[Service]
ExecStart = /usr/local/bin/code-server -P hogehoge -d /home/vhoge/.local/share/code-server /home/vhoge/work
Restart = always
Type = simple
User = vhoge
Group = users

[Install]
WantedBy = multi-user.target
% sudo vim /etc/systemd/system/code-server.service
% sudo systemctl daemon-reload
% sudo systemctl start code-server

-Pは初回アクセス時のパスワード。この辺はもうチョイ改善してほしいな…
(psでパスワード見えるとかいけてない)
-dはユーザーデータディレクトリ。.localとか.cacheとかのアレ。 最後のパスはデフォルトワークディレクトリ。
daemon 化で指定しないと/とかで動いてしまうので、
ユーザのホームディレクトリ下を指定しておくのがよさげ。