基本的にこちらに記載の通りの手順でOpenStackにBOSHをインストールする。
https://bosh.io/docs/init-openstack.html
なお、OpenStackのホストとして使用しているCentOS等でも作業可能だが、PackStackを使用した私の環境ではOpenSSLの依存関係の問題でうまく動作しなかった。そのため、CentOS7 Minimalを別に作成して作業している。
※本手順はローカル環境で実施しており、セキュリティ等の課題が残っていますのでご注意ください。
- OpenStackをインストールする
- 事前準備
- BOSH Directorをデプロイする
- デプロイする
- 接続確認
- BOSHでデプロイする
- まとめ - OpenStackにBOSH環境を構築する
- トラブルシューティング
OpenStackをインストールする
PackStackを使用してOpenStackの1台構成を構築する。
OpenStackインストール手順はこちらを参照。
なお、リソース不足のためインストールするコンポーネントは以下の通り少なくしている。
# cat ./answers.cfg | grep INSTALL CONFIG_MARIADB_INSTALL=y CONFIG_GLANCE_INSTALL=y CONFIG_CINDER_INSTALL=y CONFIG_MANILA_INSTALL=n CONFIG_NOVA_INSTALL=y CONFIG_NEUTRON_INSTALL=y CONFIG_HORIZON_INSTALL=y CONFIG_SWIFT_INSTALL=n CONFIG_CEILOMETER_INSTALL=n CONFIG_AODH_INSTALL=n CONFIG_PANKO_INSTALL=n CONFIG_SAHARA_INSTALL=n CONFIG_HEAT_INSTALL=n CONFIG_MAGNUM_INSTALL=n CONFIG_TROVE_INSTALL=n CONFIG_IRONIC_INSTALL=n CONFIG_CLIENT_INSTALL=y # installation was not specified in CONFIG_MARIADB_INSTALL, specify CONFIG_LBAAS_INSTALL=n CONFIG_NEUTRON_METERING_AGENT_INSTALL=n CONFIG_HEAT_CFN_INSTALL=n
事前準備
実行環境としては、CentOS7 Minimalを使用する。
BOSH CLIダウンロード
BOSH CLIをこちらからダウンロードする。
https://bosh.io/docs/cli-v2.html
※最新版をダウンロードしてください
$ curl -OL https://s3.amazonaws.com/bosh-cli-artifacts/bosh-cli-3.0.1-linux-amd64 $ chmod +x ./bosh-cli-3.0.1-linux-amd64 $ sudo mv ./bosh-cli-3.0.1-linux-amd64 /usr/local/bin/bosh $ bosh -v version 3.0.1-712bfd7-2018-03-13T23:26:43Z Succeeded
Yumパッケージインストール
各種パッケージのコンパイルに必要となるパッケージをインストールする。パッケージが不足している場合、後述のエラーが発生する。
依存パッケージはこちらにも記載あり。 https://bosh.io/docs/cli-env-deps.html
(BOSH Docs) $ sudo yum install -y gcc gcc-c++ ruby ruby-devel mysql-devel postgresql-devel postgresql-libs sqlite-devel libxslt-devel libxml2-devel patch openssl $ gem install yajl-ruby (Option) $ sudo yum install -y git libtool zlib-devel openssl-devel
Rubyのパッケージ不足のエラー対応はこちらが参考になりました。
こちらでも同様のやりとりがなされていた。
https://groups.google.com/a/cloudfoundry.org/forum/#!topic/bosh-dev/isJWhSqLSBY
OpenStack CLIもインストールしておく。
$ sudo yum install -y epel-release python-devel python-pip $ sudo pip install pip --upgrade setuptools $ sudo pip install python-openstackclient
BOSH Directorをデプロイする
以下の手順を実行してBOSH Directorをデプロイする。
ネットワーク構成
次のようなネットワークを作成しておく。詳細な内容はBOSHドキュメントに記載の通り。
Step 1: Prepare an OpenStack environment
セキュリティルールは以下の通り。ICMPなどは環境に合わせて追加する。
$ cat ./create_security_group.sh #!/bin/sh openstack security group create bosh openstack security group rule create bosh --ingress --protocol tcp --dst-port 22:22 --remote-ip 0.0.0.0/0 openstack security group rule create bosh --ingress --protocol tcp --dst-port 6868:6868 --remote-ip 0.0.0.0/0 openstack security group rule create bosh --ingress --protocol tcp --dst-port 25555:25555 --remote-ip 0.0.0.0/0 openstack security group rule create bosh --egress --ethertype IPv4 --remote-ip 0.0.0.0/0 openstack security group rule create bosh --egress --ethertype IPv6 --remote-ip ::/0 openstack security group rule create bosh --ingress --protocol tcp --dst-port 1:65535 --remote-group bosh
bosh-deploymentをダウンロード
$ mkdir bosh && cd bosh $ git init $ git submodule add https://github.com/cloudfoundry/bosh-deployment
Gitサブモジュールとしてbosh-deploymentをダウンロードしておくと、オフィシャルのアップデートを追従しやすくなる。
auth_url, 認証情報を確認する
PackStackでOpenStackをインストールしたサーバのホームディレクトリにOpenStackのクレデンシャル(認証情報)が生成されている。
[root@openstack1 ~]# cat keystonerc_admin unset OS_SERVICE_TOKEN export OS_USERNAME=admin export OS_PASSWORD='PASSWORD' export OS_AUTH_URL=http://192.168.1.202:5000/v3 export PS1='[\u@\h \W(keystone_admin)]\$ ' export OS_PROJECT_NAME=admin export OS_USER_DOMAIN_NAME=Default export OS_PROJECT_DOMAIN_NAME=Default export OS_IDENTITY_API_VERSION=3
keystone API v2の場合はこちら https://bosh.io/docs/openstack-keystonev2.html
各パラメータは環境により異なりますが、記事内の一貫性を確保するためにそのまま記載しています。
デプロイコマンドをshellにしておく
引数を含めたコマンドは変更を追えるようにshellスクリプトファイルにしておくと便利。
$ touch deploy_bosh.sh $ chmod +x ./deploy_bosh.sh
デプロイShellを編集する
$ vi deploy_bosh.sh
bosh create-env bosh-deployment/bosh.yml \ --state=state.json \ --vars-store=creds.yml \ -o bosh-deployment/openstack/cpi.yml \ -o bosh-deployment/external-ip-with-registry-not-recommended.yml \ -v director_name=bosh-1 \ -v internal_cidr=100.64.0.0/24 \ -v internal_gw=100.64.0.1 \ -v internal_ip=100.64.0.5 \ -v external_ip=192.168.1.214 \ -v auth_url=http://192.168.1.202:5000/v3 \ -v az=nova \ -v default_key_name=bosh \ -v default_security_groups=[bosh] \ -v net_id=1cdfa900-dfbb-4f95-8571-854bee863e69 \ --vars-file=openstack_creds.yml \ -v openstack_domain=Default \ -v openstack_project=admin \ -v private_key=../id_rsa_bosh.pem \ -v region=RegionOne \ -o operations_file/vm_size.yml \ #option -o operations_file/worker_instances.yml #option
net_id
はネットワーク名ではなく、IDで指定する必要あり。
OpenStackの認証情報は別ファイルに記載しておくと、Git管理する際に除外して流出を防げる。
$ cat openstack_creds.yml openstack_username: admin openstack_password: 'PASSWORD'
(オプション)また、デフォルトだとインスタンスのFlavorはm1.xlarge
となっているが、私の環境はリソース不足のため、オペレーションズファイルで設定を上書きする。これによりbosh-deployment/openstack/cpi.yml
に記載されている内容を上書きする。
$ cat operations_file/vm_size.yml - type: replace path: /resource_pools/name=vms/cloud_properties? value: instance_type: m1.medium availability_zone: ((az))
あわせて、Workerのインスタンス数をデフォルトの4から1に減らしてリソース節約する。
$ cat ./operations_file/worker_instances.yml - type: replace path: /instance_groups/name=bosh/properties/director/workers value: 1
デプロイする
デプロイShellを実行する。私の環境では90分以上かかった...。VMが小さいとruby_openstack_cpi
のコンパイルに時間がかかる...。
$ ./deploy_bosh.sh Deployment manifest: '/root/bosh/bosh-deployment/bosh.yml' Deployment state: 'state.json' Started validating Downloading release 'bosh'... Finished (00:07:40) Validating release 'bosh'... Finished (00:00:01) Downloading release 'bosh-openstack-cpi'... Finished (00:00:05) Validating release 'bosh-openstack-cpi'... Finished (00:00:00) Validating cpi release... Finished (00:00:00) Validating deployment manifest... Finished (00:00:00) Downloading stemcell... Finished (00:30:56) Validating stemcell... Finished (00:00:04) Finished validating (00:38:51) Started installing CPI Compiling package 'ruby_openstack_cpi/ddb0f4a3013923fb1b074454d4314264c47d33c5'... Finished (00:00:00) Compiling package 'bosh_openstack_cpi/f4e7f49b87ef90a8c0186602cad189c00bd508ca'... Finished (00:00:00) Installing packages... Finished (00:00:03) Rendering job templates... Finished (00:00:00) Installing job 'openstack_cpi'... Finished (00:00:00) Finished installing CPI (00:00:03) Starting registry... Finished (00:00:00) Uploading stemcell 'bosh-openstack-kvm-ubuntu-trusty-go_agent/3468.21'... Skipped [Stemcell already uploaded] (00:00:00) Started deploying Creating VM for instance 'bosh/0' from stemcell '7c81c288-593b-4b3c-8d62-89037a5de635'... Finished (00:02:04) Waiting for the agent on VM '47382065-ac7e-4703-a7f6-edae677f46cf' to be ready... Finished (00:04:23) Creating disk... Finished (00:00:08) Attaching disk '29f04e0c-0f13-45d8-809f-525272023100' to VM '47382065-ac7e-4703-a7f6-edae677f46cf'... Finished (00:00:59) Rendering job templates... Finished (00:00:03) Compiling package 'ruby_openstack_cpi/ddb0f4a3013923fb1b074454d4314264c47d33c5'... Finished (01:37:04) Compiling package 'ruby-2.4-r3/8471dec5da9ecc321686b8990a5ad2cc84529254'... Skipped [Package already compiled] (00:00:02) Compiling package 'mysql/b7e73acc0bfe05f1c6cbfd97bf92d39b0d3155d5'... Skipped [Package already compiled] (00:00:02) Compiling package 'libpq/3afb51e921e950abb31e5d039d2144591a41482d'... Skipped [Package already compiled] (00:00:00) Compiling package 'postgres/3b1089109c074984577a0bac1b38018d7a2890ef'... Skipped [Package already compiled] (00:00:03) Compiling package 'bosh_openstack_cpi/f4e7f49b87ef90a8c0186602cad189c00bd508ca'... Finished (00:01:41) Compiling package 'registry/2231e6d61fb5a36afafad82ea6ff49f83334c9bb'... Skipped [Package already compiled] (00:00:05) Compiling package 'nginx/3518a530de39c41ec65abf1194c27aadae23b711'... Skipped [Package already compiled] (00:00:01) Compiling package 'bosh-gcscli/fce60f2d82653ea7e08c768f077c9c4a738d0c39'... Skipped [Package already compiled] (00:00:01) Compiling package 'postgres-9.4/52b3a31d7b0282d342aa7a0d62d8b419358c6b6b'... Skipped [Package already compiled] (00:00:02) Compiling package 'davcli/2672d0a96a775f5252fef6ac7bbab3928aa41599'... Skipped [Package already compiled] (00:00:00) Compiling package 'verify_multidigest/8fc5d654cebad7725c34bb08b3f60b912db7094a'... Skipped [Package already compiled] (00:00:00) Compiling package 'director/06635593362c742ed6027270d6fbe0ddd8439650'... Skipped [Package already compiled] (00:00:07) Compiling package 'gonats/866cdc573ac10dd85929abb531923197486ffa95'... Skipped [Package already compiled] (00:00:01) Compiling package 's3cli/b6e38c619dd5575e16ea9fcabc4b7c500effdd26'... Skipped [Package already compiled] (00:00:01) Compiling package 'health_monitor/81dd0f6b874d009696027d43282893df4c18b2c8'... Skipped [Package already compiled] (00:00:04) Updating instance 'bosh/0'... Finished (00:02:07) Waiting for instance 'bosh/0' to be running... Failed (01:07:13) Failed deploying (02:56:28) Stopping registry... Finished (00:00:00) Cleaning up rendered CPI jobs... Finished (00:00:00) Deploying: Received non-running job state: 'failing' Exit code 1
最終的にエラーになっているが、次の通り接続確認ができた。
接続確認
boshコマンドでBOSH Directorにアクセスできることを確認する。以下のように結果が返って来ればOK。
$ bosh alias-env bosh -e 192.168.1.214 --ca-cert <(bosh int creds.yml --path /director_ssl/ca) Using environment '192.168.1.214' as client 'admin' Name bosh-1 UUID ca43266f-fee1-4627-a96c-f080cc2eab91 Version 264.7.0 (00000000) CPI openstack_cpi Features compiled_package_cache: disabled config_server: disabled dns: disabled snapshots: disabled User admin Succeeded
BOSHでデプロイする
引き続き検証予定...
まとめ - OpenStackにBOSH環境を構築する
PackStackでインストールしたOpenStackにBOSH環境を構築した。リソース不足が顕著だが、どこまで使えるか引き続き検証を進める。
トラブルシューティング
private_key no such file or directory
private_keyは、デプロイするymlファイルを起点に指定する必要がある。今回はboshディレクトリに格納しているため、一つ上の階層としてファイルを指定する必要がある。
Deployment manifest: '/home/dev/bosh/bosh-deployment/bosh.yml' Deployment state: 'state.json' Started validating Failed validating (00:00:02) Parsing installation manifest '/home/dev/bosh/bosh-deployment/bosh.yml': Reading private key from /home/dev/bosh/bosh-deployment/bosh: Opening file /home/dev/bosh/bosh-deployment/bosh: open /home/dev/bosh/bosh-deployment/bosh: no such file or directory Exit code 1
DISK容量不足
$ ./deploy_bosh.sh Deployment manifest: '/home/dev/bosh/bosh-deployment/bosh.yml' Deployment state: 'state.json' Started validating Downloading release 'bosh'... Finished (00:07:51) Validating release 'bosh'... Finished (00:00:06) Downloading release 'bosh-openstack-cpi'... Finished (00:00:09) Validating release 'bosh-openstack-cpi'... Finished (00:00:02) Validating cpi release... Finished (00:00:00) Validating deployment manifest... Finished (00:00:02) Downloading stemcell... Finished (00:31:36) Validating stemcell... Failed (00:00:14) Failed validating (00:40:03) Extracting stemcell from '/home/dev/.bosh/downloads/301bb47087fe66403788c852a401f42006426be9-f08706560b67b50654998e46038b6adacc8a4b46': reading extracted stemcell manifest in '/home/dev/.bosh/installations/0a6fbed5-08af-4e7b-7e1f-27965a2522ac/tmp/stemcell-manager107784699': Extracting stemcell from '/home/dev/.bosh/downloads/301bb47087fe66403788c852a401f42006426be9-f08706560b67b50654998e46038b6adacc8a4b46' to '/home/dev/.bosh/installations/0a6fbed5-08af-4e7b-7e1f-27965a2522ac/tmp/stemcell-manager107784699': Shelling out to tar: Running command: 'tar --no-same-owner -xzf /home/dev/.bosh/downloads/301bb47087fe66403788c852a401f42006426be9-f08706560b67b50654998e46038b6adacc8a4b46 -C /home/dev/.bosh/installations/0a6fbed5-08af-4e7b-7e1f-27965a2522ac/tmp/stemcell-manager107784699', stdout: '', stderr: 'tar: image: 10240 バイトのうち、9216 バイトのみ書き込みました tar: stemcell.MF: open 不能: デバイスに空き領域がありません tar: stemcell_dpkg_l.txt: open 不能: デバイスに空き領域がありません tar: 前のエラーにより失敗ステータスで終了します ': exit status 2 Exit code 1
対策: OpenStackホストのDISKを増やす。Cinderボリュームに空きがあってもrootの容量が上限としてリミットになるのでrootも増やす。
パッケージ不足
次のようなエラーが出る場合は記事中のYumインストールを確認する。なお、OpenStackを稼働させているサーバだとYumインストールしていても読み込みがうまくできないケースがある。回避策としては、別にBOSH Deployようサーバを用意する。
基本的にchecking xxx ...no
となっているパッケージを追加インストールする。
[root@openstack1 bosh]# ./deploy_bosh.sh Deployment manifest: '/root/bosh/bosh-deployment/bosh.yml' Deployment state: 'state.json' Started validating Downloading release 'bosh'... Finished (00:07:40) Validating release 'bosh'... Finished (00:00:01) Downloading release 'bosh-openstack-cpi'... Finished (00:00:05) Validating release 'bosh-openstack-cpi'... Finished (00:00:00) Validating cpi release... Finished (00:00:00) Validating deployment manifest... Finished (00:00:00) Downloading stemcell... Finished (00:30:56) Validating stemcell... Finished (00:00:04) Finished validating (00:38:51) Started installing CPI Compiling package 'ruby_openstack_cpi/ddb0f4a3013923fb1b074454d4314264c47d33c5'... Failed (00:00:01) Failed installing CPI (00:00:01) Installing CPI: Compiling job package dependencies for installation: Compiling job package dependencies: Compiling package: Running command: 'bash -x packaging', stdout: 'Installing yaml checking for a BSD-compatible install... /usr/bin/install -c checking whether build environment is sane... yes checking for a thread-safe mkdir -p... /usr/bin/mkdir -p checking for gawk... gawk checking whether make sets $(MAKE)... yes checking whether make supports nested variables... yes checking for gcc... no checking for cc... no checking for cl.exe... no ', stderr: '+ set -e -x ... + ./configure --prefix=/root/.bosh/installations/05c8688b-3c66-4365-7a4a-d0d7eee3902c/packages/ruby_openstack_cpi --disable-shared configure: error: in `/root/.bosh/installations/05c8688b-3c66-4365-7a4a-d0d7eee3902c/tmp/bosh-release-pkg026788788/yaml-0.1.7': configure: error: no acceptable C compiler found in $PATH See `config.log' for more details ': exit status 1 Exit code 1 [root@openstack1 bosh]#
+ echo 'Installing rubygems' + tar zxvf ruby_openstack_cpi/rubygems-2.7.3.tar.gz + pushd rubygems-2.7.3 + /root/.bosh/installations/05c8688b-3c66-4365-7a4a-d0d7eee3902c/packages/ruby_openstack_cpi/bin/ruby setup.rb /root/.bosh/installations/05c8688b-3c66-4365-7a4a-d0d7eee3902c/tmp/bosh-release-pkg077630227/rubygems-2.7.3/lib/rubygems/core_ext/kernel_require.rb:59:in `require': cannot load such file -- zlib (LoadError)
creating stemcell (bosh-openstack-kvm-ubuntu-trusty-go_agent 3468.21): Executing external CPI command: '/root/.bosh/installations/05c8688b-3c66-4365-7a4a-d0d7eee3902c/jobs/openstack_cpi/bin/cpi': Running command: '/root/.bosh/installations/05c8688b-3c66-4365-7a4a-d0d7eee3902c/jobs/openstack_cpi/bin/cpi', stdout: 'bundler: failed to load command: /root/.bosh/installations/05c8688b-3c66-4365-7a4a-d0d7eee3902c/packages/bosh_openstack_cpi/bin/openstack_cpi (/root/.bosh/installations/05c8688b-3c66-4365-7a4a-d0d7eee3902c/packages/bosh_openstack_cpi/bin/openstack_cpi) ', stderr: 'LoadError: cannot load such file -- openssl
プロセス多重起動?
Waiting for instance 'bosh/0' to be running...
が完了しないためインスタンスにSSHして確認したところ、同一プロセスが複数起動しているように見えた。CPU処理が競合して非効率に思えたので、一つを残してkillした。影響は不明。
$ ssh vcap@192.168.1.214 -i ./id_rsa_bosh.pem bosh/0:~$ ps auxf <snip> root 21166 0.0 0.0 19616 3308 ? S< 06:12 0:00 /bin/bash /var/vcap/jobs/director/bin/director_ctl start vcap 21251 11.3 1.1 142288 47684 ? R<l 06:14 2:06 \_ ruby /var/vcap/packages/director/bin/bosh-director-migrate -c /var/vcap/jobs/director/config/director.yml root 21238 0.0 0.0 19616 3316 ? S< 06:14 0:00 /bin/bash /var/vcap/jobs/director/bin/director_ctl start vcap 21318 11.3 1.1 140184 45452 ? R<l 06:15 1:57 \_ ruby /var/vcap/packages/director/bin/bosh-director-migrate -c /var/vcap/jobs/director/config/director.yml root 21335 0.0 0.0 19616 3372 ? S< 06:15 0:00 /bin/bash /var/vcap/jobs/director/bin/director_ctl start vcap 21402 11.3 1.0 136236 43620 ? R<l 06:17 1:47 \_ ruby /var/vcap/packages/director/bin/bosh-director-migrate -c /var/vcap/jobs/director/config/director.yml vcap 21357 10.5 0.9 132160 39820 ? R<l 06:16 1:44 ruby /var/vcap/packages/director/bin/bosh-director-worker -c /var/vcap/jobs/director/config/worker_1.yml -i 1 bosh/0:~$ kill -9 21402 21318