Kubernetesクラスターは、リソースの少ないエッジデバイスやミニPC上でも実行できるようになりました。その中でも、k0sは軽量なKubernetesディストリビューションで、少ないリソース使用量でKubernetesクラスターを構築することができます。このチュートリアルでは、4台のMiniPCを使用して、k0sクラスターを構築します。(MiniPCがない場合は、VMを使用して構築することもできます。)
対象は、LinuxやDocker、Kubernetesの基礎知識がある方です。
このチュートリアルは4章構成です。
1. Ubuntu server 20.04 LTSをインストールする
2. ネットワークの設定
3. Control plane nodeにk0sをデプロイする
4. Worker nodeにk0sをデプロイする
必要なデバイスは以下のとおりです。
- MiniPC 4台 (最低2台: マスターノード + ワーカーノード)
- Netowork スイッチ (4ポート以上)
- LANケーブル 4本
- キーボード + ディスプレイ
- USBフラッシュメモリー (4GB以上)
例として使用したMini PCのスペックは以下の通りです。
- 4 core CPU
- 4GB Memory
- 60GB Storage
- イーサネット用LANポート
- Wifi インターフェース
MiniPCがない場合は、同様のスペックの仮想環境上でも構築できます。
1. Ubuntu server 20.04 LTSをインストールする
4台のMini PC上にUbuntu Server 20.04 LTSをセットアップします。
hostnameは1台にmaster01、他のデバイスにはworker01, worker02など一意なhostnameを付けます。
VMを使用する場合も同様に、Ubuntu Server 20.04を4台のVMにインストールしてください。
1.1. ISOイメージファイルのダウンロード
ローカルのPC上から以下のリンクにアクセスし、Ubuntu Server 20.04 LTSのISOイメージを取得してください。(約1.2GB)
1.2 USBブータブルディスクの作成
ローカルのPC上にて、ダウンロードしたISOイメージを使用して、USBブータブルディスクを作成してください。
1.3 インストールの開始
MiniPCにUSBディスクを挿入し、キーボードを使用し、F2キーやF11キーなどを連打し、起動ディスクからインストールを開始します。 (キーはデバイスによって異なります。)
1.4 画面に従ってインストールを進めます。
この時点ではネットワークやWIFIの設定などは空白、または仮の設定で構いません。(後程、設定を行います。)
hostnameは1台にmaster01、他のデバイスにはworker01, worker02など一意なhostnameを付けます。
username, passwordはすべてのデバイス間で同じでもOKです。 例としてavinton
というユーザーを作成しました。 SSHはインストールしてOKです。
2. ネットワークの設定
デバイスがインターネットに接続できるように、またデバイス間通信ができるようにネットワークの設定を行います。
この手順はすべてのMini PCに対して共通です。
VMの場合は、管理コンソールよりネットワークの構成を行ってください。 インターネット接続とノード間の接続ができるようにインターフェースを構成してください。
ネットワークの設定は環境によって異なりますが、例では以下のように構成します。
イーサネットインターフェース
- master01: 192.168.2.100/24
- worker01: 192.168.2.101/24
- worker02: 192.168.2.102/24
- worker03: 192.168.2.103/24
Wifiインターフェースの設定は、ご使用のWifi環境で異なります。
環境に併せて設定してください。IPアドレスは固定しなくても大丈夫です。
2.1 netplanでnetworkの接続を構成
/etc/netplan/
以下に設定ファイル/etc/netplan/99-network-all.yaml
を作成します。
Wifiの設定項目は適宜変更してください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
network: version: 2 renderer: networkd ethernets: enp1s0: dhcp4: false addresses: - 192.168.2.100/24 nameservers: addresses: [192.168.2.1] routes: - to: default via: 192.168.2.1 metric: 50 wifis: wlp2s0b1: dhcp4: no dhcp6: no addresses: ... gateway4: ... nameservers: addresses: [...] access-points: "...": password: "..." |
1 |
sudo netplan --debug apply |
2.2 インターネットの疎通を確認
1 |
ping google.com |
2.3 パッケージの更新
1 |
sudo apt update && sudo apt upgrade -y |
2.4 再起動
1 |
sudo reboot |
3. Control plane nodeにk0sをデプロイする
ここからはコントロールプレインノードを設定していきます。
例では、master01
をコントロールプレインノードとして設定します。
3.1. k0sをインストールする
1 |
curl -sSLf https://get.k0s.sh | sudo K0S_VERSION=v1.22.2+k0s.1 sh |
3.2 設定ファイルを作成する
1 2 3 |
mkdir -p /etc/k0s k0s config create > k0s.yaml cp k0s.yaml /etc/k0s/k0s.yaml |
必要に応じて設定を更新してください。 こちらのページが参考になります。
3.3 k0sを起動する
1 |
sudo k0s install controller -c /etc/k0s/k0s.yaml --enable-worker --kubelet-extra-args="--node-ip=192.168.2.100 --address=0.0.0.0" |
1 |
sudo k0s start |
k0sの状態の確認を行ってください。
1 |
sudo systemctl status k0scontroller.service |
1 2 3 4 5 |
$ sudo k0s status Version: v1.22.2+k0s.1 Process ID: 691 Role: controller Workloads: false |
3.4 worker node用のtokenを発行する
1 |
sudo k0s token create --role=worker > token-worker01 |
1 2 3 4 |
$ ls -lt token-worker0* -rw-rw-r-- 1 avinton avinton 1753 May 11 06:49 token-worker03 -rw-rw-r-- 1 avinton avinton 1757 May 11 06:49 token-worker02 -rw-rw-r-- 1 avinton avinton 1753 May 11 06:49 token-worker01 |
生成したtokenを各ノードに配布します。例えば、
1 |
scp worker01 avinton@192.168.2.101:/home/avinton/ |
4. Worker nodeにk0sをデプロイする
配布されたtokenを使用して、各ノードをクラスターに追加します。
以下は各ワーカーノード上で行ってください。
例では、worker01
, worker02
, worker03
をコントロールプレインノードとして設定します。
4.1 k0sのインストール
1 |
curl -sSLf https://get.k0s.sh | sudo K0S_VERSION=v1.22.2+k0s.1 sh |
例えば、
1 |
sudo k0s install worker --token-file token-worker01 --kubelet-extra-args="--node-ip=192.168.2.101 --address=0.0.0.0" |
1 |
sudo k0s start |
4.2 k0sの状態を確認
1 2 3 4 5 |
$ sudo k0s status Version: v1.22.2+k0s.1 Process ID: 712 Role: worker Workloads: true |
完了したら上記の手順をすべてのワーカーノードに繰り返します。
4.3. クラスターの状態を確認
すべてのワーカーノードを追加したら、マスターノードからクラスター全体の様子を確認します。
1 2 3 4 5 |
$ kubectl get node NAME STATUS ROLES AGE VERSION worker01 Ready 45h v1.22.2+k0s worker02 Ready 45h v1.22.2+k0s worker03 Ready 45h v1.22.2+k0s |
1 2 3 4 5 6 7 8 9 10 11 12 13 |
$ kubectl get pods -n kube-system NAME READY STATUS RESTARTS AGE coredns-5c98d7d4d8-dv7g6 1/1 Running 0 6h26m konnectivity-agent-27cjf 1/1 Running 0 6h26m konnectivity-agent-6qk4d 1/1 Running 0 6h26m konnectivity-agent-pccj2 1/1 Running 0 6h25m kube-proxy-7wkbw 1/1 Running 0 6h26m kube-proxy-b7sbv 1/1 Running 0 6h26m kube-proxy-zwslm 1/1 Running 0 6h26m kube-router-48bgh 1/1 Running 0 6h26m kube-router-d4qj6 1/1 Running 0 6h26m kube-router-l8rj8 1/1 Running 0 6h26m metrics-server-6fbcd86f7b-gv7z5 1/1 Running 0 135m |
お疲れ様でした。これでk0sクラスターの構築が完了です。
次のタスクとしてKubernetes上にサンプルアプリケーションのデプロイに進んでください。
あなたも、Avintonでこのような最先端技術を習得し活用してみませんか?
社員の成長を導きながら、AIやビッグデータなどの最先端技術をプロジェクトに活用していくことが私たちのビジョンです。Avintonの充実した技術研修でスキルアップを図り、あなたのキャリア目標を一緒に達成しませんか?