背景
プライベートクラウド構築をコード化する遊びの第1段として、
OpenNebula環境を3分クッキングできるようにしていってます。
構成図
- nuc801
- ceph1, opennebula-node1, opennebula-cp1
- nuc802
- ceph2, opennebula-node2
- nuc1001
- ceph3, opennebula-node3
の役割(=role)を担う
- ceph3, opennebula-node3
本当は役割ごとにサーバを分けたくて、
Ceph用に3台
OpenNebula-Node用に3台
OpenNebula-CP用に2台
のようにしたいけど、
手元に使えるサーバ機が3台しかないので、
nuc801で3役させたり、
nuc802, nuc1001で2役させる想定
ディレクトリ構成
ansible <- ansibleコンテナ
iso-downloader <- iso-downloaderコンテナ
ansible/codes/ 以下が本体
ディレクトリ構成は
公式のベストプラクティスに倣って、色々試行錯誤中
tree
.
├── ansible
│ ├── codes
│ │ ├── cephs.yml
│ │ ├── development
│ │ ├── kvm-guests.yml
│ │ ├── opennebula-cps.yml
│ │ ├── opennebula-nodes.yml
│ │ ├── roles
│ │ │ ├── cephs
│ │ │ │ ├── files
│ │ │ │ └── tasks
│ │ │ │ └── main.yml
│ │ │ ├── common
│ │ │ │ ├── files
│ │ │ │ │ └── hosts
│ │ │ │ └── tasks
│ │ │ │ └── main.yml
│ │ │ ├── kvm-guests
│ │ │ │ ├── files
│ │ │ │ ├── meta
│ │ │ │ │ └── main.yml
│ │ │ │ └── tasks
│ │ │ │ └── main.yml
│ │ │ ├── opennebula-cps
│ │ │ │ ├── files
│ │ │ │ └── tasks
│ │ │ │ └── main.yml
│ │ │ └── opennebula-nodes
│ │ │ ├── files
│ │ │ └── tasks
│ │ │ └── main.yml
│ │ ├── site.yml
│ │ └── test
│ ├── docker-entrypoint.d
│ │ ├── 01_generate-authorizedkeys.sh
│ │ └── 02_create-symlink-to-sshdir.sh
│ ├── docker-entrypoint.sh
│ └── Dockerfile
├── docker-compose.yml
├── iso-downloader
│ ├── docker-entrypoint.d
│ │ └── 01_download-iso.sh
│ ├── docker-entrypoint.sh
│ └── Dockerfile
└── README.md
22 directories, 23 files
development
インベントリファイル
opennebula-node1 と ceph1 は 台数の兼ね合いで、
同じIPを持ち、同じホストを指すようにしてる
(opennebula-node2, opennebula-node3 も同様)
opennebula-cp1 は IPは違うけど、
KVMゲストとして opennebula-node1 に構築する
[cephs]
ceph1
ceph2
ceph3
[opennebula-nodes]
opennebula-node1
opennebula-node2
opennebula-node3
[opennebula-cps]
opennebula-cp1
site.yml
site.yml は
インフラストラクチャー全体を定義する Playbook をインポート する
トップレベルの Playbook です
下記4つのプレイブックからなる
- import_playbook: cephs.yml
- import_playbook: opennebula-nodes.yml
- import_playbook: kvm-guests.yml
- import_playbook: opennebula-cps.yml
opennebula-nodes.yml
opennebula-node の role では
libvirtd, mariadb, opennebula-node-kvm の設定をやる
- hosts: opennebula-nodes
roles:
- common
- opennebula-nodes
kvm-guests.yml
kvm-guests の role では
opennebula-cp1 をKVMゲストとして
opennebula-node1 に構築する
ansibleにlibvirtのモジュールがあるようなので、
これを使えないかどうか試してみる
- hosts: opennebula-node1
roles:
- common
- kvm-guests
opennebula-cps.yml
opennebula-cps の role では
opennebula-sunstone の設定をやる
kvm-guests で構築したVMに対して設定する
- hosts: opennebula-cps
roles:
- common
- opennebula-cps
cephs.yml
cephs の role では
ceph-mon, ceph-mgr, ceph-osd の設定をやる
- hosts: cephs
roles:
- common
- cephs
iso-downloader
ISOをダウンロードするコンテナ
KVMゲストとして、opennebula-cp1を構築するときに
OSイメージが必要になるので、あらかじめダウンロードしておく
コメント