Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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

sky_joker
September 18, 2019

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

sky_joker

September 18, 2019
Tweet

More Decks by sky_joker

Other Decks in Technology

Transcript

  1. www.goodpello.com
    vCenterシミュレーターを使っ
    てCIをやってみよう
    VMware DevOps Meetup #3

    View Slide

  2. www.goodpello.com
    本資料は後からアップしてTwitterに流しま
    す!!
    2

    View Slide

  3. www.goodpello.com
    今日話す事
    01. インフラCIの必要性や課題
    05. まとめ
    04. 動作デモ
    03. vCenterシミュレーターの使い方
    02. vCenterシミュレーターの紹介

    View Slide

  4. www.goodpello.com
    ---
    - 自己紹介:
    名前: sky_jokerxx
    仕事: 自動化エンジニア
    最近ハマってること:
    - Ansible開発
    - Ansibleへのコントリビュート
    - Ansibleを使ったVMware基盤自動化
    (ESXi、VM、NSXなど)
    - OpenShiftやk8s(コンテナ関連)
    趣味:
    - 自宅ラックで検証
    @sky_jokerxx

    View Slide

  5. www.goodpello.com
    みなさんインフラ自動化やっていますか?
    5

    View Slide

  6. www.goodpello.com
    みなさんインフラCIやっていますか?
    6

    View Slide

  7. www.goodpello.com
    CIは何故必要か?
    品質向上や納期短縮、学習スピードアップやコミュニケーションロス削減な
    どを目的としてやります。
    • 開発しているSDKのバージョンが変わった時の動作確認がしたい
    • 開発言語の複数バージョンで動作を確認したい
    • 事前に失敗・成功を確認したい
    • 高速にCIを繰り返しフィードバックを得て学習スピードを上げたい
    • 失敗・成功を可視化して運用・開発部隊で円滑なコミュニケーションをと
    れるようにしたい
    心理的安全性の確保
    例えば…

    View Slide

  8. www.goodpello.com
    VMwareインフラCIの課題
    • 物理的なインフラを用意するのはなかなか困難
    • VMwareの環境は結構リソースが必要
    • 一時的なCI環境を作るにしてもプロビジョニングやデプロイが大変
    • 気軽に作ったり消したりをする環境を作るのは難しい
    などなど
    VMwareインフラCIをやるのであれば、リソース消費が
    少なくて、プロビジョニングが容易で気軽に作ったり消し
    たりできるものが欲しい!!

    View Slide

  9. www.goodpello.com
    そこで、vCenterシミュレーターですよ!
    vCenterシミュレーター(vcsim)とは?
    vSphere WebサービスSDK(SOAP API)のエンドポイントが実装されているツー
    ルです。
    Go言語で開発されておりLinux/Windows/Macで動作します。
    vCenter経由で設定できるもの(DC,VM,Cluster,Datastore,Network)は大体で
    きると思います。
    https://github.com/vmware/govmomi/tree/master/vcsim
    *SOAPのシミュレーターなのでGUIは無いです

    View Slide

  10. www.goodpello.com
    vcsimでサポートされているメソッド(一部)
    • AcquireCloneTicket
    • AcquireGenericServiceTicket
    • AddAuthorizationRole
    • AddCustomFieldDef
    • AddDVPortgroup_Task
    • AddLicense
    • AddPortGroup
    • AddStandaloneHost_Task
    • AddVirtualSwitch
    • AllocateIpv4Address
    • AllocateIpv6Address
    • CancelWaitForUpdates
    • CloneSession
    • CloneVM_Task
    • CopyDatastoreFile_Task
    • CopyVirtualDisk_Task
    • CreateClusterEx
    • CreateCollectorForEvents
    • CreateContainerView
    • CreateDVS_Task
    • CreateDatacenter
    • CreateFilter
    • CreateFolder
    • CreateIpPool
    • CreateLocalDatastore
    • CreateNasDatastore
    • CreatePropertyCollector
    • CreateResourcePool
    • CreateSnapshot_Task
    • CreateStoragePod
    • CreateVApp
    • CreateVM_Task
    • CreateVirtualDisk_Task
    • CurrentTime
    • DeleteDatastoreFile_Task
    • DeleteVirtualDisk_Task
    • DestroyIpPool
    • DestroyPropertyCollector
    • Destroy_Task
    • DisableRuleset
    • EnableRuleset
    • EnterMaintenanceMode_Task
    • ExitMaintenanceMode_Task
    • FetchDVPorts
    • FindByDatastorePath
    • FindByInventoryPath
    • FindByUuid
    • FindChild
    • Login
    • LoginByToken
    • LoginExtensionByCertificate
    • Logout
    • MakeDirectory
    • MarkAsTemplate
    • MoveDatastoreFile_Task
    • MoveIntoFolder_Task
    • MoveVirtualDisk_Task
    • PostEvent
    • PowerOffVM_Task
    • PowerOnMultiVM_Task
    • PowerOnVM_Task
    • QueryAssignedLicenses
    • QueryEvents
    • QueryIPAllocations
    • QueryIpPools
    • QueryOptions
    • QueryVirtualDiskUuid
    • ReconfigVM_Task
    • ReconfigureDVPortgroup_Task
    • ReconfigureDvs_Task
    • RefreshDatastore
    • RegisterVM_Task
    • ReleaseIpAllocation
    • RelocateVM_Task
    • RemoveAllSnapshots_Task
    • RemoveAuthorizationRole
    • RemoveCustomFieldDef
    • RemoveEntityPermission
    • RemoveLicense
    • RemovePortGroup
    • RemoveVirtualSwitch
    • RenameCustomFieldDef
    • Rename_Task
    • RetrieveAllPermissions
    • RetrieveEntityPermissions
    • RetrieveProperties
    • RetrievePropertiesEx
    • RetrieveRolePermissions
    • RetrieveServiceContent
    • RetrieveUserGroups
    などなど

    View Slide

  11. www.goodpello.com
    サポートしてるSDK
    Goで出来ているSDK
    govmomi
    Pythonで出来ているSDK
    pyvmomi
    Rubyで出来ているSDK
    rvmomi
    動作 備考
    項目
    SDK
    VM情報の取得やクローンは出来たが新規作成やネットワーク情報など
    の取得ができない、色々できない(今後に期待)
    PowerCLI
    残念ながら、PowerCLIはほぼダメだった…

    View Slide

  12. www.goodpello.com
    vcsimのコンテナ
    vcsimを簡単にCIで使えるようにしたコンテナがAnsibleプロジェクトに用意さ
    れています。
    AnsibleのVMwareモジュール開発は、このコンテナを使ってインテグレー
    ションテストをしています。
    今回はこれを元にしてみようと思います!
    https://github.com/ansible/vcenter-test-container

    View Slide

  13. www.goodpello.com
    vcsimコンテナのアーキテクチャ
    vcsim(Go)
    Flask(Python)
    http://ip:5000/spawn へアクセスして起動 vcsimを起動
    http://ip:5000/kill/all へアクセスして停止 vcsimを停止
    vcsimが起動したら https://ip/sdk へアクセスして操作
    JSONで起動情報(user/passなど)を返す
    https://ip/about へアクセスしてサポートされているメソッドやオブジェクトを
    取得

    View Slide

  14. www.goodpello.com
    vsimコンテナのURL操作説明(Flask)
    URL 説明
    / 「vcsim simulator」の文字を返す
    Flaskの起動確認などでアクセスする
    /log vcsimのログが表示される
    /kill/int:number vcsimが複数起動為ている場合はプロセス番号を指定して停止させる
    /kill/all 起動している全てのvcsimを停止させる
    /spawn vcsimを起動させる
    いくつかのオプション指定可能
    /govc_find vcsimからManaged Objectを検索する(フィルターも可能)
    /govc_vm_info vcsimからVMの情報を取得する
    /govc_host_info vcsimからESXiの情報を取得する
    /create_cluster vcsimにクラスターを作成する
    ただし、マルチデーターセンターには対応していない模様

    View Slide

  15. www.goodpello.com
    spawnの使い方
    パラメーター 説明
    app VirtualAppの数を指定
    cluster クラスターの数を指定
    dc データセンターの数を指定
    ds データストアの数を指定
    folder フォルダーの数を指定
    host クラスターのホスト数を指定
    pg ポートグループの数を指定
    pod データセンターごとのストレージポッド数を指定
    pool リソースプールの数を指定
    vm VMの数を指定
    spawnには以下のパラメーターが指定可能です。
    データセンターとクラスターを2つ作成する例
    http://ip:5000/spawn?dc=2&cluster=2

    View Slide

  16. www.goodpello.com
    govc_findの使い方
    パラメーター 説明
    VA VirtualApp
    CCR ClusterComputerResource
    DC Datacenter
    F Folder
    DVP DistributedVirtualPortgroup
    H Hostsystem
    VM VirtualMachine
    N Network
    ON OpaqueNetwork
    govc_findは以下のパラメーターでフィルタリンスすることが可能です。
    パラメーター 説明
    RP ResourcePool
    CR ComputeResource
    D Datastore
    DVS DistributedVirtualSwitch
    VMのリストを取得する例
    http://ip:5000/govc_find?filter=VM

    View Slide

  17. www.goodpello.com
    もっと簡単に使えるようにAnsibleのRoleを作成
    Ansibleとdockerがあればすぐにvcsimをプロビジョニングできるロールを作っ
    てみました。
    ansible_vmware_govcsim_provisioner
    https://github.com/sky-joker/ansible-vmware-govcsim-provisioner
    https://galaxy.ansible.com/sky_joker/ansible_vmware_govcsim_provisioner

    View Slide

  18. www.goodpello.com
    Roleの使い方例(Ansibleとdockerインストール済み)
    # ansible-galaxy install sky_joker.ansible_vmware_govcsim_provisioner -p roles
    # pip install -r roles/sky_joker.ansible_vmware_govcsim_provisioner/requirements.txt
    # vi main.yml
    ---
    - name: vcsim provisioning playbook
    hosts: localhost
    gather_facts: no
    roles:
    - sky_joker.ansible_vmware_govcsim_provisioner
    # ansible-playbook main.yml
    (snip)
    TASK [sky_joker.ansible_vmware_govcsim_provisioner : debug]
    *******************************************************************************
    ok: [localhost] => {
    "starte_up_govcsim_result.json": {
    "GOVC_URL": "https://user:[email protected]:443",
    "cmd": "/go/bin/vcsim -httptest.serve 172.17.0.2:443 -app=0 -cluster=0 -dc=1 -ds=1 -folder=1 -host=3 -
    pg=1 -pod=1 -pool=1 -vm=2 > vcsim.log 2>&1",
    "host": "172.17.0.2",
    "password": "pass",
    "pid": 6,
    "port": 443,
    "username": "user"
    }
    }

    View Slide

  19. www.goodpello.com
    デモ
    • vcsimプロビジョニング
    • Travis CIを使ったテストの例
    https://github.com/sky-joker/VMware-DevOps-Meetup-3-demo

    View Slide

  20. www.goodpello.com
    まとめ
    vcsimはgoで作成されているのでWindows/Linux/Macでも動作する
    ので気軽に試すことが出来ます
    vcsimで高速にPlaybookや自作ツールのCIテストを実行して、効率よく
    改修したりDevとOpsで情報共有出来ることが期待されます
    vcsimは最小限のリソースで動作するのと、コンテナで作れば気軽に開
    発やテスト環境の構築・削除が出来ます

    View Slide

  21. www.goodpello.com
    VMware界隈にもAnsibleを流行らせ隊

    View Slide

  22. www.goodpello.com
    Ansibleユーザー会(コミュニティ)の紹介
    connpass
    https://ansible-users.connpass.com/
    Slack
    https://bit.ly/ansiblejp-slack
    Ansibleユーザー会まとめページ
    https://ansiblejp.github.io/

    View Slide

  23. www.goodpello.com
    初めてのAnsible!
    引用元
    @fideleruuth さん
    https://twitter.com/fideleruuth/status/1151038347835559936?s=20

    View Slide

  24. www.goodpello.com
    Thank you For listening
    https://twitter.com/sky_jokerxx
    https://qiita.com/sky_jokerxx
    https://sky-joker.tech
    https://github.com/sky-joker
    @sky_jokerxx

    View Slide