コスパ最強のKubernetes環境!t4g.small×k3sで作る低コスト学習環境
はじめに
Kubernetesを学びたい、でもEKSの費用が気になる...😓
小規模なコンテナ環境が欲しいけど、コストを抑えたい...💸
そんな悩みを抱えているエンジニアの皆さん、k3sという選択肢を検討してみませんか?
この記事では、AWS t4g.smallのような低コストなEC2インスタンスにk3sをインストールして、お手頃価格でKubernetes環境を構築する方法をご紹介します。Kubernetes学習のための環境構築から、小規模な本番環境まで、k3sの活用法について解説していきます!
k3sって何?なぜ注目すべき?
k3sはRancherが開発した軽量版Kubernetesディストリビューションです。「K8s」の「8」を「3」に減らした名前の通り、軽量化されているのが大きな特徴です。
k3sの主な特徴
- 超軽量: バイナリサイズは約100MBで、メモリ使用量も500MB程度から動作可能
- シングルバイナリ: インストールと管理が容易
- 最小限のOS依存: ほとんどのLinuxディストリビューションで実行可能
- Kubernetesとの互換性: 標準的なKubernetes APIをサポート
- 組み込みデータストア: 外部データベース不要(オプションでexternal DBも使用可能)
- 包括的: 必要なコンポーネントが一式揃っている(LoadBalancer、Helm controller等)
なぜEKSではなくk3s?コスト比較
Kubernetesを使いたいとき、多くの人がAWSのEKS(Elastic Kubernetes Service)などのマネージドサービスを検討します。しかし、学習目的や小規模利用ではコストが見合わないことも...😱
EKSとk3s+EC2のコスト比較
サービス | 月額コスト (概算) | 備考 |
---|---|---|
EKS | $73+ | クラスターあたり$0.10/時間 ($73/月) + ワーカーノードのEC2コスト |
k3s on EC2 (t4g.small) | $15~ | EC2 t4g.small (2vCPU/2GiB) のコストのみ |
t4g.smallインスタンス(ARM based)を使用すれば、わずか月$15程度でKubernetes環境を手に入れることができます!
t4g.smallインスタンスでk3sを動かす
AWS t4g.smallインスタンスは、ARMベースのGraviton2プロセッサを搭載しており、コストパフォーマンスに優れています。2vCPUと2GiBのメモリを備え、k3sを動かすのに十分なスペックです。もちろん、動かすコンテナ次第ですがもっと小さいインスタンスでも構いません!tシリーズインスタンスは本番用とには向きませんが、個人用にはもってこいです。
t4g.smallの特徴
- 2vCPU (AWS Graviton2)
- 2GiBメモリ
- 最大5Gbpsのネットワーク帯域幅
- EBSバースト帯域幅:最大2.08Gbps
- 月額料金:約$15(リージョンによって異なる)
この低コストながら十分なパワーを持つt4g.smallインスタンスに、軽量なk3sをインストールすることで、コストを最小限に抑えつつKubernetes環境を構築できます。AWSが自社開発したGravitonプロセッサですから、コスパは最高です!
AppleシリコンMacユーザーにとっての大きなメリット!
t4g.smallインスタンスを選ぶ理由は、コストだけではありません。ARMベースであるt4gインスタンスは、AppleシリコンMac(Mシリーズ)と同じCPUアーキテクチャを採用しているため、以下のような大きなメリットがあります:
- コンテナの互換性: AppleシリコンMacでビルドしたARM向けコンテナイメージをそのままt4gインスタンスで動かせる
-
クロスビルド不要:
linux/arm64
向けのイメージをローカルでネイティブビルドできるため、クロスビルドの複雑さを回避 -
開発効率の向上:
linux/amd64
コンテナのビルドはRosetta 2経由となり、改善されたとは言え依然として時間がかかる - デバッグの容易さ: 開発環境と実行環境でアーキテクチャが同じなため、「ローカルでは動くのにサーバーでは動かない」といった問題が減少
これはM1以降のMacを使って開発しているエンジニアにとって、非常に嬉しいポイントです。アーキテクチャの違いによるコンテナビルドの遅さやトラブルから解放されます!
セットアップ手順
では、実際にAWS t4g.smallインスタンスにk3sをインストールする手順を見ていきましょう。
1. EC2インスタンスのセットアップ
# AWSのコンソールから、または以下のようなAWS CLIコマンドでt4g.smallインスタンスを起動
aws ec2 run-instances \
--image-id ami-xxxxxxxxxxxx \ # Amazon Linux 2 ARM64 AMI
--instance-type t4g.small \
--key-name your-key-pair \
--security-group-ids sg-xxxxxxxxxxxx \
--subnet-id subnet-xxxxxxxxxxxx \
--tag-specifications 'ResourceType=instance,Tags=[{Key=Name,Value=k3s-node}]'
注意点:
- AMIはARM64対応のものを選択してください
- セキュリティグループで必要なポート(SSH:22, Kubernetes API:6443 など)を開放しておきます
2. k3sのインストール
EC2インスタンスにSSH接続したら、以下のコマンドでk3sをインストールします:
# シングルノードクラスターとしてk3sをインストール
curl -sfL https://get.k3s.io | sh -
# インストール確認
sudo k3s kubectl get node
# kubeconfig ファイルの取得
sudo cat /etc/rancher/k3s/k3s.yaml > ~/.kube/config
sudo chmod 600 ~/.kube/config
これだけでk3sのセットアップは完了です!シンプルすぎてびっくりしますよね😲
3. リモート接続の設定(オプション)
ローカルマシンから操作する場合は、kubeconfigファイルをコピーし、サーバーのアドレスを変更します:
# EC2インスタンスからkubeconfigをコピー
scp -i your-key.pem ec2-user@<EC2-IP>:/etc/rancher/k3s/k3s.yaml ~/.kube/config
# kubeconfigのサーバーアドレスをEC2のパブリックIPに変更
sed -i 's/127.0.0.1/<EC2-パブリックIP>/g' ~/.kube/config
動作確認:サンプルアプリケーションのデプロイ
セットアップした環境が正しく動作しているか確認するため、簡単なアプリケーションをデプロイしてみましょう:
# Nginxをデプロイ
kubectl create deployment nginx --image=nginx
# サービスを公開
kubectl expose deployment nginx --port=80 --type=LoadBalancer
# デプロイ状況を確認
kubectl get pods
kubectl get services
k3sには組み込みのServiceLBコントローラーがあるので、LoadBalancerタイプのサービスを簡単に作成できます!
k3s環境の活用例
1. 学習環境として
- Kubernetesの基本概念(Pod、Service、Deployment等)の学習
- CRD(Custom Resource Definition)やオペレーターの開発と検証
- CI/CDパイプラインの構築練習
2. 開発環境として
- マイクロサービスアプリケーションのローカル検証
- 本番環境と同じKubernetes APIを使った開発
- 新機能のプロトタイピング
3. 小規模本番環境として
- 個人プロジェクトのホスティング
- 小〜中規模のWebアプリケーション運用
- エッジコンピューティングノード
k3sの制限事項
メリットばかりのk3sですが、いくつか知っておくべき制限もあります:
- 高可用性構成には複数ノードが必要: 本格的な冗長構成を組むなら3台以上のサーバーが必要
- 非標準コンポーネント: containerdやflannel等、一部コンポーネントが標準k8sと異なる
- 大規模クラスターには不向き: 数百ノード規模のクラスターは想定されていない
とはいえ、学習環境や小規模運用では、これらの制限はほとんど問題にならないでしょう。
まとめ
本記事では、AWS t4g.smallインスタンスとk3sを組み合わせた低コストなKubernetes環境の構築方法を紹介しました。
- k3sは軽量でありながら本格的なKubernetes機能を提供
- t4g.smallはARM CPU搭載でコスパに優れたEC2インスタンス
- 両者の組み合わせで、**月$15〜**というコストでKubernetes環境を構築可能
- AppleシリコンMacユーザーなら、コンテナイメージをそのまま動かせる嬉しい互換性
- インストールは数分で完了し、すぐに使い始められる
EKSなどのマネージドサービスはとても便利ですが、学習目的や小規模な運用では、k3s + 安価なEC2インスタンスという選択肢もぜひ検討してみてください!ちょっとした実験や検証にも、気軽に使えるKubernetes環境があると便利ですよ😉
💡 次のステップ
- k3sクラスターの監視設定
- Helmを使ったアプリケーションのデプロイ
- CI/CDパイプラインとの連携方法
について、次回以降で解説していきたいと思います!(たぶん……)
Discussion