GitHub - coreos/coreos-vagrant: Minimal Vagrantfile for Container Linuxを使用して構築する方が圧倒的に早いですが、Running CoreOS Container Linux on VirtualBoxを参考に、IPアドレスの設定とプロキシの設定をした Container Linux を VirtualBox 上に作成します。 Windows 上で Cygwin を使用して作成しましたが、Mac や Linux 上でも作成できると思います。
手順は以下のとおりです。
環境
- Windows 8.1
- Cygwin (wget, mkisofsあたりが必要)
- VirtualBox 5.1.22
Container Linux のハードディスク・イメージを作成
ハードディスク・イメージを作成
CoreOS は便利なスクリプトを github 上で公開しています。今回はハードディスク・イメージを作成するスクリプトをダウンロードして使用します。
> wget https://raw.github.com/coreos/scripts/master/contrib/create-coreos-vdi > chmod +x create-* > ./create-coreos-vdi -V stable -d ./
(略) Success! CoreOS stable VDI image was created on coreos_production_1409.5.0.vdi
この後、 VM を起動しますが、上記で作成したハードディスクのイメージファイル使うと、VM を作るたびにイメージファイルを作らなくてはなりません。この作成処理は時間が掛かるので VM ごとに作成するのは時間がもったいないです。そのため、一度作ったイメージファイルを VM ごとに複製し、各 VM は複製したそれぞれのイメージファイルを使用することで構築時間を短縮しましょう。
> VBoxManage clonehd coreos_production_*.vdi my_vm01.vdi
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100% Clone medium created in format 'VDI'. UUID: 5e11ad7d-40da-4158-9980-612aaa9d0cd9
Container Linux の設定用イメージを作成
接続用鍵を作成
Container Linux へ接続する SSH の認証鍵を作成します。以下のコマンドを実行すると~/.ssh
ディレクトリにid_ed25519
とid_ed25519.pub
というファイルが作成されます。
> ssh-keygen -t ed25519
Generating public/private ed25519 key pair. (略) The key's randomart image is: +--[ED25519 256]--+ (略) +----[SHA256]-----+
トークンの作成
クラスタ間で設定を共有するためのトークン付きのURLを取得します。このURLは同じクラスタの Container Linux で共有します。
> curl -s https://discovery.etcd.io/new
https://discovery.etcd.io/xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
(細かい設定をしない場合)
今回の例ではIPアドレスの設定とプロキシの設定をした Container Linux を作成しますが、IPアドレスの設定やプロキシの設定などの特別な設定を行わない場合には、以下のスクリプトをダウンロードして実行することで設定用イメージの作成をスキップできます。
このスクリプトは以下の引数を付与して実行します。
- -H:名前
- -S:暗号鍵の公開鍵(.pubで終わる方)
- -t:トークン
> wget https://raw.github.com/coreos/scripts/master/contrib/create-basic-configdrive > ./create-basic-configdrive -H my_vm01 -S ~/.ssh/id_ed25519.pub -t xxxxx
設定用ファイルを作成
設定ファイルはそれぞれの Container Linux ごとに必要です。2 つの Container Linux を作成する場合は 2 つの設定ファイルが必要となります。設定はopenstack/latest
ディレクトリ以下にuser_data
というファイルを作成し YAML で記述します。my_vm01
とmy_vm02
という名前の Container Linux を構築する場合、my_vm01/openstack/latest
とmy_vm02/openstack/latest
のようにディレクトリを作成すると良いと思います。
設定ファイルの内容は、以下のサイトを使うことで、記述した YAML のフォーマットに誤りが無いかを検証できます。
CoreOS Container Linux Config Validator
このサンプルは、my_vm01
という名前の Container Linux に IP アドレスとして192.168.56.90
を設定し、プロキシとしてhttp://proxy:80
を設定します。
以下の 2 つは作成・取得した物に置き換えてください。
- discoveryはトークン付きのURL を指定します。
- ssh_authorized_keys は
cat ~/.ssh/id_ed25519.pub
の出力結果を指定します
SETTING_DIR=my_vm01 mkdir -p ${SETTING_DIR}/openstack/latest vim ${SETTING_DIR}/openstack/latest/user_data
${SETTING_DIR}/openstack/latest/user_data
#cloud-config write_files: - path: "/etc/systemd/network/10-hostonly.network" owner: "root" permissions: "0644" content: | [Match] Name=enp0s8 [Network] Address=192.168.56.90/24 coreos: etcd2: name: my_vm01 advertise-client-urls: http://$public_ipv4:2379 initial-advertise-peer-urls: http://$private_ipv4:2380 discovery: https://discovery.etcd.io/xxxxxxxxxxxxxxxxxxxxxxxxxxxxx listen-peer-urls: http://0.0.0.0:2380 listen-client-urls: http://0.0.0.0:2379,http://0.0.0.0:4001 units: - name: etcd2.service command: start - name: fleet.service command: start - name: docker.service enable: true command: start drop-ins: - name: 20-http-proxy.conf content: | [Service] Environment="HTTP_PROXY=http://proxy:80" ssh_authorized_keys: - ssh-ed25519 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxx hostname: my_vm01
設定用イメージを作成
作成した設定ファイルを使用して、設定用イメージを作成します。
> mkisofs -R -V config-2 -o my_vm01.iso ${SETTING_DIR}
VirtualBox
VM の設定
仮想マシン(VM)を作成します。Container Linux は名前のとおり Linux なのでタイプは Linux を選びます。カーネルは 64bit の 4.11.6 なのでバージョンは Linux 2.6 / 3.x / 4.x (64-bit) を選びます。ハードディスクは先ほど複製したハードディスクイメージを使用するため、右側のフォルダのアイコンから先ほど複製した my_vm01.vdi を選択します。
ストレージに設定用のイメージ(my_vm01.iso)を光学ドライブとして追加します。コントローラは何を選んでも大丈夫だと思います(未確認)。
ネットワークは以下の 2 つを設定します。
- Container Linux からインターネットへ接続するための NAT
- ホストである Windows から Container Linux へ接続するための ホストオンリーアダプタ
ここまで完了すると以下のとおりの設定になります。
一般
ストレージ
ネットワーク アダプタ1
ネットワーク アダプタ2
VM の起動
VM を起動すると、10秒程度で以下のように鍵の情報と IP アドレスが表示されます。これで起動は完了です。
SSH でホストから Container Linux へ接続してみましょう。
> ssh core@192.168.56.90 -i ~/.ssh/id_ed25519