no about note

エンジニアのメモ書き

Cobbler+Ansible+PackstackでOpenstack(Liberty)マルチノード環境を構築した話(その1)

概要

  • Openstackでマルチノード環境を構築した話
  • バージョンはLiberty

構成図

f:id:noabout:20160616235742p:plain

環境

  • 物理ノード x 6台(Openstackノード)
    • ControllerNode x 1台
    • NetworkNode x 1台
    • ComputeNode x 4台
  • NetworkはNeutronを使用し、VXLANでTunnelNetWorkを
  • HAなど冗長性はなし(これからやりたい)
  • Nasノード1台(Cinderのバックエンド) ※別途構築済み
No. Hostname IP CPU Clock RAM Disk OS Role
1 opsn01 192.168.1.31 2.40GHz 54GB 400GB CentOS 7 ControllerNode
2 opsn02 192.168.1.32 2.40GHz 54GB 400GB CentOS 7 NetworkNode
3 opsn03 192.168.1.33 2.40GHz 54GB 400GB CentOS 7 ComputeNode
4 opsn04 192.168.1.34 2.40GHz 54GB 400GB CentOS 7 ComputeNode
5 opsn05 192.168.1.35 2.40GHz 54GB 400GB CentOS 7 ComputeNode
6 opsn06 192.168.1.36 2.40GHz 54GB 400GB CentOS 7 ComputeNode
7 nas01 192.168.1.50 2.66GHz 2GB 4TB CentOS 6.7 NAS(Cinder Backend)

構築の流れをざっくり

  • Cobbler

    • 物理ノードへOSインストールを行う
  • Ansible

    • OS基本設定を行う
    • Packstackパッケージの配布とインストール
  • Packstack

    • Openstackのデプロイを行う
      • Answerファイル編集
      • Packstack実行
    • インストールしたコンポーネントの詳細はanswerファイルに記載

Cobbler

Kickstart留意点

1. AnsibleとKickstartのすみわけについて

KickstartはOSインストールのみに終始し、OSの設定などなるべくAnsibleで制御する方針。

2. パーティション設計
  • ファイルシステムはRHEL7標準のxfs
  • SwapのサイズはRedhat推奨のメモリの半分
  • 拡張・伸縮性があるLVMを採用、VGは分けるメリットがないので、1つにする
  • LVMは複数にわけず、1つのみ
    • 理由はNovaの仮想マシンの実体ファイルが/var/lib/nova/instancesに配置されるため
## Kickstartファイル (opsn0x.ks)

clearpart --all

part /boot --fstype="xfs" --ondisk=sda --size=500
part pv.001 --fstype="lvmpv" --ondisk=sda --size=1 --grow

volgroup VolGroup --pesize=4096 pv.001
logvol /  --fstype="xfs" --name=lv_root --vgname=VolGroup --size=1 --grow
logvol swap  --fstype="swap" --size=27648 --name=lv_swap --vgname=VolGroup
3. NetworkManagerの停止

これだけはKickstart内で制御した

## Kickstartファイル (opsn0x.ks)

# Service
services --disabled=NetworkManager
services --enabled=network

CobblerにDistribution、Profiles、Systemsを登録

参考:
noaboutsnote.hatenablog.com

Distribution登録

  • Provisioningサーバで実施
  • Opentackノード用のCentOS7のイメージを登録
# cd /mnt
# wget http://www.ftp.ne.jp/Linux/packages/CentOS/7/isos/x86_64/CentOS-7-x86_64-Everything-1511.iso

# mount CentOS-7-x86_64-Everything-1511.iso /mnt

# cobbler import --name CentOS-7-x86_64-Everything --path /mnt

# cobbler distro list
   CentOS-7-Everything-x86_64

# umount /mnt/

パッケージリポジトリミラーリング

# cobbler repo add --name CentOS-7-x86_64-updates --mirror http://ftp.iij.ad.jp/pub/linux/centos/7/updates/x86_64/
# cobbler repo add --name CentOS-7-x86_64-extras --mirror http://ftp.iij.ad.jp/pub/linux/centos/7/extras/x86_64/
# cobbler repo add --name epel7 --mirror http://ftp.iij.ad.jp/pub/linux/fedora/epel/7/x86_64

# cobbler repo list
  CentOS-7-x86_64-extras
  CentOS-7-x86_64-updates
  epel7

Profiles登録

  • OpenstackノードようのProfile作成
  • Kickstartファイルを用意する
# cobbler profile add --name= --distro=opsn0x --kickstart=/var/lib/cobbler/kickstarts/opsn0x.ks
# cobbler sync

Systems登録

## Cobbler system add

# cobbler system add  \
--name=opsn01 \          # system名を指定(addの場合はこの名前でsystemが作成される)
--hostname=opsn01 \    # Hostnameを設定
--profile=opsn0x \          # 利用するprofileを指定
--interface=enp2s0f0 \            # 設定するインターフェースを指定
--mac=xx:xx:xx:xx:xx:xx \   # eth0のMACアドレス
--static=1 \                           # 固定IP or DHCP (DHCPの場合は0)
--ip-addres=192.168.1.31 \      # IPアドレス
--subnet=255.255.0.0 \          # サブネットマスク
--gateway=192.168.1.1 \          # ゲートウェイ
~~~~~

Cobbblerでインストール実行

  • 起動時にネットワークブートするようにすれば自動でインストールされる
OSインストールをやり直す場合

Cobbler側で二度同じホストでネットワークブートしないようになっているので、
明示的にネットワークブートできるようにする必要がある

# cobbler system edit --name opsn01 --netboot-enabled True
→これを全ホスト分実行する

# cobbler sync

Ansible

  • OSインストール後の設定
  • Packstackパッケージの配布を行う

参考:
noaboutsnote.hatenablog.com

Playbook実行

  • Provisioningサーバで実施
# cd /etc/ansible-playbooks/playbook
# ansible-playbook add-yum-conf.yml -i opsn -vvv -k
# ansible-playbook common-for-centos7.yml -i opsn -vvv -k
# ansible-playbook packstack_liberty.yml -i opsn -vvv -k

詳細はGithub

Packstack

Answerファイル生成

## opsn01で実施

# packstack --gen-answer-file=/root/answer.txt

Answerファイルを編集

編集したところだけ記載

##  SAHARAをインストール
CONFIG_SAHARA_INSTALL=y

## HEATをインストール
CONFIG_HEAT_INSTALL=y

## TROVEをインストール
CONFIG_TROVE_INSTALL=y

## NTPサーバを指定
CONFIG_NTP_SERVERS=192.168.1.100

## Computeノードを指定
CONFIG_COMPUTE_HOSTS=192.168.1.33,192.168.1.34,192.168.1.35,192.168.1.36

## Netwrokノードを指定
CONFIG_NETWORK_HOSTS=192.168.1.32

## Cinderのバックエンドをnasに指定
CONFIG_CINDER_BACKEND=nfs

## Cinderボリューム作成しない
CONFIG_CINDER_VOLUMES_CREATE=n

## CinderのNFSマウント先を指定
CONFIG_CINDER_NFS_MOUNTS=192.168.1.50:/cinder-vol

## PublicNetWorkのインターフェイス名を指定
CONFIG_NOVA_NETWORK_PUBIF=enp2s0f0

## PrivateNetwrokのインターフェイス名を指定
CONFIG_NOVA_NETWORK_PRIVIF=enp3s0f0

## 固定IPレンジを指定しない
CONFIG_NOVA_NETWORK_FIXEDRANGE=
CONFIG_NOVA_NETWORK_FLOATRANGE=

## LBaaSをインストール
CONFIG_LBAAS_INSTALL=y

## Metering_Agentをインストール
CONFIG_NEUTRON_METERING_AGENT_INSTALL=y

## FWaaSをインストール
CONFIG_NEUTRON_FWAAS=y

## VPNaaSをインストール
CONFIG_NEUTRON_VPNAAS=y

## Swiftをストレージ容量を100Gに指定
CONFIG_SWIFT_STORAGE_SIZE=100G

## HEAT_CLOUDWATCHをインストール
CONFIG_HEAT_CLOUDWATCH_INSTALL=y

## HEAT_CFNをインストール
CONFIG_HEAT_CFN_INSTALL=y

## demoプロジェクトを作成しない
CONFIG_PROVISION_DEMO=n

先にrpm --importをしておく

  • 環境がProxy配下の場合、rabbitmqのrpmkeyのところでエラーで失敗するので、先にrpmkeyをインストールしておく
  • Proxy配下でない場合は不要。
# rpm --import http://honyarara/gpg-key --httpproxy ***.***.***.*** --httpport ****
# rpm --import https://www.rabbitmq.com/rabbitmq-signing-key-public.asc --httpproxy 192.168.1.1 --httpport 8080

Packstackインストール

# packstack --answer-file=/root/answer.txt

→エラーが出たら、ログを見て

adminのパスワードを確認

/root/keystonerc_admin に書いてあるので確認する

ダッシュボードにログインする

http://192.168.0.31/dashboard

続きはまた次回

参考