なぜ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の権限に関するエラーが発生した場合は、下のコメント欄で教えてください。一緒に解決しましょう!

