1.経緯
今まで自宅サーバではwebvirtmgrを用いて、ゲストOSを管理していた。でもそれだと、ゲストOSの構築は出来ても、スイッチやらバランサーやらの自動構築が出来ない。そのため、apache CloudStackを構築することにした。それに伴いCentOSも再インストールを行った。
2.環境について
2.1.自宅サーバの環境は以下の通り
ブランド:自作PC
CPU:AMD Ryzen 7 1700 (8コア、16スレッド(
メモリ:64GB
ディスク:M2.SSD 256GB(root用)
SATA SSD 512GB×2(NFS用でLVM組んでます)
NIC:マザーボード内蔵×1(enp35s0)
拡張NIC×1(enp37s0)
ネットワーク環境
ネットワーク 192.168.0.0/24
ゲートウェイ:192.168.0.1
DNS:192.168.0.1
enp35s0:192.168.0.16
enp37s0:192.168.0.15
2.2.ブリッジの設定
nmcliで行った。
libvirt用
# nmcli con add type bridge ifname br0
# nmcli con modify bridge-br0 bridge.stp no
# nmcli con modify bridge-br0 ipv4.method manual ipv4.address "192.168.0.15/24" ipv4.gateway "192.168.0.1" ipv4.dns 192.168.0.1
# nmcli con add type bridge-slave ifname enp35s0 master bridge-br0
# nmcli con del enp35s0 ; systemctl restart NetworkManager
CloudStack用
# nmcli con add type bridge ifname cloudbr0
# nmcli con modify bridge-cloudbr0 bridge.stp no
# nmcli con modify bridge-cloudbr0 ipv4.method manual ipv4.address "192.168.0.17/24" ipv4.gateway "192.168.0.1" ipv4.dns 192.168.0.1
# nmcli con add type bridge-slave ifname br0 master bridge-cloudbr0
# systemctl restart NetworkManager
2.3.ここでハマった!
当初、オンボードNICであるenp35s0に192.168.0.15を割り当て、拡張NICであるenp37s0に192.168.0.16を割り当て、拡張NIC側にブリッジの設定を行った。
すると/var/log/agent/agent.logに以下のメッセージが表示された。
2019-04-28 14:59:24,728 ERROR [kvm.resource.LibvirtConnection] (Agent-Handler-1:null) (logid:) Connection with libvirtd is broken: virConnectGetVersion で無効な接続ポイ
ンターです
どうやらマザーボード内蔵NICの方とlibvirtのvirbr0-nicが紐ついているようなので、マザーボード内蔵NICのenp35s0にブリッジの設定を行った。
2.4.参考にしたサイト
[CentOS7.2でブリッジインタフェースを作る](https://hosii.net/?p=446 CentOS7.2でブリッジインタフェースを作る)
3.CloudStackのインストールのための準備
3.1.MariaDBとかlibvirtの設定
[CentOS7にCloudStack4.9を入れた](http://monslab.iobb.net/BLOG/?p=3165 CentOS7にCloudStack4.9を入れた)
を参考にインストールを行った。
4.CloudStackのインストール
4.1.基本的なインストールの流れ
[CentOS7にCloudStack4.9を入れた](http://monslab.iobb.net/BLOG/?p=3165 CentOS7にCloudStack4.9を入れた)
を参考にインストールを行った。
(手抜きでごめんなさいw)
なお、この記事を書いている2019/04/28時点で、CloudStackは4.12が最新だったので、以下のように設定を変更した。
4.1.1./etc/yum.repos.d/cloudstack.repoの作成
[cloudstack]
name=cloudstack
baseurl=http://cloudstack.apt-get.eu/centos/7/4.12/
enabled=1
gpgcheck=0
4.1.2.ハマったところ①
ホストの作成に失敗した。そのため、/var/log/cloud/management/management-server.logを見たところ、以下のエラーが出力されていた。
2019-04-25 23:12:23,734 DEBUG [c.c.u.s.SSHCmdHelper] (catalina-exec-10:ctx-58a0e0ee ctx-0917e978) (logid:1fad8646) Executing cmd: cloudstack-setup-agent -m 192.168.0.15
-z 1 -p 1 -c 1 -g 21f1e5ab-ea6a-39b3-87f8-bae66d685595 -a --pubNic=cloudbr0 --prvNic=cloudbr0 --guestNic=cloudbr0 --hypervisor=kvm
2019-04-25 23:12:24,882 DEBUG [c.c.u.s.SSHCmdHelper] (catalina-exec-10:ctx-58a0e0ee ctx-0917e978) (logid:1fad8646) cloudstack-setup-agent -m 192.168.0.15 -z 1 -p 1 -c 1
-g 21f1e5ab-ea6a-39b3-87f8-bae66d685595 -a --pubNic=cloudbr0 --prvNic=cloudbr0 --guestNic=cloudbr0 --hypervisor=kvm output:Starting to configure your system:
Checking KVM...[Failed]
Please enable KVM on this machine
Try to restore your system:
えええ?kvmインストールしてありますよ...
よく見たら、sshでコマンドを流している。cloudstack-setup-agent ← これね
cloudstack-setup-agentが何者なのか調べる。
[root@sun ~]# which /bin/cloudstack-setup-agent
/bin/cloudstack-setup-agent
[root@sun ~]# file /bin/cloudstack-setup-agent
/bin/cloudstack-setup-agent: Python script, ASCII text executable
[root@sun ~]#
なんだ。pythonスクリプトか。
エラーで落ちている箇所を調べる。
152 print "Starting to configure your system:"
153 syscfg = sysConfigFactory.getSysConfigFactory(glbEnv)
154 try:
155 syscfg.config()
156 print "CloudStack Agent setup is done!"
157 except (CloudRuntimeException,CloudInternalException), e:
158 print "Try to restore your system:"
159 try:
160 syscfg.restore()
161 except:
162 pass
どうやら155行目で落ちているようだ。
(ちなみに、viのコマンドモードで「:set number」ってやると行番号が表示されます)
このsysクラスを見てみる。
133 kvmEnabled = self.svo.isKVMEnabled()
134 if not kvmEnabled:
135 raise CloudInternalException("Checking KVM...[Failed]\nPlease enable KVM on this machine\n")
136
ふむ。133行目でfalseが戻ってきて、エラーになっている。
呼び出している箇所はここだった。
185 #it covers RHEL7
186 class sysConfigRedhat7(sysConfigAgentRedhat7Base):
187 def __init__(self, glbEnv):
188 super(sysConfigRedhat7, self).__init__(glbEnv)
189 self.services = [securityPolicyConfigRedhat(self),
190 networkConfigRedhat(self),
191 libvirtConfigRedhat(self),
192 firewallConfigAgent(self),
193 nfsConfig(self),
194 cloudAgentConfig(self)]
pythonは触った事がないので、ここで行き詰まったwww
なので、
# cd /usr/lib64/python2.7/site-packages/cloudutils
# grep kvm *
globalEnv.py: self.hypervisor = "kvm"
バイナリファイル globalEnv.pyc に一致しました
serviceConfig.py: cfo.addEntry("resource", "com.cloud.hypervisor.kvm.resource.LibvirtComputingResource")
バイナリファイル serviceConfig.pyc に一致しました
serviceConfigServer.py: db.execute(statement%('https://rightscale-cloudstack.s3.amazonaws.com/kvm/RightImage_CentOS_5.4_x64_v5.6.28.qcow2.bz2', '90fcd2fa4d3177e31ff296cecb9933b7', '4'))
バイナリファイル serviceConfigServer.pyc に一致しました
syscfg.py: kvmEnabled = self.svo.isKVMEnabled()
syscfg.py: if not kvmEnabled:
バイナリファイル syscfg.pyc に一致しました
utilities.py: if os.path.exists("/dev/kvm"):
utilities.py: return bash("kvm-ok").isSuccess()
utilities.py: if os.path.exists("/dev/kvm"):
バイナリファイル utilities.pyc に一致しました
としたら、何やら怪しげなものが...
「utilities.py: if os.path.exists("/dev/kvm"):」
↑
これです。これ。
/dev/kvmが存在するか調べたら、存在しなかった。何故!?
で、ぐぐったら「virt-host-validate」というコマンドがある事がわかったので、叩いて見た。
QEMU: 確認中 for hardware virtualization : 成功
QEMU: 確認中 if device /dev/kvm exists : 失敗 ('kvm-intel' または 'kvm-amd' モジュールが読み込まれ、かつ BIOS で仮想化を有効にしていることを確認してください)
QEMU: 確認中 if device /dev/vhost-net exists : 成功
QEMU: 確認中 if device /dev/net/tun exists
: 成功
QEMU: 確認中 for cgroup 'memory' controller support : 成功
QEMU: 確認中 for cgroup 'memory' controller mount-point : 成功
QEMU: 確認中 for cgroup 'cpu' controller support : 成功
QEMU: 確認中 for cgroup 'cpu' controller mount-point : 成功
QEMU: 確認中 for cgroup 'cpuacct' controller support : 成功
QEMU: 確認中 for cgroup 'cpuacct' controller mount-point : 成功
QEMU: 確認中 for cgroup 'cpuset' controller support : 成功
QEMU: 確認中 for cgroup 'cpuset' controller mount-point : 成功
QEMU: 確認中 for cgroup 'devices' controller support : 成功
QEMU: 確認中 for cgroup 'devices' controller mount-point : 成功
QEMU: 確認中 for cgroup 'blkio' controller support : 成功
QEMU: 確認中 for cgroup 'blkio' controller mount-point : 成功
QEMU: 確認中 for device assignment IOMMU support : 成功
QEMU: 確認中 if IOMMU is enabled by kernel : 成功
LXC: 確認中 Linux >= 2.6.26 向けです : 成功
LXC: 確認中 for namespace ipc : 成功
LXC: 確認中 for namespace mnt : 成功
LXC: 確認中 for namespace pid : 成功
LXC: 確認中 for namespace uts : 成功
LXC: 確認中 for namespace net : 成功
LXC: 確認中 for namespace user : 成功
LXC: 確認中 for cgroup 'memory' controller support : 成功
LXC: 確認中 for cgroup 'memory' controller mount-point : 成功
LXC: 確認中 for cgroup 'cpu' controller support : 成功
LXC: 確認中 for cgroup 'cpu' controller mount-point : 成功
LXC: 確認中 for cgroup 'cpuacct' controller support : 成功
LXC: 確認中 for cgroup 'cpuacct' controller mount-point : 成功
LXC: 確認中 for cgroup 'cpuset' controller support : 成功
LXC: 確認中 for cgroup 'cpuset' controller mount-point : 成功
LXC: 確認中 for cgroup 'devices' controller support : 成功
LXC: 確認中 for cgroup 'devices' controller mount-point : 成功
LXC: 確認中 for cgroup 'blkio' controller support : 成功
LXC: 確認中 for cgroup 'blkio' controller mount-point : 成功
LXC: 確認中 if device /sys/fs/fuse/connections exists : 成功
しっかりと2行目にエラーが出ていますねw
そういえば最近、マザーボードを買い直したのでBIOSを見てみたら、仮想化が有効になっていませんでしたwww
BIOSの画面で仮想化を有効にしたら、/dev/kvmが存在し、上記のエラーが出なくなりましたw
約2週間くらいかかってやっと構築できました。