CoreOS on Minnowboard
It's alive! My home Kubernetes cluster is alive! pic.twitter.com/BH4P6ysbJJ
— Ian Lewis (@IanMLewis) 2016年12月23日
始まりは去年の12月に見たこのツイート。一瞬で心奪われて思いました、「俺もやる!」 次の日には Minnowboard Turbot を発注してました。6台。
海外からの購入の割に届くのは早く、次の週には実機を手にしていたのですが、それからが長かった。 最終的にはこの6台に Kubernetes をインストールして自鯖の環境を全部これに引っ越したかったのですが、 そもそもベアメタル上に Kubernetes をどうインストールしよう、と言うことに時間がかかり。 仮想環境上で試行錯誤を繰り返して目処が見えたのでようやく実機に OS をインストールすることにしました。
ベアメタルへの CoreOS インストール
CoreOS のドキュメントを見る限りディスクに CoreOS をインストールする手順は、
Live CD などで (PXE とかでもいい) テンポラリに OS を起動しておいて、
そこから coreos-install
と言うスクリプトでターゲットとするディスクに CoreOS をインストールする
と言うものでした。
- ノードを起動、方法としては以下の三つ
- iPXE でテンポラリに CoreOS を起動
- PXE でテンポラリに CoreOS を起動
- USB もしくは Live CD で何らかの OS を起動
- 上記で起動したのちに CoreOS をディスクにインストール
が、家の環境に PXE のセットアップとかしたくないし、
かといっていちいち Minnowboard にディスプレイとキーボード繋いで coreos-install
ってするの面倒だなあと。
RaspberryPI みたいに SD カードに OS を dd して電源ボタン押すだけで良いとかないのかいなと思ったわけですよ。
coreos-install
を読む
とりあえず coreos-install
を 読んで見ました。
色々ごちゃごちゃやっているようだけど、 自分の興味あるところだけ要約すると、
してるだけでした。何だ、SDカードにあらかじめインストールしておけるじゃん。
イメージの作成
最終的に Kubernetes をクラスターにインストールすることを念頭にしてるので、 ちょびっとごちゃごちゃしてるけど、 イメージを作成するスクリプトを書いた。
etcd と Kubernetes を https で起動したかったので、 あらかじめ TLS サーバ/クライアント証明書をイメージに埋め込んでおくことにした。
利用した user-data はこんな感じ。ネットワークデバイス名は enp2s0
らしい。
#cloud-config
hostname: master01
ssh_authorized_keys:
- ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC0ol7jQ4umQMrE1qtXnyeYk/23g6zVJyVPh0+rljElu/7zj6iJZtixxs+LebPH6mZP13RIGPP0GlrSXRVBj9F2pjb/Y/PMyHBq3+BMeiYhn6XmNMwtTK2O69vvFZQi0M3wTVSezP9OxxrPay+eCXkGVi8lnh6ZDMrvSKI2c5SQ7wFJfT/4XTxzcP2gsotRV0rzADie1EF4MYke+ZJuiwnrFbZpeogrNtSvivR4f/g0/fD8NOjCKgbk4uY//6YhEqNaGhm0wABKt0MtimmxLLe2kosoFS539t88y5tD4ispcxlOAtVKZEL1ogf0VRrcBWSTfIiJty5vw6aRTfoFwuzZ ootsuka@mxs.nes.nec.co.jp
coreos:
etcd2:
name: master01
discovery: https://discovery.etcd.io/XXXXXXXXXXXXXXXXXXXXXXXXXXX
advertise-client-urls: https://192.168.3.111:2379
initial-advertise-peer-urls: https://192.168.3.111:2380
listen-client-urls: https://192.168.3.111:2379,http://127.0.0.1:2379
listen-peer-urls: https://192.168.3.111:2380
client-cert-auth: true
cert-file: /etc/kubernetes/ssl/apiserver.pem
key-file: /etc/kubernetes/ssl/apiserver-key.pem
trusted-ca-file: /etc/kubernetes/ssl/ca.pem
ca-file: /etc/kubernetes/ssl/ca.pem
peer-client-cert-auth: true
peer-cert-file: /etc/kubernetes/ssl/apiserver.pem
peer-key-file: /etc/kubernetes/ssl/apiserver-key.pem
peer-trusted-ca-file: /etc/kubernetes/ssl/ca.pem
peer-ca-file: /etc/kubernetes/ssl/ca.pem
units:
- name: etcd2.service
command: start
- name: 00-enp2s0.network
runtime: true
content: |
[Match]
Name=enp2s0
[Network]
DNS=8.8.8.8
Address=192.168.3.111/16
Gateway=192.168.11.1
イメージの書き込み
さて、適当な Linux マシンでイメージを作成したら、 今度はそれを Mac に持ってきて、SD カードに書き込む。 (何で Linux マシンから SD カードに直接書き込まないのかと言うと、 VM だから SD カードマウントするのめんどかったからです。)
手順は、
diskutils
で SD カードの場所を調べる。- ボリューム? をアンマウント。
dd
で書き込み。- SD カードをイジェクト。
Minnowboard 起動
書き込みが終わったら、とうとう Minnowboard の起動です。 SD カードを刺して電源繋げば起動するはず…。
が、起動しない。
Power up the MinnowBoard Turbot を読んだところ、
UEFI shell
とやらがデフォルトで起動してしまう模様。
とりあえずドキュメント通りに HW の時刻を合わせ、boot order
を変更したのちに、
再度電源オン…。
起動した。
次のエントリで Kubernetes が動いてると良いな…。