kubernetes the hard way on PC (3.VM作成)


初めに

kubernetes the hard way を PC でやってみる」の3回目、「VM作成」についてです。( 目次
今回も、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

※ただし、私自身は 上記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 します。)

virt-manager による VM作成

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

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

virt-manager が起動します。

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

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

Browse ボタンを押します。

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

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

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

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

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

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

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

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

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

ubuntu20 の導入

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

言語選択画面が表示されるため、 English を選択し、 Done を押します。(日本語は無いようです。。。)

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

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

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

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

Network Connection 画面に戻るため、指定された内容になっていることを確認し、 Done を押します。

Proxy 画面では、何も指定せずに Done を押します。

ミラー指定画面では、デフォルトのままで Done を押します。

ストレージ設定画面では、 Use an entire disk が選択されていることを確認し、Done を押します。
(Custom で指定しても構いません)

FILE SYSTEM SUMMARY 画面が表示されるため、 Done を押します。

ディスクの内容が削除されるという警告が出ますが、Continue を押します。

Profile setup 画面では、ユーザー名、ホスト名、パスワードを指定し、Done を押します。

ssh setup 画面では、 Install OpenSSH Server にチェックを入れ、Done を押します。

Featured Server Snaps 画面では、何も選択せずに、Done を押します。

Install が開始され、完了したら Reboot ボタンを押し、再起動します。(画像なし)

作成したユーザーでログインできることを確認します。

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

hosts の設定

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

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" を指定します。

# 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)

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 が表示されないことを確認します。

root@ubuntu20-2:/etc/default# shutdown -r now
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 を入れます。

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 作成を行います。


2.ホストPC設定
目次
4.Clone 作成