※もし手順で抜けているところやわかりづらいところがありましたらコメントいただけるとありがたいです。
OKEにたどり着いた背景
Free Tier枠(ずっと無料)で使えるリソースが豊富
- 副業できそうなネタを思いついたのでWebサイトを開設したかったが、リソースの費用を抑えたかった
- サーバー代を安く抑えられるサービスやクラウドを探していると、OCI(Oracle Cloud Infrastructure)を発見
- OCI は、クラウド環境を構築するための強力なツールセットを提供している
- OCI の Free Tier では、無料で利用できる多くのサービスが存在し、なんとマネージドの kubernetes 環境である OKE(Oracle Kubernetes Engine)も Free Tier の対象となっているインスタンスタイプを選択すれば無料で利用可能とのこと。
kubernetesで運用してみたかった
- 業務でkubernetesを使い始めたが、業務内ではkubernetes環境を触る機会がそこまで多くなかったため、kubernetes環境を使ってWebアプリを運用してみることで実績を積みたかった
- 単純にkubernetesを色々触ってみて楽しみたかった。
terraformが使えた
- terraformも業務で使っていたため、一から構築してみて自分の知見を増やしたかった
- コードでインフラを管理(IaC)できるので、インフラの設計書を書く必要がなくなり手間が省ける
- 将来的に自動でインフラを追加、削除、更新する必要が出てきた際に、terraformで構築しておくと便利なため
OKE(Oracle Kubernetes Engine)とは?
- Oracle が提供するマネージド Kubernetes 環境
- Kubernetes の複雑な構築や設定を OCI が代行し、コンテナオーケストレーションのみにフォーカスできるサービス
Free Tier での OKE クラスターの利用
OCI Free Tier では、以下のサービスを無料で利用可能(ここではOKE構築に必要なリソースのみ記載)
- 仮想マシン(VM):1VMまたは最大4VMとして使用できるArmベースのAmpere A1コアと24GBのメモリを1か月あたり3,000 OCPU時間と18,000GB時間で使用可能
- ブロックボリューム:2つのBlock Volumesストレージ、合計200 GB
- ロードバランサー:フレキシブルロードバランサー 1インスタンス 10Mbps
この Free Tier 枠で OKE クラスターを構築することが可能で、個人レベルのWebサイトであれば十分運用可能なリソースを半永久的に無料で利用することができる。
※ 最近OCPU時間とメモリ時間の上限が設定されたが、私の環境では上限を超えていないため常にCPU100%とかでなければ超えないのかもしれない
OKE クラスター構築の手順
OCI アカウントの作成
- クレジットカード情報を入力する必要があるが、Free Tierの利用範囲内であれば課金されることはない
- アカウントを作成後、OCI コンソールにログインし、クラウド環境を管理できるようになる
- 【重要】Free Tierの恩恵を受けるためにはOKEのノードとなるインタスタンスのタイプに「Ampere A1コア」を選択する必要があるが、日本のRegionである東京・大阪ではリソースが枯渇しているため、Montrealを選択
※2024/9/28 時点でリソースが確保できるかは不明 - 具体的な手順の詳細はこちら。
ローカル環境の構築
構築時のローカル環境情報
- マシン:Mac mini M2チップ
- macOS:Sonoma系
OCIコマンド(CLI)のインストール
- 自分の場合はMacだったので
brew
でインストール - 具体的な手順の参考ページはこちら。
CLIの設定
- セットアップ用のコマンドを打ち込み、作成したOCIアカウントの情報を入力していく
- 具体的な手順の参考ページはこちら
- 設定時に作成した API key と fingerprint は後続作業で使うので保管しておく
terraformのインストール
-
brew
でtfenv
(terraform
のバージョン管理ツール)をインストール -
tfenv
で欲しいterraform
のバージョンをインストール。自分の場合は特に条件やこだわりがなかったため、最新バージョンをインストールした。 - 具体的な手順の参考ページはこちら
kubectlのインストール
- ローカルからOKE環境を操作するために、ローカルに
kubectl
をインストール - 自分の場合は簡単のために
brew
でインストールした - 具体的な手順の参考ページはこちら
OKEクラスタ用のterraformコードの作成
githubのリポジトリに自分が構築した際のterraform
のコードを用意したため、git clone
してterraformコードを入手
terraformの実行(OKEクラスターの構築)
- terraformのコマンドを実行してOKE環境を構築する。
terraform apply
が完了するまでは5分ほどかかる。 - 使い方の詳細はgithubのリポジトリREADMEの「使い方」を参照
kubectl のセットアップ
- ローカルマシンから OKE クラスターにアクセスするために
kubectl
を設定する - OCI CLI を利用して
kubeconfig
ファイルを取得し、ローカル環境に配置することで、kubectl
コマンドを使ってクラスターに接続可能 - ターミナルで以下のコマンドを実行し、
kubectl
の設定と動作確認
# kubectlの設定
oci ce cluster create-kubeconfig --cluster-id <CLUSTER_OCID> --file $HOME/.kube/config --region ca-montreal-1 --token-version 2.0.0 --kube-endpoint PUBLIC_ENDPOINT
# 動作確認
kubectl get nodes
# 以下のようにノードの情報が取得できれば設定完了
NAME STATUS ROLES AGE VERSION
10.0.1.117 Ready node 457d v1.26.2
10.0.1.178 Ready node 457d v1.26.2
10.0.1.5 Ready node 457d v1.26.2
10.0.1.99 Ready node 457d v1.26.2
アプリケーションのデプロイ
- クラスターが動作していることを確認したら、サンプルアプリケーションをデプロイして実際の動きを確認する
- ここでは例として、公式の Nginx イメージを使ってデプロイしてみる
# NginxのPODを起動
kubectl create deployment nginx --image=nginx
# NginxにHTTP接続するためのロードバランサー構築
kubectl expose deployment nginx --port=80 --type=LoadBalancer
※このコマンドだとLBのスペックを指定していないため、有料版が作成されてしまう可能性あり
- これでインターネットからアクセス可能な Nginx PODとロードバランサーが OKE クラスター上にデプロイされる
- OCIコンソールにログインし、ロードバランサーの IP アドレスを取得して、ブラウザで接続するとNginxのランディングページが表示される
セキュリティの観点で追加した方がいい設定
ingress security rule の接続元IPの限定
- 用意した
terraform
コードでもingress security rules
は設定しているが、全IPに対して解放している - 接続元IPが確定している場合は、そのIPだけ許可するよう設定をするとより強固になる
Identity Policies と User Groupの設定
- いわゆるUserとRoleの設定
- OCI アカウント開設時のユーザは全てを更新できてしまうため、通常の運用では使わない
- 目的に合ったユーザとグループを作成し、グループに適切な権限を設定することで、必要最小限の権限の設定が可能となる
- Identity Policies と User Group も
terraform
を使えるので、設計書の整備を省きたい場合はterraformでの管理だと管理対象が減るため楽
まとめ
- OCI の Free Tier枠 を利用して OKE クラスターを構築する方法
- Kubernetes の学習や、小規模なビジネスの利用には十分なリソースを無料で提供してくれる
- さらに多機能な他のクラウド機能(Logging、DB、オブジェクトストレージ、etc)と組み合わせることで、無料で更に幅が広がる点も魅力的
- とりあえず動かせる環境を構築することを目的としたため、セキュリティ周りは改善点が残っている。なので、ビジネス目的の本番環境として利用する場合は、追加の設定が必要になる。