RancherOSを試してみた

## はじめに
手軽にコンテナを運用するために、CentOSのKVM上にRancherOSをインストールしてみました。

## 謝辞
作業にあたって以下のサイトを参考にさせていただきました。
ありがとうございます☺
[【Docker】RancherOSで本格的な自宅サーバーを構築しよう(2) ~ rancher-serverをインストール ~](https://qiita.com/okamu_/items/305e0af4545901d44a94)
[KVMゲストとしてRancherOSをインストール](https://blog.1q77.com/2017/05/installing-rancheros-on-kvm/)
[Rancherで作る お手軽コンテナ運用環境!! ～ Kubenetes牧場でコンテナ牛を飼おう！～](https://www.slideshare.net/tsukaman/rancher-kubenetes)
[RancherOS で インストール後パスワードでログインする方法](https://qiita.com/FoxBoxsnet/items/127354c03b55a161a35b)

## 前提
* CentOS上にKVMが動作していること
* OSバージョン：CentOS Linux release 7.6.1810

## 目標
RancherOSをローカルストレージから起動できるようにする。

## 構築手順

### 0.イメージファイル作成
検証なので10Gで作成しました。

```
$ sudo qemu-img create -f qcow2 /var/lib/libvirt/images/rancher.img 10G
Formatting '/var/lib/libvirt/images/rancher.img', 
fmt=qcow2 size=10737418240 encryption=off cluster_size=65536 lazy_refcounts=off 
```

### 1.ISOをダウンロードする

```
$ cd /var/iso/rancheros
$ sudo wget https://releases.rancher.com/os/latest/rancheros.iso
```

### 2.ISOから起動
```
# virt-install \
  --name rancher \
  --vcpus 2 \
  --cpu host \
  --memory 2048,maxmemory=4096 \
  --os-variant virtio26 \
  --cdrom /var/iso/rancheros/rancheros.iso \
  --network network=default,model=virtio \
  --disk /var/lib/libvirt/images/rancher.img \
  --graphics none
```
上記コマンドを実行後、ずらーっとコンソールにログが流れます。

```
               ,        , ______                 _                 _____ _____TM
  ,------------|'------'| | ___ \               | |               /  _  /  ___|
 / .           '-'    |-  | |_/ /__ _ _ __   ___| |__   ___ _ __  | | | \ '--.
 \/|             |    |   |    // _' | '_ \ / __| '_ \ / _ \ '__' | | | |'--. \
   |   .________.'----'   | |\ \ (_| | | | | (__| | | |  __/ |    | \_/ /\__/ /
   |   |        |   |     \_| \_\__,_|_| |_|\___|_| |_|\___|_|     \___/\____/
   \___/        \___/     RancherOS amd64 4.14.85-rancher

         RancherOS v1.5.1  ttyS0

Autologin default
```
無事牛さんが現れました🐄

### 3.Rancherユーザのパスワード設定
SSH公開鍵を転送するためにパスワードを設定します。

```
$ sudo passwd rancher
[任意のパスワード]
```

### 4.SSH接続用の鍵を配置
以下、ローカルで作業します。

```
$ ssh-keygen -t ed25519
$ cd ~/.ssh/
$ cp id_ed25519.pub cloud_config.yml
$ vim cloud-config.yml 
$ cat cloud-config.yml 
#cloud-config
ssh_authorized_keys:
  - ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBL1uzHCLiBvuCDcVEzDdh8VQxvn2IDc0VWV/r8iURyF [ユーザ名]@localhost.localdomain
hostname: rancher
$ scp ./cloud-config.yml rancher@192.168.122.74:~
```

RancherOS上で転送したファイルのフォーマットチェック。

```
$ ls
cloud-config.yml
$ sudo ros config validate -i cloud-config.yml
```
何も表示されなければOKです。

### 5.ローカルストレージにインストール
[こちら](https://qiita.com/FoxBoxsnet/items/127354c03b55a161a35b)の記事にある通り、インストールコマンド実行時にパスワードを設定します。
4.までの手順でSSH接続は可能ですが、何らかの理由でSSH接続できなくなった場合、**詰む**ので確実に設定します。

```
$ sudo ros install -c cloud-config.yml -d /dev/vda --append "rancher.password=rancher"
INFO[0000] No install type specified...defaulting to generic
Installing from rancher/os:v1.5.1
Continue [y/N]: y
INFO[0002] start !isoinstallerloaded
INFO[0002] trying to load /bootiso/rancheros/installer.tar.gz
503e53e365f3: Loading layer  5.793MB/5.793MB
be4565044bd7: Loading layer   17.1MB/17.1MB
aba473c857a1: Loading layer   5.12kB/5.12kB
5832a0a1723a: Loading layer  13.64MB/13.64MB
740d67c0ae68: Loading layer  1.645MB/1.645MB
0617e3efc463: Loading layer  1.536kB/1.536kB
0b53db7286a2: Loading layer   2.56kB/2.56kB
417d4c7a93a5: Loading layer  3.072kB/3.072kB
Loaded image: rancher/os-installer:latest
INFO[0004] Loaded images from /bootiso/rancheros/installer.tar.gz
INFO[0004] starting installer container for rancher/os-installer:latest (new)
Installing from rancher/os-installer:latest
mke2fs 1.44.5 (15-Dec-2018)
64-bit filesystem support is not enabled.  The larger fields afforded by this feature enable full-strength checksumming.  Pass -O 64bit to rectify.
Creating filesystem with 2620928 4k blocks and 2621440 inodes
Filesystem UUID: 25599e4f-cab9-4c77-9bb3-9dfd32ee8bbc
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632

Allocating group tables: done
Writing inode tables: done
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done

Continue with reboot [y/N]: y
INFO[0020] Rebooting
INFO[0020] Setting reboot timeout to 60 (rancher.shutdown_timeout set to 60)
.....^[            ] reboot:info: Setting reboot timeout to 60 (rancher.shutdown_timeout set to 60)
.=.[            ] reboot:info: Stopping /docker : b9b4c6b7b7d9
............D...........[            ] reboot:info: Stopping /ntp : 3799c8b57b90
..@...[            ] reboot:info: Stopping /network : 41f0c72fe2d7
..<..[            ] reboot:info: Stopping /udev : f04a912c1409
..C..[            ] reboot:info: Stopping /system-cron : f540a3bfb619
..=..[            ] reboot:info: Stopping /acpid : fe95cdde9d2a
...?...[            ] reboot:info: Stopping /syslog : 56def79881a9
..H.[            ] reboot:info: Console Stopping [/console] : 7fa626960b96
[  876.639035] reboot: Restarting system

仮想マシンの作成が完了しました。
ゲストを再起動しています。
```

### 6.接続確認
ホストOS（CentOS）からSSH接続をしてみます。

```
$ ssh rancher@192.168.122.74
$ hostname
rancher
```
無事接続できました😃

## ハマったポイント
### 手順「5.ローカルストレージにインストール」での、"-d" の指定
ISOイメージから起動したRancherOS上で、 df コマンドを実行しても、"/dev/sda" 、 "/dev/vda"は存在しません。

```
$ sudo df -h
Filesystem                Size      Used Available Use% Mounted on
overlay                 977.3M    203.2M    774.1M  21% /
tmpfs                     1.9G         0      1.9G   0% /dev
tmpfs                   949.8M         0    949.8M   0% /sys/fs/cgroup
tmpfs                   978.8M         0    978.8M   0% /mnt
tmpfs                   977.8M         0    977.8M   0% /media
none                      1.4G    752.0K      1.4G   0% /run
none                      1.4G    752.0K      1.4G   0% /var/run
devtmpfs                  1.9G         0      1.9G   0% /host/dev
shm                      64.0M         0     64.0M   0% /host/dev/shm
tmpfs                   977.3M    203.2M    774.1M  21% /etc/hostname
shm                      64.0M         0     64.0M   0% /dev/shm
devtmpfs                  1.9G         0      1.9G   0% /dev
shm                      64.0M         0     64.0M   0% /dev/shm
```

しかし、 /dev ディレクトリ以下にはしっかり vda が存在します。

```
$ ls /dev | grep *da
vda
```
初歩的なミスですが、備忘のために記載しておきます・・。

手順や認識に不備等あれば、ご指摘お願いします！