プライベートクラウド構築のコード化 作業中1

技術

背景

プライベートクラウド構築をコード化する遊びの第1段として、
OpenNebula環境を3分クッキングできるようにしていってます。

構成図

  • nuc801
    • ceph1, opennebula-node1, opennebula-cp1
  • nuc802
    • ceph2, opennebula-node2
  • nuc1001
    • ceph3, opennebula-node3
      の役割(=role)を担う

本当は役割ごとにサーバを分けたくて、
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イメージが必要になるので、あらかじめダウンロードしておく

コメント

タイトルとURLをコピーしました