2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

CloudStackの構築に色々とハマった

Posted at

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の作成

/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クラスを見てみる。

/usr/lib64/python2.7/site-packages/cloudutils/syscfg.py
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週間くらいかかってやっと構築できました。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?