vSphere OperatorをAnsibleと連携させてみる


この投稿は vExperts Advent Calendar 2019 の7日目の記事です。
vExpert 2019 Second Half ApplicationからvExpertを頂き初めてvExpert Advent Calendarに投稿します。よろしくお願いします。

簡単な自己紹介ですが、私はAnsible界隈方面でワイワイやっている者でして趣味でAnsibleのモジュール(VMwareとか)を作ったりパッチ書いたりしてアップストリームにPRしたり、暇があればissue解決したりしています。
vExpertに申し込んだのは、NSXのAnsibleモジュールやVMwareのSDK話をVM meetup tokyoVMware DevOps Meetupで話したときに@IrieMasahiroさんからvExpertのSecond Half Applicationがあるから挑戦してみたらどうでしょう?というのがきっかけで申し込んだらなんと頂けた(わーい:))と言うのが簡単な経緯になります。(あの時はありがとうございます)

それでは、今回のアドベントカレンダー用のネタですが以前のVMware DevOps Meetup #3で@masanaraさんが話をされていたk8sのオペレーターからVMをデプロイすると言う話を聞いて、「これはAnsibleと組み合わせたらOSのセットアップまで一貫して出来るのでは?」と思ったのでやってみようとおもいます 🙂

やりたいこと

ここでは、以下のことをやってみます。

  • kindでクラスタを作る
  • kindで作ったクラスタにkopf-operator-vmworldのオペレーターを起動
  • Ansibleのモジュールを使って、マニフェストの実行およびVMクローン後のミドルウェア導入(Apacheを例にする)
    • クローンしたVMはDHCPでIPが自動で割当たるようにします
  • アクセス確認

環境

項目 バージョン 備考
ESXi 6.7.0
vCenter 6.7.0
kind 0.6.0
CentOS 7 テンプレート、kindホスト
Ansible 2.9.1 Python3.6を使う

kindセットアップ

公式ドキュメント

インストール

必要なパッケージをインストールします。

dockerを起動します。

kindをインストールします。

kubectlをインストールします。

クラスタの作成

クラスタを作成します。

podの状態を確認します。

これで、k8sの準備は出来ました 🙂

オペレーターのセットアップ

インストール

必要なパッケージをインストールします。

クローン

リポジトリをクローンします。

オペレーターのDockerイメージ作成

controller.py の一部を環境に合わせて修正します。
ここでは以下のように修正しています。

Dockerfile の一部を環境に合わせて修正します。
ここでは以下のように修正しています。
また、追加パッケージ(gccとmusl-dev)が必要だったので追記します。

イメージを作成します。

イメージが作成できているか確認します。

CRDの作成

オペレーターが使うCRD(Custom Resource Definition)を作成します。

CRDが作成されたか確認します。

オペレーターの起動

オペレーターを起動します。
一先ず、動かすのが目的なので config をコンテナから読めるようパーミッションを変更します。

Ansibleのセットアップ

インストール

必要なパッケージをインストールします。

virtualenvを作成して有効化します。

Ansibleをインストールします。

モジュールのインストール

Ansibleのk8sモジュールを動作させるために必要なモジュールをインストールします。

VMwareのモジュールを動作させるために必要なモジュールをインストールします。

Playbook作成

Operator経由でデプロイするVM処理とデプロイしたVMにApacheをインストールする処理をするPlaybookを作成します。
vcenter_auth_infoguest_auth_info の部分は環境に合わせて変更してください。
今回はrootでSSHログインするので guest_auth_info にはゲストOSにログインする用のパスワードを記述しています。

最後にPlaybookを実行します。

ANSIBLE_HOST_KEY_CHECKING=False にしているのはSSH接続時にホストキーチェックを無効にするためです。

デモ動画

実際にPlaybookを動かした時のデモ動画です。

Demo to deploy Web server using Ansible and vSphere Operation from sky_joker on Vimeo.

こんな感じでVMのデプロイからMWのインストール・起動が出来ました 🙂

最後に

将来(Project Pacific?)はこんな感じでVMやコンテナはマニフェストで定義してデプロイし、同時にVMのOS以上はAnsibleなどの自動化ツールで構築するようになっていくかもしれませんね 🙂
全てYAMLで管理する時代…うーん、慣れないとインデント地獄沼に落ちそうな気がしますw
後は同じYAMLでも宣言的と違ってAnsibleの冪統制は処理を書かないといけないので、そこの違いも慣れる必要があると思います。

今回は一つのPlaybookでまとめてしまいましたが、AWXやAnsible Towerを使ってPlaybookを分割しワークフローで組み合わせてあげれば使い回しができる構成にもできそうですね。

以上になります 🙂
明日は Kunihiro さんです!

Leave a Reply

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください