7
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

毎度、ググっても出てこない小ネタを取り扱っております。
本記事は個人的な見解であり、筆者の所属するいかなる団体にも関係ございません。

0. はじめに

multipassから撤退しました。
後から私のmultipassの記事を消しておきますがUbuntuのmultipassを結構気に入ってたんですよ。コマンドラインからサクッとVMを作れるのが便利で、起動用のシェルスクリプトとか作ってCI/CDに組み込んだりして、便利に使ってました。
しかし、multipassでネットワークをブリッジにして仮想マシンを動かそうとするとmultipassからlxdに接続してmultipassコマンドからLXDを動かすんですが、それだと何とも不安定になってしまって。動いていたと思ってホストマシンを再起動したら動かなくなったり、もうイヤ。
ってことで、proxmoxへ転びました。手元でvmware esxiを動かせるようなマシンはないですし。

そこで、Proxmoxを使ってLXCコンテナでDockerコンテナも動くので、LXCコンテナでK3Sを動かしてみました。(ググるといくつか記事も出てくるので「ググっても出てこない」ということはないですね)

1. 環境

ホストマシン: 4X4 BOX-V1000M
Proxmox: Virtual Environment 7.4-3
ProxmoxのコンテナOSでK3SのホストOS: Ubuntu 22.04.2 LTS

2. Proxmoxホストを設定する

2-1. ブリッジフィルタリングがオフになっているか確認する

cat /proc/sys/net/bridge/bridge-nf-call-iptables

0ならOKです

2-2. スワップをオフにする

sysctl vm.swappiness=0
swapoff -a

3. IPフォワーディングを有効化

echo 'net.ipv4.ip_forward=1' >> /etc/sysctl.conf
sysctl --system

再起動は不要

2. Proxmox上でコンテナ(CT)を作る

2-1. コンテナ作成

非特権コンテナは外して「特権コンテナ」として動かします。
image.png

パスワードはちゃんと付けましょう。
CT ID(コンテナID)は覚えておく。後で使います。

2-2. テンプレート

テンプレートは、Ubuntu 22.04LTSを選択
image.png

2-3. ディスクサイズ

ディスクサイズはお好きにどうぞ
image.png

2-4. CPU数

CPU数もお好きにどうぞ
image.png

2-5. メモリーサイズ

メモリーは、K3Sと言えども8GBぐらいあると安心です(4GB程度でも動きます)
スワップは0にしましょう
image.png

2-6. ネットワーク

IPアドレスは静的でもDHCPでもいいですがK3SでIPアドレスが変わるのは良くないので、静的につけましょう

image.png

2-7. DNS

DNSも指定します
image.png

コンテナ(CT)を作ってもまだ起動しないでください。

3. コンテナ(CT)を動かさず、コンテナ(CT)の設定をProxmoxホスト側で行う

Proxmoxホスト側でシェルを開きます
/etc/pve/lxc配下のXXX.confファイルをviで開いて編集します。
XXXはコンテナIDが入ります。今回は、103だったので、/etc/pve/lxc/103.confファイルを編集します

cd /etc/pve/lxc/
vi 103.conf

image.png

viで開いたファイルの一番下に以下の4行を追加します

lxc.apparmor.profile: unconfined
lxc.cgroup.devices.allow: a
lxc.cap.drop:
lxc.mount.auto: "proc:rw sys:rw"

4. コンテナ(CT)を起動して、コンテナ(CT)の設定をProxmoxホスト側で行う

コンテナ(CT)を動かしてカーネルブート設定をProxmoxホストからコンテナ側にコピーします

Proxmoxホストのシェルで以下のコマンドを実行します

pct push <container id> /boot/config-$(uname -r) /boot/config-$(uname -r)

今回コンテナIDは103なので以下のようにしました

pct push 103 /boot/config-$(uname -r) /boot/config-$(uname -r)

can only push files to a running CTと出たらコンテナ(CT)が動いていないので起動してください。

5. コンテナ(CT)を起動して、コンテナ(CT)内で/dev/kmsgを作るサービスを設定する

Kubernetes(kubelet)では、/dev/kmsgへログを出力するのですが、コンテナ(CT)では存在しないので、/dev/consoleからシンボリックリンクを張ります。

/dev/kmsgがなければ、/dev/consoleへシンボリックリンクを張るスクリプトを作ります。

/usr/local/bin/conf-kmsg.sh
#!/bin/sh -e
if [ ! -e /dev/kmsg ]; then
    ln -s /dev/console /dev/kmsg
fi

mount --make-rshared /

これをsystemdでコンテナ(CT)起動時に呼び出されるようにします。

/etc/systemd/system/conf-kmsg.service
[Unit]
Description=Make sure /dev/kmsg exists

[Service]
Type=simple
RemainAfterExit=yes
ExecStart=/usr/local/bin/conf-kmsg.sh
TimeoutStartSec=0

[Install]
WantedBy=default.target

ファイルができたら、以下のコマンドで実行権限を付けてサービスを有効化します。

chmod +x /usr/local/bin/conf-kmsg.sh
systemctl daemon-reload
systemctl enable --now conf-kmsg

念のため、/dev/kmsgができているか確認します。

ls -la /dev/kmsg

image.png

問題なさそうです。

6. コンテナ(CT)にK3Sをインストールする

お待ちかねのK3Sです。

6-1. コンテナ(CT)内での下準備

root権限でずっと操作するのも何なので、アカウントを追加してターミナルで操作します。
ついでにcurlコマンドも入れておきます。

Proxmoxのコンテナ(CT)内のシェルでuserというユーザーを追加し、sudoグループへ追加

adduser user
usermod -aG sudo user

実行結果
image.png

curlコマンドも追加しておきます

apt update
apt install -y curl

以降は、ubuntuに作ったuserユーザーで操作します。

6-2. k3supをインストール

k3supバイナリをダウンロード

curl -sLS https://get.k3sup.dev | sh

k3supファイルを/usr/local/binへ配置

sudo cp k3sup /usr/local/bin/k3sup

k3sup versionでバージョン確認

k3sup version

image.png

6-3. k3sup installでK3Sをインストール

k3sup install --local --user=$USER --local-path ./kubeconfig --k3s-version=v1.26.6+k3s1

6-4. K3Sデプロイ状況確認

journalctlコマンドでK3Sのログを見ます

sudo journalctl -u k3s -f

以下のようなメッセージが出たらセットアップ終了です
image.png

7. K3S動作確認

以下のコマンドで動作を確認します

# Test your cluster with:
export KUBECONFIG=/home/user/kubeconfig
kubectl config use-context default
kubectl get node -o wide

以下のようになれば動いています。
image.png

参考文献

k3s in LXC on Proxmox
https://gist.github.com/triangletodd/02f595cd4c0dc9aac5f7763ca2264185?permalink_comment_id=3998596

Rancher K3s: Kubernetes on Proxmox Containers | Garrett Mills
https://garrettmills.dev/blog/2022/04/18/Rancher-K3s-Kubernetes-on-Proxmox-Container/

ProxmoxVEのLXCでKubernetesクラスタを構築する。
https://zenn.dev/ddpn08/articles/d85176619f3fdd#general

7
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?