More Related Content Similar to OpenStack & Ansible で実現する自動化 (20) More from Hideki Saito (20) OpenStack & Ansible で実現する自動化2. 自己紹介
氏名: 齊藤 秀喜 (さいとう ひでき)
勤務先: Internet Initiative Japan Inc.
仕事:
• IaaSの開発・管理・運用・リサーチ
• OSSコミュニティ運営のお手伝い
所属: 日本OpenStackユーザ会(ボードメンバー 兼 写真部長)
趣味: OpenStack, Ansible
TwitterID: @saito_hideki
IRC Freenode: saitou
Email: saitou@iij.ad.jp
JAPAN OPENSTACK USER GROUP 2
JOSUG Meetup #30
7. OpenStack環境そのものを構築するために、Ansibleを利用する。
コントロールプレーンの構築手順をPlaybook化して再利用。
‣ OpenStack Kolla (http://docs.openstack.org/developer/kolla/)
‣ OpenStack Ansible (http://docs.openstack.org/developer/openstack-ansible/)
UnderCloudとAnsible
7JAPAN OPENSTACK USER GROUP
JOSUG Meetup #30
UnderCloud (Ansible)
OverCloud (OpenStack)
ControllerControllerController
ComputeComputeCompute
NetworkNetwork
Deploy
Configure
Manage
冗長構成での構築など
複雑な作業をPlaybook化
11. Ansibleの構成要素
11JAPAN OPENSTACK USER GROUP
JOSUG Meetup #30
# 構成要素 概要
1
設定ファイル
(ansible.cfg)
Ansibleの振る舞いを決める基本設定を記述する
2 inventory 管理対象ホストの一覧とパラメータを記述したファイル
3 plugin
タスクの実行時間を計測したり、タスクの完了を通知したり
するためのプラグイン群
4 module 管理対象ホストに、さまざまな操作を行うモジュール群
5 command
ansibleやansible-playbookなど、moduleやplaybookを
実行するコマンド群
6 Playbook
管理対象ホストに行う一連の操作をYAML形式で記述した
手順書のようなもの
12. ansibleコマンド
12JAPAN OPENSTACK USER GROUP
JOSUG Meetup #30
inventory
plugin
module
実行コード
host#0 host#0 host#0
実行コード 実行コード 実行コード
ansible
SSH SSH SSH
生成
% ansible <target> -i inventory -m module
13. ansible-playbookコマンド
13JAPAN OPENSTACK USER GROUP
JOSUG Meetup #30
plugin
playbook
module
実行コード
host#0 host#0 host#0
実行コード 実行コード 実行コード
SSH SSH SSH
生成
modulemodule
実行コード実行コード
inventory
% ansible-playbook -i inventory playbook.yml
ansible
17. 動作確認
17JAPAN OPENSTACK USER GROUP
JOSUG Meetup #30
setupモジュールを利用して、Ansibleの動作確認を行います。
実行結果
(openstack) % ansible local -i inventory -m setup
127.0.0.1 | SUCCESS => {
"ansible_facts": {
"ansible_all_ipv4_addresses": [
"192.168.1.2",
"172.16.0.1",
"172.16.1.1"
],
"ansible_all_ipv6_addresses": [
"fe80::62f8:1dff:feb4:e068%en0",
"fe80::74af:98ff:fe58:937f%awdl0",
"fe80::c014:662c:afd9:8e8d%utun0",
], ...以下略
19. 操作の仕組み
19JAPAN OPENSTACK USER GROUP
JOSUG Meetup #30
実行コード
実行
localhost
OpenStack
OpenStack
module
ansible
RouterNetwork
VM#0
VM#1
API Call
API
21. デモ(1) 仮想ネットワークの作成
---
- hosts: local
tasks:
- name: create network
os_network:
cloud: devstack
name: demo_net0
state: present
- name: create subnet
os_subnet:
cloud: devstack
name: demo_subnet0
cidr: 192.168.0.0/24
network_name: demo_net0
dns_nameservers:
- 8.8.8.7
- 8.8.8.8
state: present
21JAPAN OPENSTACK USER GROUP
JOSUG Meetup #30
ネットワークを作成する
- Network: demo_net0
- Subnet: demo_subnet0
22. デモ(2) 仮想ルータとの接続
---
- hosts: local
tasks:
- name: create router
os_router:
cloud: devstack
name: demo_router0
network: public
interfaces:
- demo_subnet0
state: present
22JAPAN OPENSTACK USER GROUP
JOSUG Meetup #30
publicとdemo_subnet0を接続
する仮想ルータを作成する
- Router: demo_router0
public
demo_net0
(demo_subnet0)
demo
router0
23. デモ(3) 仮想マシンの起動
---
- hosts: local
vars:
image_name: ubuntu-14.04-amd64
tasks:
- name: create server instance
os_server:
cloud: devstack
name: demo_vm0
region_name: RegionOne
availability_zone: nova
image: "{{ image_name }}"
key_name: saitou
timeout: 200
flavor: m1.tiny
security_groups: base_secgroup
auto_ip: yes
nics:
- net-name: demo_net0
state: present
23JAPAN OPENSTACK USER GROUP
JOSUG Meetup #30
以下のスペックで仮想マシン
を起動する
- name: demo_vm0
- image: ubuntu-14.04-amd64
- flavor: m1.tiny
- keypair: saitou
- secgroup: base_secgroup
- network: demo_net0
- floating_ip: 自動付与
demo_net0
demo_vm0
24. デモ(4) Userataを用いた初期設定
---
- hosts: local
vars:
image_name: ubuntu-14.04-amd64
tasks:
- name: create server instance
os_server:
cloud: devstack
name: demo_vm2
region_name: RegionOne
availability_zone: nova
image: "{{ image_name }}"
key_name: saitou
timeout: 200
flavor: m1.tiny
security_groups: base_secgroup
auto_ip: yes
nics:
- net-name: demo_net0
userdata: "{{ lookup('file','./userdata')}}"
state: present
24JAPAN OPENSTACK USER GROUP
JOSUG Meetup #30
以下のスペックで仮想マシン
を起動する
- name: demo_vm2
- image: ubuntu-14.04-amd64
- flavor: m1.tiny
- keypair: saitou
- secgroup: base_secgroup
- network: demo_net0
- floating_ip: 自動付与
- userdata: ./userdata
demo_net0
demo_vm2
demo_vm2
25. デモ(5) 仮想ストレージの作成
---
- hosts: local
tasks:
- name: create volume
os_volume:
cloud: devstack
availability_zone: nova
size: 1
display_name: demo_volume
state: present
25JAPAN OPENSTACK USER GROUP
JOSUG Meetup #30
以下のスペックでストレージ
を作成する
name: demo_volume
- size: 1GB
26. デモ(6) 仮想ストレージの作成
---
- hosts: local
tasks:
- name: attach volume
os_server_volume:
cloud: devstack
server: demo_vm0
volume: demo_volume
device: /dev/vdb
state: present
26JAPAN OPENSTACK USER GROUP
JOSUG Meetup #30
ストレージをVMに接続する
- server: demo_vm0
- volume: demo_volume
- デバイスファイル: /dev/vdb
demo_vm2
demo_
volume
/dev/vdb
30. デモ: Dynamic Inventory
Dynamic Inventoryプログラムを実行してみる
30JAPAN OPENSTACK USER GROUP
JOSUG Meetup #30
% ./inventory.py --list | jq
{
"instances": {
"hosts": [
"172.16.1.132",
"172.16.1.133"
],
"vars": {}
}
}
% ./inventory.py --host 172.16.1.132 | jq
{
"ansible_ssh_private_key_file": "/home/demo/.ssh/id_rsa.pub",
"ansible_user": "ubuntu"
}
31. デモ: Dynamic Inventoryを利用する
Dynamic Inventoryを利用して先程のansibleコマンドを実行してみる
31JAPAN OPENSTACK USER GROUP
JOSUG Meetup #30
% ansible instances -i inventory.py -a "uname -a"
172.16.1.132 | SUCCESS | rc=0 >>
Linux demo-vm2 3.13.0-93-generic #140-Ubuntu SMP Mon Jul 18 21:21:05 UTC 2016 x86_64 x86_64
x86_64 GNU/Linux
172.16.1.133 | SUCCESS | rc=0 >>
Linux demo-vm0 3.13.0-93-generic #140-Ubuntu SMP Mon Jul 18 21:21:05 UTC 2016 x86_64 x86_64
x86_64 GNU/Linux
32. Dynamic Inventoryの仕組み
32JAPAN OPENSTACK USER GROUP
JOSUG Meetup #30
Dynamic
Inventory
実行
OpenStack
ansible
RouterNetwork
VM#0
VM#1
API Call
API
1) --listでホストリストを取得
2) リストアップされたホストに対して--hostを
実行してでホストの個別パラメータを取得