Fedora ServerにK3sをインストール:Home Lab向けの「コスパ最強」Kubernetesクラスター構築

Fedora tutorial - IT technology blog
Fedora tutorial - IT technology blog

なぜK3sとFedora Serverの組み合わせがおすすめなのか?

半年間、部屋の隅に置いた古いFedora ServerでK3sをいじってみて気づいたことがあります。それは、Kubernetesを学ぶために高価なサーバー群は必要ないということです。クラウドに高額な料金を払いたくない、あるいはコントロールプレーンがRAMを使い果たすのを見たくないという方のサイドプロジェクトには、K3sが救世主となります。

K3sは, Rancher Labsが開発したKubernetesの軽量版です。不要なクラウドドライバーを削ぎ落とし、すべてを100MB未満の単一バイナリにパッケージ化しています。オリジナルのK8sが「起動しているだけ」で2GB近くのRAMを消費するのに対し、K3sはわずか512MB程度で安定して動作します。

Fedora Serverについては、私が2年以上愛用しているディストリビューションです。最新のKernelを提供し、Btrfsを非常にうまくサポートしており、SELinuxによる強力なセキュリティシステムを備えています。最新のディストリビューションとK3sのような最適化されたツールの組み合わせは、エンジニアにとって非常にスムーズな体験をもたらしてくれます。

システム要件

Fedora Server(最新のバージョン39または40)が必要です。システムが快適に動作するために、少なくとも1 vCPUと1GBのRAMを確保してください。

1. システムの更新

パッケージの競合を避けるため、この手順をスキップしないでください:

sudo dnf update -y

2. スマートなファイアウォール設定

Fedoraはデフォルトでほとんどのポートをブロックしています。スマートなファイアウォール設定を行い、必要なポートだけを開放します。K3sには、APIサーバー用のポート6443と、ネットワークプラグイン用のいくつかのポートが必要です:

# APIサーバーとKubeletのポートを開放
sudo firewall-cmd --permanent --add-port=6443/tcp 
sudo firewall-cmd --permanent --add-port=10250/tcp

# Flannel VXLAN(デフォルト)のポートを開放
sudo firewall-cmd --permanent --add-port=8472/udp

# 設定を反映
sudo firewall-cmd --reload

3. SELinuxの適切な処理

多くのガイドではSELinuxを無効にするよう勧めていますが、私はお勧めしません。K3sがシステムにブロックされず安全に動作するように、専用のポリシーをインストールしましょう:

sudo dnf install -y container-selinux selinux-policy-base
sudo dnf install -y https://rpm.rancher.io/k3s/stable/common/centos/7/noarch/k3s-selinux-1.5-1.el7.noarch.rpm

あっという間にK3sをインストール

K3sのインストールは非常に簡単です。Rancherが提供するスクリプトを実行するだけで、システムを自動的に認識してすべてを構成してくれます:

curl -sfL https://get.k3s.io | sh -

スクリプトがバイナリをダウンロードし、systemdサービスを設定するのにかかる時間は約60秒です。実行後、クラスターが「生きている」か確認しましょう:

sudo systemctl status k3s

ステータスが緑色の active (running) であれば、おめでとうございます。クラスターの準備は完了です。

一般ユーザーのアクセス権限設定

デフォルトでは k3s.yaml ファイルはrootユーザーしか読み取れません。sudo なしで一般ユーザーから kubectl コマンドを叩けるように、以下のコマンドを実行します:

mkdir ~/.kube
sudo cp /etc/rancher/k3s/k3s.yaml ~/.kube/config
sudo chown $USER:$USER ~/.kube/config
chmod 600 ~/.kube/config
echo "export KUBECONFIG=~/.kube/config" >> ~/.bashrc
source ~/.bashrc

では、ノードを確認してみましょう:kubectl get nodes。FedoraノードがReady状態になっているはずです。

実際のアプリケーションをデプロイしてみる

クラスターのオーケストレーション能力を確認するために、Nginxウェブサーバーをデプロイしてみましょう。K3sにはTraefikがIngress Controllerとして標準搭載されているため、アプリケーションをインターネットに公開するのが非常に簡単です。

リソース制限を明示した nginx-demo.yaml ファイルを作成します(ベストプラクティス):

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-app
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:alpine
        resources:
          limits:
            memory: "128Mi"
            cpu: "200m"
        ports:
        - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: nginx-svc
spec:
  selector:
    app: nginx
  ports:
    - port: 80
      targetPort: 80

コマンドでデプロイします:kubectl apply -f nginx-demo.yaml。数秒後、2つのNginx Podが軽快に動作し始めます。

6ヶ月間の運用で得た実践的ノウハウ

小規模なクラスターの管理でも、システムが途中で「固まる」のを防ぐためのコツがあります:

  • Swapを忘れない: Fedora ServerはzRAMを使用します。しかし、多くのアプリを動かす場合は、Out of Memory (OOM) を避けるためにディスク上に1〜2GBの追加のスワップファイルを作成することをお勧めします。
  • K9sを活用する: これは私にとっての救世主的なツールです。長いkubectlコマンドを打つ代わりに、K9sは直感的なターミナルUIを提供し、ログの確認やPodの管理を5倍速くしてくれます。
  • アップデート: K3sをアップグレードしたい時は、最初のインストールスクリプトを再実行するだけです。システムは実行中のアプリを中断することなく、バイナリを自動的に更新します。

まとめ

Fedora Server上のK3sは、パフォーマンスとリソースのバランスをとるための素晴らしい選択肢です。運用コストをほぼゼロに抑えながら、学習や個人プロジェクトの展開に最適な本物のKubernetes環境を手に入れることができます。

インストール中にネットワークやSELinuxの権限に関するエラーが発生した場合は、下のコメント欄で教えてください。一緒に解決しましょう!

Share: