kubevirt.kubevirt-modules
Ansible KubeVirt モジュール
Ansible KubeVirt モジュールは、以下の Kubernetes クラスターオブジェクトタイプの管理を自動化することを可能にします:
- 仮想マシン(VM テンプレートや VM プリセットも含む)、
- VM レプリカセット、
- および永続ボリュームクレーム(Containerized Data Importer 機能を含む)。
Ansible 2.8 のリリース以来、モジュール、インベントリプラグイン、および関連するユニットテストは 上流の Ansible Git リポジトリ の一部となっており、このリポジトリには統合テストと例のプレイブックのみが含まれています。
目次
クイックスタート
簡単な紹介については、次の kubevirt.io のブログ投稿を参照してください:
要件
- Ansible >= 2.8
pip3 --user install ansible
- openshift-restclient-python >= 0.8.2
pip3 --user install openshift
ソースコード
テスト
ここには2つのテストの対象があります:
- モジュールテストは tests/playbooks にあります。
- ロールテストは tests/roles にあります。
特定のターゲットの完全なテストを実行するには、関連する all.yml
プレイブックを使用してください。
自動テスト
ユニットテスト
上流の Ansible リポジトリ には、KubeVirt モジュールをカバーするユニットテストが含まれています。
統合テスト
モジュールテスト(tests/playbooks/all.yml)は、実際のクラスターに対して実行され、両方のKubeVirt と CDIがデプロイされています。以下の環境で実行されます:
- TravisCI(Ubuntu VM、Minikubeのみサポート、KubeVirt VMのKVMアクセラレーションはなし)
- oVirt Jenkins(どのクラスタkubevirtciもサポートする物理サーバー)
モジュールテストは次のように実行されます:
- 最新リリースの Ansible(
pip install ansible
で取得できるもの) - Ansible の安定版ブランチ
- Ansible の開発ブランチ
ロールテスト(tests/roles/all.yml)は、開発ブランチを使用してTravisCI上でのみ実行されます。
リグレッションを早期に検出するために、Travisは毎24時間、ansible.git の新しいクローンに対してすべてのテストを実行し、テストが失敗した場合はKubeVirtモジュールの開発者にメールを送ります。
手動テスト
oc login
でクラスターにログインできるマシンにこのリポジトリをクローンします:$ git clone https://github.com/kubevirt/ansible-kubevirt-modules.git $ cd ./ansible-kubevirt-modules
(オプション)依存関係を分離するために仮想環境を設定します:
$ python3 -m venv env $ source env/bin/activate
依存関係をインストールします:
$ pip install openshift
前のステップをスキップした場合は、そのコマンドの前に
sudo
を追加する必要があるかもしれません。Ansible をインストールします(多くの方法の一つで):
最新リリース版をインストール:
$ pip install ansible
ここでも、
sudo
が必要な場合があります。開発ブランチから RPM をビルド:
$ git clone https://github.com/ansible/ansible.git $ cd ./ansible $ make rpm $ sudo rpm -Uvh ./rpm-build/ansible-*.noarch.rpm
テストを実行します:
$ ansible-playbook tests/playbooks/all.yml
注意:プレイブックの例には、作成された VMI にアクセスするための cloud-init 構成が含まれています。
SSH を使用する場合は、次のようにします:
$ kubectl get all NAME READY STATUS RESTARTS AGE po/virt-launcher-bbecker-jw5kk 1/1 Running 0 22m $ kubectl expose pod virt-launcher-bbecker-jw5kk --port=27017 --target-port=22 --name=vmservice $ kubectl get svc vmservice NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE vmservice ClusterIP 172.30.133.9 <none> 27017/TCP 19m $ ssh -i tests/test_rsa -p 27017 [email protected]
VM が立ち上がるまでにはしばらく時間がかかる場合があります。
virtctl
を使用する場合:$ virtctl console <vmi_name>
または
$ virtctl vnc <vmi_name>
ユーザー名は
kubevirt
、パスワードはkubevirt
です。
(オプション)仮想環境を終了し、削除します:
$ deactivate $ rm -rf env/
kubevirt_cdi_upload
モジュールに関するノート
kubevirt_cdi_upload
モジュールを使用してローカルホストから画像をアップロードするには、システムが CDI アップロードプロキシポッド に接続できる必要があります。これを実現する方法は次の2つです:
cdi
名前空間からcdi-uploadproxy
サービスを公開するkubectl port-forward
を使用して Kubernetes API サーバーを介して一時的なポートフォワーディングを設定する:kubectl port-forward -n cdi service/cdi-uploadproxy 9443:443
k8s_facts
モジュールに関するノート
次のコマンドは、既存の VM のファクトを収集し、KubeVirt VM スペック に基づく JSON ドキュメントを出力します。
$ ansible-playbook examples/playbooks/k8s_facts_vm.yml
KubeVirt インベントリプラグインに関するノート
インベントリプラグインにより、ユーザーはデータソースを指向して Ansible がタスクをターゲットにするホストのインベントリをコンパイルすることができます。これには -i /path/to/file
や /path/to/file
というコマンドラインパラメーター、または他の設定ソースからの指定が可能です。
KubeVirt インベントリプラグインの有効化
KubeVirt プラグインを有効にするには、tests/ansible.cfg
ファイルに以下のセクションを追加します:
[inventory]
enable_plugins = kubevirt
KubeVirt インベントリプラグインの設定
tests/playbooks/plugin/kubevirt.yaml
でプラグインの設定を次のように定義します:
plugin: kubevirt
connections:
- namespaces:
- default
interface_name: default
この例では、KubeVirt プラグインは default
名前空間からすべての VMI をリストし、default
インターフェイス名を使用します。
KubeVirt インベントリプラグインの使用
プレイブックでプラグインを使用するには、次のように実行します:
$ ansible-playbook -i kubevirt.yaml <playbook>
注意:KubeVirt インベントリプラグインは Multus と連携して動作するように設計されています。ブリッジに接続され、ステータスフィールドに IP アドレスが表示される VMI のみに使用できます。Kubernetes サービスによって公開された VMI については、k8s Ansible モジュール を使用してください。