k3os REAME 読んでみた

## はじめに

[前回](https://qiita.com/t_ume/items/2fde5ebeee404b8c281c)は簡単に k3os の導入を行いました。

今回は k3os - github の README を軽く読んでみたのでまとめました。
**[原文](https://github.com/rancher/k3os/blob/master/README.md)**
※2019/06/08 時点の README を参照していますので、いずれ更新はされていくと思います

## システム要件
**Memory**
ライブインストール（ISOからの起動）：1GB
ローカルディスク - インストール：512MB
※最低限のメモリ使用量であり、実際にノードでコンテナを起動する場合は要件に応じて増やす必要があります
**Disk**
ローカルディスク - インストール：2GB

## ファイルシステム
起動後のディレクトリ構成です。

```
/etc - ephemeral
⇒ 再起動後に元に戻るため、変更しても一時的です
⇒ 起動時に設定変更が適用されるために config.yaml を使った方法があります(後述)

/usr - read-only (except /usr/local is writable and persistent)
⇒ 読み取り専用です
⇒ /usr/local のみ書き込み可能で、永続化(再起動しても元に戻らない)されます
⇒ /usr の変更は k3os のバージョン変更をする必要があります

/k3os - system files
⇒ 起動時のコア OS ファイルシステムが格納されています
⇒ k3os / k3s / Linuxカーネルの各 squashfs イメージが格納されています

/home - persistent
/var - persistent
/opt - persistent
/usr/local - persistent
⇒永続可能(再起動しても変更が元に戻らない)なディレクトリです。
```

## ディストリビューション
ベースディストリビューションは alpine です。
カーネルソースは Ubuntsu 18.04LTS が使われています。

```
$ cat /etc/os-release
NAME="k3OS"
VERSION="k3OS v0.2.0"
ID=k3os
ID_LIKE=alpine
PRETTY_NAME="k3OS v0.2.0"
VERSION_ID="v0.2.0"
HOME_URL="https://k3os.io/"
SUPPORT_URL="https://k3os.io/"
BUG_REPORT_URL="https://github.com/rancher/k3os/issues"
ISO_URL="https://github.com/rancher/k3os/releases/download/v0.2.0/k3os-amd64.iso"
```

## Configuration

config.yaml に設定を記載することで起動時に設定が自動で反映されます。
起動時に用いられる設定ファイルは以下の3種類です。

```
/k3os/system/config.yaml
⇒ システムのインストール用に予約された設定ファイルです
⇒ ブート時に必要な情報、設定が含まれています
⇒ 稼働中のシステムでは変更しないでください

/var/lib/rancher/k3os/config.yaml
/var/lib/rancher/k3os/config.d/*
⇒ config.yaml を編集して起動時のOS設定をすることができます
```

実際に以下の設定ファイルを使って説明します。
※sudo os-config でローカルディスクにインストールした k3os で実施します。
※設定ファイルは `/var/lib/rancher/k3os/config.yaml` に作成します
※設定ファイルは rancher ユーザではファイルが作成できないディレクトリの為、sudo を使って vim 等で作成してください

```yaml
write_files:
- content: |
    [service_eth0]
    Type = ethernet
    IPv4 = 192.168.XX.XX/255.255.255.0/192.168.XX.1
    IPv6 = off
    MAC = XX:XX:XX:XX:XX:XX　※MACは事前に "ip a show dev eth0" 等で確認
    Nameservers = 8.8.8.8,8.8.4.4
    Timeservers = ntp1.jst.mfeed.ad.jp,ntp2.jst.mfeed.ad.jp,ntp3.jst.mfeed.ad.jp
  owner: root:root
  path: /var/lib/connman/eth0.config
  permissions: '0600'
hostname: k3os-server01
```

* 今回はホスト名とネットワーク設定を行っています。
* DNS / ntp はこの yaml でも定義できるのですが、反映されなかったため推奨された connman を使った方法にしています
* 他の設定項目は原文を確認してください

### hostname
ホスト名の指定です。指定を削除すると元のランダムな連番が振られるようになります。

### write_files
ファイルの作成を行うことができます。
永続化領域に作成されたファイルは、記載を削除されても残ります。
※`/var/lib/rancher/k3s/server/manifests/` 配下に manifest ファイルを配置することで起動時にコンテナをデプロイすることも出来るそうです。

今回は k3os の起動時のネットワーク設定で推奨されている connmann の設定ファイルを作成しています。
connmann については[こちら](https://manpages.debian.org/testing/connman/connman-service.config.5.en.html)の man を参照してください。

設定ファイルを置きなおして再起動すると IP アドレス / DNS サーバ / hostname が変更されています。
※ntp サーバの設定が見つからず・・・

```
k3os-server01 [~]$ ip a
・・・
2: eth0: <BROADCAST,MULTICAST,DYNAMIC,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether XX:XX:XX:XX:XX:XX brd ff:ff:ff:ff:ff:ff
    inet 192.168.xx.xx/24 brd 192.168.xx.xx scope global eth0
・・・

k3os-server01 [~]$ cat /etc/resolv.conf
# Generated by Connection Manager
nameserver 8.8.8.8
nameserver 8.8.4.4

k3os-server01 [~]$ sudo cat /var/lib/connman/eth0.config
[service_eth0]
Type = ethernet
IPv4 = 192.168.xx.xx/255.255.255.0/192.168.10.1
IPv6 = off
MAC = XX:XX:XX:XX:XX:XX
Nameservers = 8.8.8.8,8.8.4.4
Timeservers = ntp1.jst.mfeed.ad.jp,ntp2.jst.mfeed.ad.jp,ntp3.jst.mfeed.ad.jp
```

今回は README からの情報収集と OS の設定の Tips でした。
次回こそクラスタを。