vHoge

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

ヤフー株式会社を退職します(しました)

個別にお知らせした方もいらっしゃいますが、
2019/10/31 付でヤフー株式会社を退職いたします。
実際のところは本日 2019/10/18 が最終出社日で、PC もスマホ社員証も全て返却済なので本日が退職みたいなものです。

関係各所の皆様には大変お世話になりました。ありがとうございました。

花
別にネガティブな理由やセンセーショナルな出来事があって辞めるわけではなく、面白可笑しく書けるような文才があるわけでもないのですが、一応ご報告までとして書いておきます。

退職エントリではないつもりですが、退職エントリになっちゃうのかなぁ。

退職理由

ネガティブな理由が何も無かったかと言われるとそうではなく、細かいものならありますが、それでも退職モチベーションになるようなものはありません。
他に興味があること、やりたいことができたというのが大きいです。

35歳プログラマ限界説

巷でよく言われるアレ。
ウチの会社に限ぎらず界隈を見てみるとナニソレな感じで、何歳になっても現役でコード読み書きしている人はたくさんいらっしゃいますが、やっぱりこの説は存在しているのかなというのが個人的実感。
別にコード読み書きするのがキツいとか限界とかではなく。
経験を積んで色々な視野が広がってきたことで現場エンジニアリングの背景の世界、それこそ IT 戦略や企画、ユースケースとかそんな話に興味が向いてきて、相対的に現場エンジニアリングやプログラミングへの興味が薄れてきたという感じ。
いわゆるコンサル的な上流への興味が大きくなり、そういうことができるところに行こうというのが大きい理由。

と言っても自分、今35歳でないですけど。

ヤフーに入社してどうだったか

もし違う会社に行っていたらみたいなタラレバはしてもしょうがないので知りませんが、
ヤフーに入社したことで VMware をガッツリさわり色々習得し、VMUG や vExpert、コミュニティ活動に参加でき、次の仕事へと繋がったと考えると間違ったものではなかったと思っています。

今後の予定

これから2週間ほどは遅い夏休みということで、実家帰ったり旅行したり、(車検から帰ってきたら)バイクで遠出とかしたいなぁと。
で、11 月より新天地での勤務となります。
そのため 11 月の動きが見えないので vForum は行けるかどうかは分かりません…

新天地についてはまだ入社前ということもあるので、 11月以降に Open にすると思います。

VMUG UserCon 2019 Autumn

(そんなに忙しいワケではなかったのだが、中々書けなったネタを消化)

半期に一度の部会合同でのイベント。
今回から合同部会あたらめ UserCon Autumn に。

Outline

会場写真撮ってなかった…
光景は FacebookVMUG ページ を見てもらえれば。
なんか仮装したおじさんが写っていますw(仮想と仮装をかけてとのこと)

ノベルティ

会場写真は撮ってなかったけど、ノベルティはちゃっかり。

閉じた状態
閉じた状態
全展開状態
全展開状態
マルチツールってやつですかね。
他ではあまり見かけない、普通に使えそうな便利なノベルティ

Agenda

  1. VMworldサマリー
  2. 仮想マシン6万台を運用してわかったVDI移行の表と裏
  3. Meetupノススメ
  4. VMUGを活用したVMwareNSXトレーニング受講報告 ---Install,Configure,Management[V6.4]---
  5. なつやすみ日記
  6. VMUG.COMから見るJAPAN VMUGの魅力

1. VMworldサマリー

VMware の林(りん)さんによる VMworld 2019 US の Update。

  • Tanzu / Project Pacific
  • Virutal Cloud Networking
    • NSX-T 2.5
      • NSX Intelligence
      • NSX Advanced LoadBalancer (AviNetworks)
        • アプリケーションデリバリーコントロール(L2-L7)
  • Protect
    • CarbonBlack 買収
  • bitfusion
  • VMware Cloud on AWS
  • Azure VMware Solution
  • VMware Cloud on Dell EMC
  • VMware Workspace ONE
    • MobileFlows
    • Intelligent Hub
    • Degital Employee Experiece Management
    • Horizon on VMC on AWS
    • Horizon7

Tanzu / Project Pacific をのぞくと VMworld Update はここが初?
特に EUC 周りの話はあまり無さそう。

Q/A では Pacific のライセンス話が少々。
詳細はまだ未定だが、個別ライセンスにはならないそうな…?
他、VIC の今後や PKS との住み分けの質問が飛んでいた。

それと additional な話として ODYSSEY の話。
vWarrior が Update され、ODYSSEY として vForum で正式にプログラム化。
ということで、10 月初旬よりエントリーが開始されるそうな。

2. 仮想マシン6万台を運用してわかったVDI移行の表と裏

リクルートテクノロジーズさん(リクルートグループの機能会社)での VDI 更改話。
フレキシブルワーク環境や不正防止と色々達成できたが、PC 管理コストの削減においてコンポーネントの複雑さやサポート範囲、 EOSL 時期の違い、需要予測と考慮点が多く、課題が残る結果に…というお話。

VDI は担務外なのだが、それでも大変さが伝わるお話…

3. Meetupノススメ

自分のセッションですが、発表資料は Closed の講演として社内承認通しているのでアップロード予定はありません…

ネタとしては改めて VMware DevOps Meetup / VM Meetup Tokyo のご紹介。
セッション内で挙手してもらった限り、参加経験者は数名程度だったので場所としてはよかったかも。
やっぱ VMUG は administrator 層で Meetup は developer 層なのかなぁ…
そんなに規模が無ければ兼任が多そうではあるが、結構参加者被らない。

4. VMUGを活用したVMwareNSXトレーニング受講報告 ---Install,Configure,Management[V6.4]---

VMUG 支援プログラム(?)で行ってきた VMware NSX ICM コースの教育受講録。
受講に向けた予習どころやざっくりの講義内容紹介。

発表者(受講者)の林さんは、その後見事に VCP6-NV 合格まで昇華。
素晴らしい。

5. なつやすみ日記

こちらは vSphere の ICM コース教育受講録。
同様にざっくりの講義内容紹介ではあるが…何というかw
子供の絵日記風コント仕立て。ちょっと文字列で表現するのは難しいw

6. VMUG.COMから見るJAPAN VMUGの魅力

VMUG.COM への移行案内ですが…
UserCon に来ている Active ユーザはほぼほぼ移行完了している状態w

Japan VMUG のポジションを改めて紹介。
* 223の地域コミュニティの1つ * JapanVMUG 410名(全体では230000人) * コメント数 6月時点で 1位 → 1位 とかなり活発

コメント数 1 位は相変わらずすごい。

VMware DevOps Meetup #3

こちらに参加してきました。
【LT枠残り1枠!】 VMware DevOps Meetup #3 【Kubernetesやコンテナに興味ある方必見!】今回のテーマは「コンテナ」or「テスト」|IT勉強会ならTECH PLAY[テックプレイ]
(会場写真撮るの忘れた…)
会場が TECH PLAY SHIBUYA ということで TECH PLAY 経由でのお申込み。
今回はテーマが"コンテナ"と"テスト"が設けられたが、良い発表ネタは思いつかず…
(自分がやってることはレガシー寄りなんだよなぁ…)
聴講者としての参加。

感想としては最先端に尖った話だったなーと。

オープニング

  • 第3回はテーマを設けました
    • コンテナ
    • テスト

vCenterシミュレーターを使ってCIをやってみよう

speakerdeck.com

  • 自己紹介
    • Automation Engineer
    • Ansbile 界隈の方から来ました
    • 19H2 で vExpert になりました
  • (会場で)インフラ自動化をやっている人?
    • 少ない(数人程度?)
  • インフラで CI やっている人?
    • 自動化やっている人はほぼやっている
  • CI は何故必要か?
    • 品質向上、納期短縮、学習スピードアップ、コミュニケーションロス削減
  • CI とは心理的安全の確保
    • MW の conf まで CI が必要
      • bind 運用でのトラブル経験
    • CI のおかげで Ansible Tower でボタンを押す気持ちが軽くなった(担当者談)
  • VMware インフラ CI
    • 物理は困難
    • VMware 環境はリソースが必要
    • 一時的なプロビジョニング、デプロイは大変
    • 気軽に作ったり消したりは難しい
  • そこで vCenter シミュレータ(vcsim)
    • SOAP API が実装されている
    • golang で実装
    • vCenter でできるものは大体できる
    • GUI はなし
    • (その昔、vCSA5.5 に vcsim があったが、切り出されて go で再実装されたっぽい)
  • サポート SDK
    • govmomi, pyvmomi, rvmomi → 動く
    • PowerCLI → 色々動かない…
      • API の呼び方(URI)が *vmomi と違うらしい
  • vcsim コンテナ
    • Ansible プロジェクトが用意している
      • Ansible モジュール開発の CI で利用されている
    • Flask(python) が HTTP を受けて、vcsim へ流すアーキテクチャ
  • 9 つの URI
    • 2 つを紹介
      • /spawn vcsim の起動、オプションで構成を与えられる
      • /govc_find ManagedObject のフィルタリング
  • デモ 1 Ansible で vcsim のプロビジョニング
  • デモ 2 TravisCI でテストを回す
  • VMware 界隈にも Ansible を流行らせ隊(宣伝)

Q.PowerCLI が動かないのは PowerCLI の問題? vcsim 問題?
A.vcsim の問題、Issue 化され対応を進めている

vcsim の話、5.5 版は知っていたがいつのまにか go 版 + コンテナが出ていたとは。
インフラのテストってやりにくいけど、vSphere だと vCenter さえシミュレートできればかなり回せるので、テストはかなりやりやすい部類で、この辺も高品質を支える一因なのでは。さすが SDDC。
dev としては vcsim で高頻度に回して、足りない部分は nested も回せれば理想形なのでは。

10分で解説!VMware Tanzuとは?

資料はまだ上がってなさげ?

  • 自己紹介
    • 最近 VMware に join、それまでは EMC
    • PAS / PKS / OpenStack / Docker / k8s
    • 今は VMC on AWS
  • 企業の IT
    • IT部門 → コンテナ基盤、マルチクラウドに前向き
    • アプリ開発 → モダナイズや開発手法の見直し中、コンテナにはこだわりない、使いやすければ
    • (アプリ部隊の方がコンテナに興味あるイメージあったけど、そうでもないのかな?)
  • Tanzu
    • Preview
    • k8s を管理する SaaS
    • Build, Run, Manage をサポート
      • Build : Spring, FAS, bitnami(パッケージング), PAS
      • Run : ProjectPacific, PKS
      • Manage : wavefront, CloudHealth, NSX ServiceMesh, Tanzu Mission Control
    • ライフサイクル管理、アクセス管理、モニタリング、コスト最適化、トラフィック管理 etc
  • 採用 OSS
  • Tanzu Mission Control
    • Cloud を横断して同じポリシーを適用
    • クラスタアクセス、構成、バックアップ、クォータ、Podセキュリティ etc...
      • コンテナレジストリの許可/禁止
      • Pod セキュリティ
        • HostOS の bind を禁止
      • ネットワークアクセス制御
      • namespace 単位でコントロール

Q.Podに入ることは可能?
A.ダッシュボードからは不可能、通常の k8s と同じ方法になる

VMworld の目玉トピックの 1 つ、Tanzu の日本最速(?)紹介。
今回は Tanzu Mission Control の話が多めで、セキュリティポリシーやユーザコントロール周りを提供しており、この辺は PKS でも弱い部分だった(今は違うかも?)ので複数組織規模での利用となればかなり欲しいところ。
あとは Pivotal 買収で Build 周りがどうなっているか。面白そう。

vSphere VM Operator for Kubernetes Kubernetes Operator for vSphere VM

www.slideshare.net

意味的にはこちらが正しいということでタイトル修正とのこと。

Q.本番向けではない?
A.プレビューレベル、教育的意味合いが強そう

k8s Operator を使った VM 再作成な話。
Operator って自前でサクッと実装できるものなんですね。
これは手元で試してみたい…

Kubernetes に開かれる新しい海 -Project Pacific とは?-

www.slideshare.net

  • 自己紹介
    • VMware でサービスプロバイダ向けにお仕事
      • お世話になっております!
    • 最近猫を飼い始めました
  • Project Pacific
    • 7 つの海のあれ
    • vSphere を再設計
    • SDDC を利用して SuperVisor K8S Cluster
    • 開発者と IT 運用者をつなぐ Platform
      • 開発者:デプロイ、Day 2 モニタリング, ツール ...
      • IT 運用者:可用性, セキュリティ, QoS, コスト ...
  • 全てのワークロードを k8s で管理
    • 全部 yaml で表現可能
    • namespace で pod / VM / k8s cluster を管理できる
    • k8s に比べて ESXi host はそんなに VersionUP しない
    • ServiceCatalog とかも提供予定 
    • ポリシー、リソースは RBAC でアプリごとに
    • vCenter でコンテナ、k8sVM を一元管理
    • 「何故か(スライドに) Photon とか書いてあるけどよく分からないです」w

こちらも VMworld の目玉トピックの 1 つ、Project Pacific の日本最速(?)紹介。
ESXi 直で Pod や SuperVisor Cluster を動かすというかなり大きな変更。
立ち話で NW 周りがどうなるかみたいなのを聞いたところ、NSX-T が前提になってきそうな雰囲気も?まだ詳細は出てきてない模様。

何でも yaml 管理の一方で yaml 地獄のつらみも聞こえてはいるので、その辺りを緩和する施策がないと特にライトな IT admin 層だとキツいかも。
GUIyaml出力や yaml validator 辺りが無いと触る障壁高そう。

vSphere / vSAN 6.7 U3 の VMware Cloud Native Storage を試してみよう。

onedrive.live.com

  • 自己紹介
  • VMware Cloud Native Storage(CNS)
    • vSphere 6.7u3- 利用可能
    • k8s の PV として VMDK が利用可能
      • CSI (Cloud Storage Interface) 経由
  • SPBM
    • VMDK ごとに割り当てられるストレージポリシー
      • 可用性、ディスク配置 etc
      • PV にも割り当てられる
    • vSAN では利用必須
  • サンプルで MongoDB Pod を作る
    • StorageClass の Provisioner で csi.vsphere.vmware.com
    • StoragePolicyName の SPBM 名
    • StorageClass を PVC に指定
  • 6.7u3 の vSphere Client でコンテナボリュームのメニューが
    • vSphere Client で PV として見える
      • vSphere オブジェクトとしても見える

vSAN の話かな?と思ってたら vSAN はそこまで関係なく、CNS や k8s PV の話。
PV で VMDK は結構やりやすいと思ってたけど、既に CNS でかなり扱いやすそう。vSphere Client 側にも項目として入っているのは知らなかった。

ところで開始前、プロジェクタ投影まわりでトラブってたのですが、その時に流れた以下のツイートが良かったw
確かに…

Appendix

会場写真は撮り損ねたけど食べ物の写真は撮ったw フード
ドリンク1
ドリンク2
豪華…

次回

vForum 2019 の Day0、VMware Kubernetes Day VMware Cloud Native Day の中で LT Sessions として開催予定とのこと。

esxcli での default gateway 設定の罠

ESXi で esxcli から IP アドレス設定していた時にあった話。
通常だと DCUI でやっちゃうのがほとんどだと思うので稀なケースだと思いますが。

事象

ESXi の OS インストールが終わって初めて起動してきたような IP アドレスがまだ設定されていない状態のとき。
IP初期状態 esxcli でたたくと↓の状態。

[root@localhost:~] esxcli network ip interface ipv4 get
Name  IPv4 Address    IPv4 Netmask  IPv4 Broadcast   Address Type  Gateway  DHCP DNS
----  --------------  ------------  ---------------  ------------  -------  --------
vmk0  169.254.242.29  255.255.0.0   169.254.255.255  DHCP          0.0.0.0      true

この状態で esxcli で IP を設定する。
叩き方を確認するので、一回 help。

[root@localhost:~] esxcli network ip interface ipv4 set --help
Usage: esxcli network ip interface ipv4 set [cmd options]

Description:
  set                   Configure IPv4 setting for a given VMkernel network interface.

Cmd options:
  -g|--gateway=<str>    The default gateway for this interface. The value must be a valid
                        IPv4 address. Gateway would be reset if not provided
  -i|--interface-name=<str>
                        The name of the VMkernel network interface to set IPv4 settings
                        for. This name must be an interface listed in the interface list
                        command. (required)
  -I|--ipv4=<str>       The static IPv4 address for this interface.
  -N|--netmask=<str>    The static IPv4 netmask for this interface.
  -P|--peer-dns=<bool>  A boolean value to indicate if the system should use the DNS
                        settings published via DHCPv4 for this interface.
  -t|--type=<str>       IPv4 Address type :
                            dhcp: Use DHCP to aquire IPv4 setting for this interface.
                            none: Remove IPv4 settings form this interface.
                            static: Set Static IPv4 information for this interface.
                        Requires --ipv4 and --netmask options.

なるほど… gateway は -g 指定ね。
というわけで set する。

[root@localhost:~] esxcli network ip interface ipv4 set -i vmk0 -t static -I 192.168.0.100 -N 255.255.255.0 -g 192.168.0.1
[root@localhost:~] 

エラー出ず、問題なさげ。

[root@localhost:~] esxcli network ip interface ipv4 get
Name  IPv4 Address  IPv4 Netmask     IPv4 Broadcast  Address Type  Gateway      DHCP DNS
----  ------------  ---------------  --------------  ------------  -----------  --------
vmk0  192.168.0.100  255.255.255.0   192.168.0.255   STATIC        192.168.0.1     false

これで 8.8.8.8ping をなげてみる。

[root@localhost:~] ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8): 56 data bytes
sendto() failed (Invalid argument)

あれ?
対象に到達しなかったというよりそもそも投げてない??

原因

一見 gateway 設定入っているように見えるが、実は入っていない。
route を表示してみると

[root@localhost:~]  esxcli network ip route ipv4 list
Network      Netmask          Gateway  Interface  Source
-----------  ---------------  -------  ---------  ------
192.168.0.0  255.255.255.0    0.0.0.0  vmk0       MANUAL

同一 Network しか入ってない…

対処

esxcli で route を明示的に足してやるとよい。

[root@localhost:~] esxcli network ip route ipv4 add -n 0.0.0.0/0 -g 192.168.0.1

これで route を見てみる。

[root@localhost:~] esxcli network ip route ipv4 list
Network      Netmask          Gateway      Interface  Source
-----------  ---------------  -----------  ---------  ------
default      0.0.0.0          192.168.0.1  vmk0       MANUAL
192.168.0.0  255.255.255.0    0.0.0.0      vmk0       MANUAL

ping も通るように。

こんなものだっけ?

VMware Docs 見ても特に書いてないんですよね… docs.vmware.com 何か過不足あったりするのかな…

Windows でのサンプル実装

以前書いた OVF Env 用の glue code 件で。
vhoge.hateblo.jp
Windows 向けでちょっと使うかもということで、PowerShell で再実装。
PowerShell ほとんど使ったことなかったので何も分からん状態だったけど、PowerShell ISE でタブ押してればそれっぽいものができるので思ったよりは楽に書けた。

あと、こちらだと XML の parse が楽。名前空間まともに見てないのかな…
その代わり外部コマンド呼び出し (vmtoolsd) が少し面倒だったり。

$lck_file = "C:\windowsinit\vcid.lck"
$vmtoolsd_path = "C:\Program Files\VMware\VMware Tools\vmtoolsd.exe"
$vmtoolsd_args = "--cmd ""info-get guestinfo.ovfenv"""

function getOvfEnv(){
    $cmd = New-Object System.Diagnostics.ProcessStartInfo
    $cmd.FileName = $vmtoolsd_path
    $cmd.Arguments = $vmtoolsd_args
    $cmd.RedirectStandardOutput = $true
    $cmd.UseShellExecute = $false
    $process = New-Object System.Diagnostics.Process
    $process.StartInfo = $cmd
    $process.Start() | Out-Null
    $process.WaitForExit()
    return $process.StandardOutput.ReadToEnd()
}

function chkLock($vmid){
    If (Test-Path $lck_file) {
        $lck_val = Get-Content $lck_file
        if ($lck_val -eq $vmid){
            return $true
        }
    }
    return $false
}

function setLock($vmid){
    New-Item $lck_file -Value $vmid -Itemtype file
}

function deployHostname($hostname){
    Rename-Computer -NewName $hostname
}

function deployNetwork($ip, $prefix, $gateway, $dns){
    Get-NetAdapter | New-NetIPAddress -IPAddress $ip -AddressFamily IPv4 -PrefixLength $prefix -DefaultGateway $gateway
    Get-NetAdapter | Set-DnsClientServerAddress -ServerAddresses $dns
}

function main(){
    $ret = getOvfEnv
    $xml = [xml]$ret
    $conf = @{}
    foreach ($value in $xml.Environment.PropertySection.Property){
        $conf.add($value.key, $value.value)
    }
    $dns = $conf.dns -split ","

    if (chkLock $xml.Environment.vCenterId){
        echo "Nothing to do."
        return 0
    }

    deployNetwork $conf.ip $conf.prefix $conf.gateway $dns
    deployHostname $conf.hostname
    setLock $xml.Environment.vCenterId
    return 0
}

main

とそのまま書き直してみたのですが完璧ではなく。

  • hostname 反映は再起動が必須
  • New-NetIPAddress は上書きできないので、設定が残っているとコケる
  • DNS は 2個までしか入らない…?

github にもそのうち(←はよアカウント作れ)

※ 10/09 スクリプトのlock周りにバグがあったのでひっそり修正