CoreOSに入門してみる (1) インストール - Qiita

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を作っていきます。

スクリーンショット 2014-10-26 1.28.51.png

ホスト側からSSHできるようにしたいので、ネットワークアダプターにホストオンリーアダプタを追加します。
また、ISOをマウントしておきます。

設定は、こんな感じ。

スクリーンショット 2014-10-26 1.34.37.png

起動してみます。
スクリーンショット 2014-10-26 1.38.51.png

CoreOSの文字がカラフルでシャレオツです。
まだHDDにはインストールされておらず、CDからブートしている状態です。

試しにifconfigしてみました。
スクリーンショット 2014-10-26 1.43.42.png

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イメージをダウンロードをしてるみたいですが、数分で終わります。

installed.png

cloud-config.ymlは、/var/lib/coreos-install/user_dataに保存されます。

インストールが終わったら、ディスクをアンマウントして再起動します。

スクリーンショット 2014-11-02 23.04.22.png

ネットワークの設定ができてるのと、作ったユーザでログインできることを確認してみてください。

うまくいかない時は、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コンテナのフェイルオーバーとかやりたいです。

参考にさせていただきました。
ありがとうございます!