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

仮想基盤でのVM大量生産を 自動化してみた / automation_20220202_2

Rakus_Dev
February 04, 2022

仮想基盤でのVM大量生産を 自動化してみた / automation_20220202_2

Rakus_Dev

February 04, 2022
Tweet

More Decks by Rakus_Dev

Other Decks in Technology

Transcript

  1. ©2021 RAKUS Co., Ltd. 自己紹介 20歳からずっとインフラまわりの業務に従事し、現在で18年目。 ラクスに入社して約10年目。  特技:蚊に刺されない 

    趣味①:コーラ&ポテチをお供に歴史小説を読む  趣味②:お城・お寺巡り  趣味③:「信長の野望」、「シムシティ系」のシミュレーションゲーム ※子供産まれてからは全然できてない。でも新作出たら買う。
  2. ©2021 RAKUS Co., Ltd. 仮想基盤、VMとは? VM(Virtual Machine)= 仮想マシン を指します。 ホスト

    (物理筐体) 論理ストレージボリューム ハイパーバイザー ・・・・・・・ ホスト (物理筐体) ホスト (物理筐体) 仮想基盤 仮想環境イメージ図 = 仮想的な筐体の中に、OS・ミドルウェア・APPが実装され、 1つのイメージデータとして扱う 仮想基盤は、「サーバ仮想化」を提供するシステム基盤。 VMに対して、CPU・メモリのコンピューティングリソースや、 ストレージ領域を提供する。
  3. ©2021 RAKUS Co., Ltd. 仮想基盤でサーバ構築する際の流れ 以下のような流れで対応します。(事例の1つ) OS 必要なOSを実装した、 ベースとなるテンプレート VMを用意しておく

    ホスト名、IPアドレス等の 固有情報を設定 テンプレートVMをコピー して新VMを作成 ミドルウェアやアプリケーションを実装 その他設定、動作確認 サーバ リリース 1~2時間 1時間~3日 新規VMデプロイ (VMクローン) OSセットアップ ミドルウェア、APPインストール その他設定 仮想基盤の管理用 WEB画面上でポチ ポチと操作する サーバOSに対して処理 コマンド流し込む 周辺設定
  4. ©2021 RAKUS Co., Ltd. 課題 構築対象となるサーバ台数が多くなると面倒。(一度に数十台のケースとかも) OS OS OS OS

    Middle APP OS Middle APP OS Middle APP OS Middle APP OS Middle APP OS Middle APP 特にこの部分が めんどい。 OS サーバ リリース テンプレート VM VMクローン
  5. ©2021 RAKUS Co., Ltd. じゃあ、そこも自動化してみよう 仮想基盤で提供されているRest APIを使って「VMクローン」も実行できそう。 って訳で、1台ずつVMクローン&セットアップする直列化処理を想定。 パラメータ 定義

    VMクローン 作成 OS設定 カスタマイズ VM パワーオン サービスアプリ 実装 ・ターゲットホスト名 ・クローン元VM名 ・仮想基盤クラスタ情報 ・その他アプリ関連情報 ・内部パラメータ取得 ・クローン実行 ・ネットワーク関連設定 ・その他カスタマイズ ・ミドルウェア実装 ・アプリケーション実装 仮想基盤に対してAPIコマンドで実行 サーバ内部での設定処理 (別途Ansibleによる自動化を実装済み) 実装対象
  6. ©2021 RAKUS Co., Ltd. スクリプト化におけるトピックス 各種情報を確認するには、該当する”UUID“が必要 # curl -k -Ss

    -X GET --header ‘Accept: application/json’ -u ‘admin:{パスワード}’ ‘{対象URL}/PrismGateway/services/rest/v2.0/vms/' | jq -r '.entities[]' 全VM情報を表示するコマンド。 例)1台分の情報のみ抜粋 # curl -Ss -X GET --header 'Accept: application/json' -u 'admin:'$PASSWORD'' ¥ ''$CLUSTER_URL'/PrismGateway/services/rest/v2.0/vms/' | ¥ jq -r '.entities[] | {vm_name: .name, vm_uuid: .uuid} | select(.vm_name == "'$SOURCE_NAME'")' | ¥ grep "vm_uuid" | awk '{ print $2 }' | sed 's/"//g' ※スクリプト内では、可変の情報をなるべく変数で代入するようにしておく。 { "allow_live_migrate": true, "gpus_assigned": false, "boot": { "uefi_boot": false }, "description": "Test_Server", "ha_priority": 0, “host_uuid”: “06bcc356-0d8e-441f-9883-*********", "memory_mb": 8192, "name": “server01.test.jp", "num_cores_per_vcpu": 2, "num_vcpus": 2, "power_state": "on", "timezone": "UTC", "uuid": "17e9d2a7-4202-4af6-83f3-***********", "vm_features": { "AGENT_VM": false, "VGA_CONSOLE": true }, "vm_logical_timestamp": 10, "machine_type": "pc" } VM名に紐づくUUIDのみを表示させたい こんな感じの力技で・・ # curl -Ss -X GET --header 'Accept: application/json' -u 'admin:'$PASSWORD'' ¥ ''$CLUSTER_URL'/PrismGateway/services/rest/v2.0/networks/' | ¥ jq -r '.entities[] | { nw_name : .name , nw_uuid : .uuid } | ¥ select(.nw_name == "Front Network")' | grep "nw_uuid" | awk '{ print $2 }' | sed 's/"//g' 仮想基盤上のネットワークに関するUUIDとかも。
  7. ©2021 RAKUS Co., Ltd. VMクローンする際のAPIコマンド 正常にVMクローンが生成された curl -X POST --header

    'Content-Type: application/json' ¥ --header 'Accept: application/json' -u 'admin:'$PASSWORD'' -d ' { "spec_list": [ { "name":"'$TARGET_NAME'", "memory_mb":4096, "num_vcpus":1, "num_cores_per_vcpu":2, "vm_nics": [ { "network_uuid":"'$FR_NW_UUID'" }, { "network_uuid":"'$BK_NW_UUID'" } ], "override_network_config":true, "clone_affinity":false, "boot_config": { "uefi_boot":false, "boot_device_type":"DISK", "disk_address": { "device_bus":"scsi", "device_index":0, "disk_label":"scsi.0", "is_cdrom":false, "vmdisk_uuid":"'$DISK_UUID'" } } } ] }' ''$CLUSTER_URL'/PrismGateway/services/rest/v2.0/vms/'$SOURCE_VM_UUID'/clone' サーバスペックの指定。ここでは固定化。 NICの設定。ネットワークセグメント単位で。 ディスク割り当ての設定。 前述の処理で取得した各種UUIDを利用 他の処理についても検証を実施 1つのスクリプト内で呼び出されるように実装
  8. ©2021 RAKUS Co., Ltd. 結果:作業内容がシンプルに WEB画面上でのポチポチ作業も不要となり、非常にシンプルかつ対応コスト削減が可能に! playbook REST API OS

    OS Middle APP VMクローン(デプロイ) OSセットアップ ミドルウェア・APP実装 構築対象サーバ分の パラメータ定義リスト 事前に用意 自動化処理に反映 構築対象のサーバ台数に関わらず、 スクリプトを1回実行するだけでOK。 ※まだ自動化を適用できそうなフェーズは残っているものの、そのへんはいずれ対応していくつもり。。