【CoreOS】cloud-config解説〜インストール

# CoreOSのcloud-config解説〜インストール


今回はcloud-configの各セクションの解説〜インストール・再設定までをしていきたいと思います。

cloud-config.ymlとは・・・

CoreOSインストール及び設定ファイルを変更する際に必要な基本設定を記述した設定ファイルとなります。

主に取り扱うのがサーバーの環境変数、NIC/IPの設定、etcdクラスタ設定、Unit(systemd)起動設定などが可能となっています。

CoreOSの本体設定ファイルは/var/lib/coreos-install/user_dataにymlデータとして格納されており、CoreOS起動時に「/usr/bin/coreos-cloudinit」が呼び出され

>*OEM版提供は https://coreos.com/os/docs/latest/notes-for-distributors.html に記載されているOSインストールイメージを各種クラウド、VM向けにカスタマイズされた設定となります。
そのため、user_dataの保持位置が/usr/bin/coreos-cloudinitに記載されている oem版かどうかの振り分けで読み込みファイルが指定されています*

では早速各セクションへ

***

## cloud-config

冒頭1行目はかならず#cloud-config と明示的に記載してください。
インストール時にパースエラーが表示されます

```coreos:top
#cloud-config
```

## write_files及びhostname

環境変数の設定やインストール時にsystemdのconfig設定、systemdのファイルを生成することが可能なセクションとなっております。
write filesとある通り、実体のあるファイルを書き込みます。

```wirte_files:例

hostname: coreos-dev #/etc/hostnameに書き込まれる値です

write_files:
- path: /etc/environment #環境変数への書き込み
  permissions: 0644 #パーミッションの設定
  content: | #パイプを入れることで改行を保持
    COREOS_PUBLIC_IPV4=192.168.0.xx #環境変数で呼び出したいサービスIPの指定
    COREOS_PRIVATE_IPV4=192.168.0.xx #バックヤードIPの指定

- path: /etc/skel/.bash_profile #user作成時、スケルトンの設定
  permissions: 0644
  content: |
    [[ -f ~/.bashrc ]] && . ~/.bashrc
    alias ll='ls -la --color=auto'

```

上記の通り、自分の設定したい項目が可能になります。
.vimrcや~/.git/configなどユーザーごとに書き込み可能です。

***

## coreos:

coreos:セクションはOSの自動アップデート、Units(systemd)の設定を行う重要な要素となります。

```coreos:例
coreos:
  update:
    reboot-strategy: 'off' #OSのアップデート時に自動起動するか
  units: #各種unitのサービス起動方法 systemctl由来の設定となります
  - name: etcd2.service
    command: start
  - name: fleet.service
    command: start
  - name: docker.service
    command: start
  - name: timezone.service
    command: start
  - name: 10-static.network
    runtime: false
    content: |
      [Match]
      Name=enp0s3 #NICの名称を指定

      [Network]
      Address=192.168.0.xx/24 #IPアドレスの指定及びサブネットマスク
      Gateway=192.168.0.1 #Gatewayの指定
      DNS=8.8.8.8 #DNS primaryの指定
      DNS=8.8.4.4 #DNS secondaryの指定

ssh_authorized_keys:
- ssh-rsa # coreユーザーに持たせる公開鍵の指定
```

> *NICの指定はMacadressでもMatch対象にすることが可能です


***

## users:

```coreos:users
- name: coreuser
  passwd: $1$VIyj3wZe$HVVOEAc/H6a6YZGKCBWSD/ # パスワード認証。openssl passwdコマンドを叩いて実行した結果を貼り付け
  groups: #所属するgroupの指定
  - sudo
  - docker
  ssh-authorized-keys:
  - ssh-rsa #coreuserに持たせる公開鍵

```

簡単ですがcloud-config.ymlの作成は以上となります。
各セクションで作ったものは以下の形になります。

```coreos:cloud-config.yml
#cloud-config

hostname: coreos-dev

write_files:
- path: /etc/environment
  permissions: 0644
  content: |
    COREOS_PUBLIC_IPV4=192.168.0.xx
    COREOS_PRIVATE_IPV4=192.168.0.xx

- path: /etc/skel/.bash_profile
  permissions: 0644
  content: |
    [[ -f ~/.bashrc ]] && . ~/.bashrc
    alias ll='ls -la --color=auto'

coreos:
  update:
    reboot-strategy: 'off'
  units:
  - name: etcd2.service
    command: start
  - name: fleet.service
    command: start
  - name: docker.service
    command: start
  - name: timezone.service
    command: start
  - name: 10-static.network
    runtime: false
    content: |
      [Match]
      Name=enp0s3 #NICの名称を指定

      [Network]
      Address=192.168.0.xx/24 #IPアドレスの指定
      Gateway=192.168.0.1 #Gatewayの指定
      DNS=8.8.8.8 #DNS primaryの指定
      DNS=8.8.4.4 #DNS secondaryの指定

ssh_authorized_keys:
- ssh-rsa # coreユーザーに持たせる公開鍵の指定

- name: coreuser
  passwd: $1$VIyj3wZe$HVVOEAc/H6a6YZGKCBWSD/ # パスワード認証。openssl passwdコマンドを叩いて実行した結果を貼り付け
  groups: #所属するgroupの指定
  - sudo
  - docker
  ssh-authorized-keys:
  - ssh-rsa #coreuserに持たせる公開鍵
```

## 実際のインストール・編集コマンド

```shell-session
# cloud-configのシンタックスチェック
sudo coreos-cloudinit -validate=true -from-file=./cloud-config.yml

# 初回インストールの場合 デバイスはご自身の環境に合わせてください
sudo coreos-install -d /dev/sda -C stable -c ./cloud-config.yml
sudo reboot

# cloud-configの再読み込み　おまじないでuser_dataにコピー
sudo coreos-cloudinit -from-file=./cloud-config.yml
sudo cp cloud-config.yml /var/lib/coreos-install/user_data
sudo reboot

```

設定ファイルの解説〜インストールは以上です。

次回は今回端折った、etcd2の細かい設定記述について踏み込んでいきたいと思います。


参考：
[Using Cloud-Config](https://coreos.com/os/docs/latest/cloud-config.html)
[Notes for Distributors](https://coreos.com/os/docs/latest/notes-for-distributors.html)

前回記事ご紹介：

[Mac + Virtualbox + CoreOS + etcd2 + fleet の基本設定(1)](http://qiita.com/xshsaku/items/5be3837c39bb8c9bd4e7)
[Mac + Virtualbox + CoreOS + etcd2 + fleet の基本設定(2)](http://qiita.com/xshsaku/items/a5b57fafa0b41740bd7f)
[Mac + Virtualbox + CoreOS + etcd2 + fleet の基本設定(完)](http://qiita.com/xshsaku/items/3b1c92a60f3d7e401061)