0. 初めに
k3s構築する前まではProxmoxのLXC(コンテナ)を各サービスごと作成して運用していたが運用していたサービスの数と規模が大きくなるにつれて手動での構築に疲れたので導入することにした。
LXC(コンテナ)上でk3sの構築が可能だが、追加の作業が必要となるので今回はvmで建てることにした。
VMを使うとLXCよりはリソースが多くなってしまうが、OSをUbuntu ServerではなくDebianを使うとストレージとメモリを削減することができる。
VMのセットアップには便利なCloud-initを利用する
1. 環境
- ホスト:
- cpu: intel i3-10105
- メモリ: 32GB
- ストレージ: 500GB
- OS: Proxmox VE 8
2. Debian 12 Cloud initのテンプレートvmの作成
1. Debian Cloud Imageのダウンロード
最新のDebian 12のQCOW2フォーマットをwgetでダウンロードします。
wget https://cloud.debian.org/images/cloud/bookworm/latest/debian-12-generic-amd64.qcow2
3. ProxmoxでVMを作成
VMIDを9000として作成。
qm create 9000 --name debian12-cloudinit --net0 virtio,bridge=vmbr0 --scsihw virtio-scsi-pci --machine q35
4. ディスクとメモリの構成
ダウンロードしたQCOW2のイメージをインポート、その後8GBまでサイズを拡大します。
qm set 9000 --scsi0 local-lvm:0,discard=on,ssd=1,format=qcow2,import-from=/root/debian-12-generic-amd64.qcow2
qm disk resize 9000 scsi0 8G
5. Boot Orderの設定
インポートしたディスクをbootするために変更。
qm set 9000 --boot order=scsi0
6. CPUとメモリリソースの構成
仮想コアを2コア、メモリを2GBにする。
qm set 9000 --cpu host --cores 2 --memory 2048
7. BIOSとEFIの構成
BIOSではovmfを利用し、4MBほどのEFIディスクを作成。
qm set 9000 --bios ovmf --efidisk0 local-lvm:1,format=qcow2,efitype=4m,pre-enrolled-keys=1
8. Cloud-initの構成
Cloud-initのドライブを作成。
qm set 9000 --ide2 local-lvm:cloudinit
10. シリアルコンソールの設定
Hardwareの項目で、新しくシリアルポートを追加して、DisplayをSerial terminalに変更しても良い。
9. テンプレートとして保存
VMをテンプレートにする。
qm template 9000
10. VMをクローンしてセットアップ
テンプレートを使ってVMを作成する。
今回はk3s-masterとk3s-node1を作成した。
WebUI上にあるテンプレートを右クリックしてクローン、このときにFull Cloneで作成する。
VM IDとNameは適当に変更。
作成したら、cpu, メモリ, Cloud-Initなどの項目を変更する、Cloud-Initではipを固定し、後に利用するsshの公開鍵も設定しておく。
2. k3sのセットアップ
とりあえず、すべてのVMでパッケージの更新とアップグレードを行う。
apt update; apt upgrade -y
マスターと各ノードのipアドレスを解決するために/etc/hostsを変更する。
nano /etc/hosts
追記
192.168.1.1
等のipは環境に合った値に変更。
+ 192.168.1.1 k3s-master
+ 192.168.1.2 k3s-node1
マスターのセットアップ
k3sのインストールはk8sと比べるととても簡単
curl -sfL https://get.k3s.io | sh -
セットアップが終わったらノードを追加するためのtokenを確認しておく。
cat /var/lib/rancher/k3s/server/node-token
出力された文字列を後に使用するのでメモ。
ノードのセットアップ
k3S_TOKEN
を先程のtokenに変更。
curl -sfL https://get.k3s.io | K3S_URL=https://k3s-master:6443 K3S_TOKEN=tokentokentoken sh -
ノードが追加されたかマスターで確認する
# sudo k3s kubectl get node
NAME STATUS ROLES AGE VERSION
k3s-master Ready control-plane,master 1m v1.30.6+k3s1
k3s-node1 Ready <none> 1m v1.30.6+k3s1
ノードが追加されてたら構築終了です。