Update 2014-09-22
: Kubernetes on CoreOS with Fleet and Rudder on IDCFクラウド - Part5: FleetとRudderで再作成するUpdate 2014-07-19
: IDCFクラウドにCoreOSクラスタを構築する - Part5: 再セットアップUpdate 2014-08-18
: IDCFクラウドでCoreOSをISOからインストールする
IDCFクラウドにCoreOSクラスタを構築する - Part3: セットアップで成功したときのCoreOSのバージョンを記録していないのですが、またインストールに失敗するようになりました。
今回はバージョンを確認して記録します。
CoreOSの367.1.0をbeta channel
でIDCFクラウドでディスクにインストールすると、discoveryに失敗してしまいます。
CoreOS Stable Release
Updated 2014-08-18
: CoreOS Stable Release367.1.0
は、Stable Channel
としてリリースされました。
CoreOSのバージョン確認
インスタンスはCoreOSの367.1.0をbeta channel
でインストールしています。
$ cat /etc/os-release |
journalctlでログの確認
$ journalctl -u etcd.service |
systemctlでunitファイルの確認
systemctlでunitファイルを読むと、ETCD_ADDR
とETCD_PEER_ADDR
がポートだけでURLが書かれていません。
367.1.0では、COREOS_PRIVATE_IP
が入らないようです。
systemdのunitファイルは以下のディレクトリにあります。
/usr/lib64/systemd/system/
$ systemctl cat etcd.service |
missing /etc/environment fileのissueを読むと、確かに/etc/environment
ファイルが見つかりません。
$ cat /usr/share/oem/bin/coreos-setup-environment |
No IP data in cloudinit on OpenStackでOpenStackでも同様のissueがあります。
Same problem here, COREOS_PRIVATE_IP is empty using 367.1.0 on openstack with cloud-init.
/etc/environmentは明示的に作成する必要があるようです。
#cloud-config |
そういえば、Installing CoreOS to Diskに以下のような記述がありました。
なんのことかわからなかったのですが、どうもこのことらしいです。
Note: The $private_ipv4 and $public_ipv4 substitution variables referenced in other documents are not supported when installing via the coreos-install script.
cloud-config.yamlの再実行
また、CoreOSをディスクにインストールするときに使ったcloud-config.yamlは、/var/lib/coreos-install/user_data
にインストールされます。この設定はboot毎に再読み込みされるそうです。
The installation script will process your cloud-config.yaml file specified with the -c flag and place it onto disk. It will be installed to /var/lib/coreos-install/user_data and evaluated on every boot. Cloud-config is not the only supported format for this file — running a script is also available.
ディスクにインストールした後でも、discoveryのTOKENを変更したい場合は、/var/lib/coreos-install/user_data
を編集してrebootすれば反映してくれそうなのですが。。。
rebootで失敗
/var/lib/coreos-install/user_data
を編集してCOREOS_PRIVATE_IPV4
を記入後にrebootします。
残念ながら、reboot後にUnitの起動が失敗してしまいました。
このUnitファイルはみつからないので、まだ意味がわかりません。
CoreOS (beta) |
/run/systemd/system/etcd.service.d/20-cloudinit.conf
がなくなっています。
$ cat /run/systemd/system/etcd.service.d/20-cloudinit.conf |
/etc/environment
ファイルも生成されていません。
その代わり、/cloudinit-tempxxxx
のファイルが作成されるようになりました。でもempty。
COREOS_PUBLIC_IPV4= |
write_filesの書式が違っていた
Using Cloud-Configのページで書式を確認すると、write_files
の書き方を間違えていました。正しくは-name:
でなく-path:
です。
#cloud-config |
/var/lib/coreos-install/user_data
を編集してrebootします。
write_files: |
reboot後確認すると、/etc/environment
ファイルはできましたが、まだ値が入りません。
COREOS_PUBLIC_IPV4= |
手動でプライベートIPアドレスを指定
Update 2014-07-23
ifconfigでIPアドレスを確認します。
$ ifconfig ens32 | awk '/inet /{print $2}' |
確認したIPアドレスを記述します。
COREOS_PUBLIC_IPV4= |
rebootすると、fleetctlが使えるようになりました。
fleetctl list-machines |
discovery.etcd.io
にもノードが追加されるようになりました。
$ curl https://discovery.etcd.io/ed724cf0abd2d02abf985f57b53d6cf4 |
$public_ipv4 と $private_ipv4は、coreos-cloudinitが直接EC2のmetadataやOpenStackのconfig-driveから取得するように変わったようです。
IDCFクラウドではuser_dataが取得できないので、$public_ipv4 と $private_ipv4が空になっているようです。
This was intended but we should probably revise it if folks are depending on the old contents of /etc/environment. For EC2/OpenStack instances we moved the detection of $public_ipv4 and $private_ipv4 directly into coreos-cloudinit so that it would work gracefully with both EC2-style metadata services and config drive. The old /usr/share/oem/bin/coreos-setup-environment shipped with those images hung if no metadata service was available, breaking config drive based OpenStack systems.
教訓
ドキュメントは普通に全部読むこと。特にCoreOSのドキュメントは頻繁に更新されます。
issuesを読むこと。きっとだれか同じ状況で困ってます。
CoreOSの変更はアグレッシブ。ばさっと大きな変更をしてきます。