仮想環境上にVagrant・Ansible・Packstackを使ってOpenStackを自動構築してみた
はじめに
賽の河原のようにOpenStackを作っては壊し、作っては壊し、というのを繰り返すことが趣味でした。
手動でやるのにいい加減疲れたので、自動化してみました。
ここに記録を残します。
使ったものはGithubで公開しています。
https://github.com/bonboyaju19/openstack
使用したもの
この記事では下記のツールやパッケージを使用します。
- Vagrant・・・仮想環境の構築・管理に一元的なワークフローを提供してくれます。VMを簡単に作っては壊しができるので使用します。
- Hyper-V・・・仮想環境を構築する実行基盤です。本記事ではHyper-Vを使用しますが、他にもVirtualboxを使用することもできます。
- Packstack・・・OpenStackの自動デプロイツールです。OpenStackのディストリビューションの評価目的として、簡単に構築するために作成されたものです。
- Ansible・・・Redhatが開発しているOSSの構成管理ツールです。
実行環境
今回は下記の環境で実行しました。
- Windows10 1903 OSビルド18362.295 64bit Professional (Hyper-Vインストール)
- Vagrant 2.2.5
説明
自動構築の全体の流れの説明をします。
Vagrantfile
Vagrantfileは仮想環境上に構築する仮想マシンの設計図です。
VagrantはこのVagrantfileの宣言通りに仮想マシンを構築します。
Providerは今回はHyper-Vにしていますが、Virtualboxを利用している場合は、config.vm.provider "virtualbox"
に変更することで使用可能です。
setup.sh
をプロビジョニング用のシェルスクリプトとして使用しています。仮想マシンを構築した初回起動時に自動で実行してくれます。
ansible
フォルダを共有させ、その中にあるplaybook.yml
を実行することで、自動構築を実行していきます。フォルダの共有はホストの管理者ユーザの認証情報を途中で要求されるので入力してあげてください。
Vagrant.configure("2") do |config|
config.vm.box = "centos/7"
config.vm.network "public_network", bridge: "Default Switch"
config.vm.provider "hyperv" do |vb|
vb.memory = "32768" # VMに割り当てるメモリ量です。最低でも8GBは必要です。
vb.cpus = "8" # VMに割り当てるCPUコア数です。できれば2コア以上割り当てます。
end
config.vm.synced_folder "./ansible", "/ansible"
config.vm.provision :shell, path: "setup.sh", privileged: true
end
setup.sh
Vagrantが仮想マシンを構築したときに自動実行してくれるスクリプトファイルです。
Ansibleをインストールして、playbookを実行するだけなので省略。
playbook.yml
Ansibleで自動構築をする定義が書かれたファイルです。
Vagrantfileが仮想マシンそのものの定義が書かれたものに対して、Ansible playbookはOS上の構成やアプリの構成の定義が書かれたものになります。
Packstackを正常に実行するために、firewalld
やNetworkManager
を停止させ、network
を起動させます。
その後、Packstackをインストールして実行します。
- hosts: all
become: yes
tasks:
- name: stop firewalld
systemd:
name: firewalld.service
state: stopped
enabled: no
- name: stop NetworkManager
systemd:
name: NetworkManager
state: stopped
enabled: no
- name: start network
systemd:
name: network
state: started
enabled: yes
- name: install packstack repository
yum:
name: centos-release-openstack-stein
state: latest
- name: install packstack
yum:
name: openstack-packstack
state: latest
- name: generate answer file
shell: packstack --gen-answer-file=~/answer.cfg
- name: install packstack
shell: packstack --answer-file=~/answer.cfg
実行してみる
では自動構築してみましょう。
必要なツールをインストールすればすぐ開始できます。
git clone https://github.com/bonboyaju19/openstack.git
cd openstack
vagrant up
仮想マシンの構築~playbookの実行までは数分で行われますが、Packstackの実行に少々時間がかかります。
メモリ32GB, CPU8コア割り当てても、15分近くかかりました。
自動構築が完了したら、IPアドレスとadminユーザの初期パスワードを確認しましょう。
Vagrantfileがあるフォルダ上でvagrant ssh
コマンドを実施すると、仮想マシンにSSH接続することができます。
/root
フォルダにあるkeystonerc_admin
ファイルの中に、OpenStackのadminユーザの初期パスワードが記載されています。
また、デモ用のユーザの情報もkeystonerc_demo
に記載されています。
C:\openstack> vagrant ssh
[vagrant@localhost ~]$ sudo su -
[root@localhost ~]# ll
total 76
-rw-------. 1 root root 5570 Jun 1 17:18 anaconda-ks.cfg
-rw-------. 1 root root 51804 Aug 19 13:58 answer.cfg
-rw-------. 1 root root 338 Aug 19 14:00 keystonerc_admin # adminユーザのパスワード
-rw-------. 1 root root 319 Aug 19 14:00 keystonerc_demo #demoユーザのパスワード
-rw-------. 1 root root 5300 Jun 1 17:18 original-ks.cfg
[root@localhost ~]# ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:15:5d:38:01:2f brd ff:ff:ff:ff:ff:ff
inet 192.168.219.20/28 brd 192.168.219.31 scope global noprefixroute dynamic eth0
valid_lft 85491sec preferred_lft 85491sec
inet6 fe80::215:5dff:fe38:12f/64 scope link
valid_lft forever preferred_lft forever
仮想マシンのeth0のIPアドレスをブラウザに入れることで、OpenStackのログイン画面が表示されます。
おわりに
特に真新しい技術を使ってはいません。
Ansibleを使ってみたかっただけです。
時間があれば、HTTPS対応なども取り組んでみたいです。
間違っていればご指摘お待ちしております~。
Author And Source
この問題について(仮想環境上にVagrant・Ansible・Packstackを使ってOpenStackを自動構築してみた), 我々は、より多くの情報をここで見つけました https://qiita.com/shinmai88/items/8319ea88528906efe019著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .