kubernetes the hard way on PC (３．VM作成)

#初めに

「[kubernetes the hard way](https://github.com/kelseyhightower/kubernetes-the-hard-way) を PC でやってみる」の３回目、「VM作成」についてです。（ [目次](https://qiita.com/shimauma_Zzzzz/items/84ecf5c748ceafd05380#%E8%AA%AC%E6%98%8E%E8%A8%98%E4%BA%8B%E7%9B%AE%E6%AC%A1) ）
今回も、kubernetes the hard way をやるための準備として、 VM作成について記載します。
（よってまだ kubernetes the hard way の入り口にもたどり着いていません。。。）

前提として、 メディアの準備と GUI の利用準備があります。
メディアについては、 ubuntu (server) のメディア(ISOイメージ) をダウンロードし、ホストPC 上に配置してください。

GUIについては、　Windows 10 上に Xming を導入、設定、表示しています。
導入については以下のページが参考になります。

[Xming](https://mag.osdn.jp/09/10/14/0753240) -  https://mag.osdn.jp/09/10/14/0753240

※ただし、私自身は 上記URL の 図8 部分で "start no program" で設定しておき、その続きで以下の指定をしています。
- Xming フォルダ内の X0.host に接続したい IP ( ホストPC の IP ) を追記
- Xming 起動
- ssh でホスト PC にログイン後、 DISPLAY 変数を設定し、GUI を使うプログラムを起動
要は、ssh の X11 フォワーディングではなく、 X の直接接続をしているということです。
まぁ、ここは重要ではなく、VM が作れればそれでよいので、コンソール上から実施しても構いません。

この記事は、以下の作業を行うという内容です。
- virt-manager による VM作成
- ubuntu の導入（最低限）
- hosts の設定
- ipv6 の無効化
- nfs クライアントの導入

第2回と同様、 ipv6, nfs はほぼ趣味の問題なので必要であれば対応すればよいです。

図で言うと赤枠部分の作成になります。
（※図では k8smaster0 となっていますが、テンプレートとして別の名前、IP で作成しておき、 Clone します。）

![03_5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/310495/1dd4686d-8de0-26b6-9f23-03ed4080bf36.png)




#virt-manager による VM作成

ssh でホストPC にログイン後、 DISPLAY 変数を指定し、 virt-manager を起動します。
その際、日本語が文字化けするので、英語モードで起動しています。

```shell-session
[root@sakura ~]# export DISPLAY=192.168.199.108:0.0
[root@sakura ~]# LANG=C virt-manager
```

virt-manager が起動します。
![05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/310495/fc5c6292-b7f0-acc1-4244-e30c0aa4c14a.png)


File メニューから New virtual Machine を選択します。

![06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/310495/073e86d8-a043-6dfe-81b6-cae936a4c491.png)

インストールメディア選択画面では、　Local Install Media (ISO image or CD-ROM) を選択します。

![07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/310495/2f911ce1-2ffa-36a7-01fb-86f7fb12f4d1.png)

Browse ボタンを押します。

![08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/310495/da156282-8f32-c6f1-421b-f26b09c4abfc.png)

メディアの選択画面が表示されます。

![09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/310495/f0aa8a35-4910-ffe3-fb98-9e6f8276a8c4.png)

あらかじめホストPC 上に配置しておいた、 ubuntu20 の ISO イメージを選択します。

![10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/310495/079c4cdd-50c8-7afb-40fa-9f2eed45158f.png)

次の画面で、 OS のタイプを聞かれるため、 下部の検索 box に ubuntu と入力します。
すると、ポップアップで ubuntu の候補が出るため、最も近い Ubuntu 18.04 LTS を選択します。

![11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/310495/470fa30a-52b2-9b7b-5ee6-860d63c05937.png)

指定が完了すれば、 Forward ボタンを押します。

![12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/310495/8cf2c464-47f4-82f5-771c-82967a66e734.png)

Memory、 CPU 指定画面が表示されるため、指定します。
メモリは動きさえすれば少なくてもよいですが、 CPU は 2以上を指定してください。
（kubernetes の前提として 2論理CPU 以上が必要です。 kubeadm コマンドでセットアップする際などは Preflight Check でエラーになります)
指定後、 Forward ボタンを押します。

![13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/310495/8daca9e4-f5d7-575b-7aaf-e1b9fd131056.png)

ディスク容量を指定します。ここも、後から追加もできますので少なくてよいです。

![14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/310495/83ee23b4-a93a-c81f-da02-0639264f5923.png)

VM名を指定し、　Network Selection では、　ホストPC 上に作成したブリッジインターフェース (br0) を選択します。
選択後、Finish ボタンを押します。

![15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/310495/cbae0383-0354-3feb-dac8-f304e90d7b74.png)

カスタマイズ画面が表示されますので、必要であれば各項目を確認、修正し、Begin Installation ボタンを押します。

![16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/310495/ced010c9-32dc-9e7a-702b-021a47252613.png)

VMが作成され、起動されます。　

![17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/310495/a6af9b4f-3447-f47b-5033-09cced35a369.png)

![18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/310495/9ca1f6f1-85b5-4bb9-0ddb-4d8898c648f1.png)


#ubuntu20 の導入
(※画像は若干加工しているものがあります)

言語選択画面が表示されるため、 English を選択し、 Done を押します。（日本語は無いようです。。。）
![19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/310495/0dda4c81-f8a8-2d36-bdf6-bae16a68da83.png)

キーボードレイアウト選択画面では、　Layout 欄のドロップリストから Japanese を選択します。
variant は自動的に Japanese が選択されます。
その後、 Done を押します。

![20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/310495/ad2ea245-c675-6995-db5b-32d25d330b6b.png)

ネットワークの指定画面では、 enp0s1 に DHCP が指定されていますが、
固定にしますので、 Edit IPv4 を選択します。

![21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/310495/6015b40c-1c21-4f2e-b05a-36482e4adf8f.png)

固定にするため、 manual を選択します

![22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/310495/31306468-b624-2582-7723-8a4fcbd2ffef.png)

IPv4 の情報を設定し、save を押します。

![23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/310495/ffdc2ef9-32a9-2680-3727-c7354d817874.png)

Network Connection 画面に戻るため、指定された内容になっていることを確認し、　Done を押します。
![24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/310495/94056dfc-9ea5-6170-de2f-c79f13ca74e5.png)

Proxy 画面では、何も指定せずに Done を押します。
![25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/310495/b33a1783-59ed-a437-a66f-3069b0906e06.png)

ミラー指定画面では、デフォルトのままで Done を押します。
![26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/310495/7d1d0064-1504-38c2-45d4-9c09978f4535.png)

ストレージ設定画面では、　Use an entire disk が選択されていることを確認し、Done を押します。
（Custom で指定しても構いません)
 
![27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/310495/449edc07-de61-0647-6403-b5dfe7df170f.png)

FILE SYSTEM SUMMARY 画面が表示されるため、 Done を押します。
![28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/310495/be9f0e92-5e1a-8fc5-56cd-a3c6799c0a31.png)

ディスクの内容が削除されるという警告が出ますが、Continue を押します。
![29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/310495/3c1f7b11-bb38-9003-df36-32775b6a9e11.png)

Profile setup 画面では、ユーザー名、ホスト名、パスワードを指定し、Done を押します。
![30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/310495/6d22f2de-5f96-b730-2ad8-8c83df4814cc.png)

ssh setup 画面では、　Install OpenSSH Server にチェックを入れ、Done を押します。
![31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/310495/defc5811-2272-dcc1-2d94-4498b38092a2.png)

Featured Server Snaps 画面では、何も選択せずに、Done を押します。
![32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/310495/d502d763-ef68-7ffc-1ee3-6c0bcb8d738f.png)

Install が開始され、完了したら Reboot ボタンを押し、再起動します。（画像なし）
![33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/310495/b0926fc7-28b0-f1d0-4c98-a2b687b1767b.png)

作成したユーザーでログインできることを確認します。
![34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/310495/ac10609d-ff68-2a15-abb9-1c954f1eba6a.png)

以上で、最低限の ubuntu の導入が完了です。

#hosts の設定

作成したテンプレートから、 マスターノード、ワーカーノードを Clone していきますが、
共通の設定として名前解決を指定しておきます。今回は hosts ファイルに設定します。

```shell-session
192.168.199.200 k8smaster0 k8sapi
192.168.199.201 k8smaster1
192.168.199.202 k8smaster2

192.168.199.210 k8sworker0
192.168.199.211 k8sworker1
192.168.199.212 k8sworker2
```

ここで、 k8smaster0 に k8sapi とつけています。
これは、kube-apiserver のアクセス先として、IP や k8smaster0 ではなく、
k8sapi としておき、必要に応じて外部ロードバランサー等の IP に差し替えることにより
3台のmaster ノードの API サーバーを負荷分散で利用できるようにするための布石です。
ただ、今回、結局ロードバランサーまでは実施せず、 k8smaster0 上の API サーバーを使う形のままで終わりました。。。
（よってなくてもよいのですが、後々の作業で k8sapi を指定している部分があるため残しています）

#IPv6 無効化

さて趣味の IPv6 無効化ですが、 ubuntu 20 では　バグなのだと思いますが
sysctl コマンドを用いた無効化の設定では、再起動後に有効に戻ってしまうようです。
そのため、ブートローダー grub のレベルで無効化します。

まず、 /etc/default/grub を修正します。
GRUB_CMDLINE_LINUX_DEFAULT="ipv6.disable=1" を指定します。

```shell-session
# If you change this file, run 'update-grub' afterwards to update
# /boot/grub/grub.cfg.
# For full documentation of the options in this file, see:
#   info -f grub -n 'Simple configuration'

GRUB_DEFAULT=0
GRUB_TIMEOUT_STYLE=hidden
GRUB_TIMEOUT=0
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
#GRUB_CMDLINE_LINUX_DEFAULT="maybe-ubiquity"
GRUB_CMDLINE_LINUX_DEFAULT="ipv6.disable=1"
GRUB_CMDLINE_LINUX=""

... 以下略
```

その後、 grub 設定を update します。　(update-grub)

```shell-session
root@ubuntu20-2:/etc/default# update-grub
Sourcing file `/etc/default/grub'
Sourcing file `/etc/default/grub.d/init-select.cfg'
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-5.4.0-39-generic
Found initrd image: /boot/initrd.img-5.4.0-39-generic
done
root@ubuntu20-2:/etc/default#
```

再起動し、ログイン後、 ip コマンドで IPv6 が表示されないことを確認します。

```shell-session
root@ubuntu20-2:/etc/default# shutdown -r now
```

```shell-session
root@ubuntu20-2:~# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 52:54:00:a3:62:48 brd ff:ff:ff:ff:ff:ff
    inet 192.168.199.198/24 brd 192.168.199.255 scope global enp1s0
       valid_lft forever preferred_lft forever

```

#NFS クライアント導入

まぁ、、入れます。 apt コマンドで nfs-common を入れます。

```shell-session
root@ubuntu20-2:~# apt update && apt -y install nfs-common
Hit:1 http://jp.archive.ubuntu.com/ubuntu focal InRelease
Hit:2 http://jp.archive.ubuntu.com/ubuntu focal-updates InRelease

...以下略

```

今回はここまでとして、次回は Clone 作成を行います。


----
← [２．ホストPC設定](https://qiita.com/shimauma_Zzzzz/items/06cbbc74a5769fb1ef7e)
↑ [目次](https://qiita.com/shimauma_Zzzzz/items/84ecf5c748ceafd05380#%E8%AA%AC%E6%98%8E%E8%A8%98%E4%BA%8B%E7%9B%AE%E6%AC%A1)
→ [４．Clone 作成](https://qiita.com/shimauma_Zzzzz/items/533a31d9994856d21e3c)

----