CoreOSに入門してみました。
CoreOSはミニマムな新しいOSで、etcdというものでクラスタが組めてfleetというもので分散環境が構築できるらしい。
分散環境を構築したCoreOSクラスタ上で、Dockerによってアプリケーションを動かすらしい。
という程度の知識からスタートです。
何事もまずはインストールしないと、ということで本記事ではISOイメージからCoreOSのVMを作成してみます。
また、CoreOSのCloud-Configという機能も使ってみます。
まずはISOイメージをダウンロードします。
ISOダウンロードページから最新のStable版をダウンロードします。
サイズは136MBでした。
2014/11/2現在でのStable最新版はこんな感じです。
- CoreOS 444.5.0
- Kernel 3.16.2
- Docker 1.2.0
- etcd 0.4.6
- fleet 0.8.3
VirtualBoxを使います。
VirtualBoxマネージャーを起動して、適当にVMを作っていきます。
ホスト側からSSHできるようにしたいので、ネットワークアダプターにホストオンリーアダプタを追加します。
また、ISOをマウントしておきます。
設定は、こんな感じ。
起動してみます。
CoreOSの文字がカラフルでシャレオツです。
まだHDDにはインストールされておらず、CDからブートしている状態です。
試しにifconfigしてみました。
NICが2個あることが確認できます。
では、HDDにインストールしていきたいと思います。
が、その前にCloud−Configの設定ファイルを作成します。
Cloud-Config
CoreOSでは、標準でCloud-Configという機能が利用できます。
OS起動時にYAMLの設定ファイルを読み、OSの基本設定を行う機能です。
YAMLで設定を記述しておけば、次のものが設定できます。
- ネットワーク
- ユーザ
- systemd
- など
cloud-initプロジェクトにCoreOSの独自要素を追加したものだそうです。
とりあえず、SSHでログインできるようにネットワークとユーザの設定をしてみます。
ユーザは適当なユーザにパスワードと公開鍵を設定します。
Githubから公開鍵を取得してくる便利機能があるのでそれも使ってみます。
パスワードハッシュの生成方法など諸々公式のマニュアルに書いてあります。
https://coreos.com/docs/cluster-management/setup/cloudinit-cloud-config/#users
ネットワークはsystemd-networkdの設定ファイルを書き出す方法で設定します。
Unitsで設定すれば、systemd-networkdのリスタートも自動でやってくれるみたいです。
https://coreos.com/docs/cluster-management/setup/network-config-with-networkd/
~/cloud-config.yml
#cloud-config
coreos:
units:
- name: 10-static.network
runtime: no
content: |
[Match]
Name=enp0s8
[Network]
Address=192.168.33.200/24
users:
- name: nownabe
passwd: ...
groups:
- sudo
coreos-ssh-import-github: nownabe
先頭の#cloud-config
は必須です。
インストール
インストール用のスクリプトが用意されているので、それを使います。
sudo coreos-install -d /dev/sda -C stable -c cloud-config.yml
OSイメージをダウンロードをしてるみたいですが、数分で終わります。
cloud-config.ymlは、/var/lib/coreos-install/user_data
に保存されます。
インストールが終わったら、ディスクをアンマウントして再起動します。
ネットワークの設定ができてるのと、作ったユーザでログインできることを確認してみてください。
うまくいかない時は、coreos-cloudinit
コマンドでcloud-configファイルを指定してCoreOSを設定し直すことができるので、色々試してみます。
設定のログも出力されるので、動作を理解するのにいいかもしれません。
sudo coreos-cloudinit -from-file=cloud-config.yml
設定は一回リセットされるわけではないので注意が必要です。
(1回作ったユーザは残ったまま)
ホストのMacからSSHしてみます。
% ssh 192.168.33.200
Last login: Sun Nov 2 14:31:56 2014
CoreOS (stable)
nownabe@localhost ~ $ cat /etc/os-release
NAME=CoreOS
ID=coreos
VERSION=444.5.0
VERSION_ID=444.5.0
BUILD_ID=
PRETTY_NAME="CoreOS 444.5.0"
ANSI_COLOR="1;32"
HOME_URL="https://coreos.com/"
BUG_REPORT_URL="https://github.com/coreos/bugs/issues"
第1回は以上です。
ネットワークまわりでなかなか苦労しました。
単にsystemd-networkdに慣れていないせいなのか、CoreOSのcloud-initの動作を理解してないのか、もうちょっと触ってみる必要がありそうです。
次回はクラスタ組んでDockerコンテナのフェイルオーバーとかやりたいです。
参考にさせていただきました。
ありがとうございます!