はじめに
OCI(Oracle Cloud Infrastructure、Oracleのクラウドサービス)では、OKE(Oracle Kubernetes Engine)というサービスでKubernetesのクラスタを作れます。
この記事では、OKEのクイック作成という方法でクラスタを1つ作り、ブラウザ上のターミナルであるCloud Shellから kubectl で操作できるところまでを紹介します。
クイック作成ではネットワークも自動的に作られるので、何が作られたのかを後半で確認します。
画面の文言や料金は変わることがあるため、実際に作成する前に公式ドキュメントをご確認ください。
前提条件
- OCIのアカウント
- クラスタとネットワークを作成できる権限。テナンシ(OCIの契約単位)の管理者であれば、そのまま進められます
- リソースを作るコンパートメント(テナンシの中をフォルダのように区切る単位)
料金の考え方
OKEの料金は、大きく2つに分かれます。
- コントロールプレーン — Kubernetes本体を動かす部分で、Oracle側で管理されます。Basicクラスタなら料金はかかりません
- ワーカーノード — Podが動くVM(仮想マシン)です。通常のコンピュート・インスタンス(OCIのVM)として料金がかかります
クラスタの種類にはBasicとEnhancedがあり、作成画面の最後で選べます。
Enhancedクラスタでは、仮想ノード(ノードの管理をOracle側に任せる方式)やWorkload Identity(Podに対してOCIの操作権限を与える仕組み)といった機能が使えるようになり、クラスタあたり1時間0.10米ドルの料金がかかります。
この記事の範囲はBasicクラスタで足ります。
ワーカーノードは、Always Free枠(期限なしで無料のまま使える枠)に収まるシェイプ(CPUとメモリの構成を決める、VMの機種にあたるもの)を選びます。
Always Free枠では、ArmのVM.Standard.A1.Flexを合計2 OCPU、メモリ12 GBまで使えます。
ここでは1 OCPU、メモリ6 GBのノードを2台作り、枠の中に収めます。
(OCPUは、OCIでのCPUの数え方の単位です。ノードを2台にしているのは、Podが複数のノードに分かれて配置される様子を後の記事で見るためです。)
クラスタを作る
OCIコンソール(ブラウザで開くOCIの管理画面)にログインし、メニューから「開発者サービス」の「Kubernetesクラスタ(OKE)」を開きます。
「クラスタの作成」を押すと、作成方法を選ぶ画面が出ます。
クイック作成は、クラスタと一緒にネットワーク(VCN、サブネット、ゲートウェイ)も自動で作る方法です。
ネットワークを自分で設計しなくて済むので、最初の1つはこちらが簡単です。
クイック作成で、新規に作成されるリソースは次のとおりです。
- 仮想クラウド・ネットワーク(VCN)
- インターネット・ゲートウェイ(IG)
- NATゲートウェイ(NAT)
- サービス・ゲートウェイ(SGW)
- Kubernetesクラスタ
- Kubernetesワーカー・ノードおよびノード・プール
次の画面で、クラスタの設定を入力します。
| 項目 | 今回の値 | 補足 |
|---|---|---|
| 名前 | cluster1 |
後から見て分かる名前を付ける |
| コンパートメント | oke |
リソースをまとめて置く区画 |
| Kubernetesバージョン | v1.36 |
既定のまま。末尾が .0 のプレビュー版は選ばない |
| Kubernetes APIエンドポイント | パブリック・エンドポイント | kubectlの接続先をインターネットから到達できるようにする |
| ノード・タイプ | 管理対象(マネージド) | ワーカーノードを自分のテナンシのVMとして持つ方式 ※仮想(仮想ノード):ノードの管理をOracle側に任せる方式。Enhancedクラスタ(クラスタあたり1時間0.10米ドル)が必要で、ノードにも追加料金がかかる。 |
| Kubernetesワーカー・ノード | プライベート・ワーカー・ノード | ノード自体にはインターネットから直接アクセスさせない |
| シェイプ | VM.Standard.A1.Flex(1 OCPU / 6 GB) | Always Free枠に収める |
| ノード数 | 2 | |
| ブート・ボリューム | 既定のまま | ノードのディスク |
入力して次へ進むと、確認画面になります。
ここで「基本クラスタの作成」を選ぶと、Basicクラスタとして作成されます。
作成を実行すると、クラスタとノードが順番に作られていきます。
クラスタの状態は、作成中の画面で確認できます。
クラスタ自体は6分程でアクティブになりました。
ただし、この時点ではワーカーノードはまだ準備中です。
Cloud Shellからkubectlでつなぐ
kubectlは、Kubernetesのクラスタを操作するコマンドです。
どのクラスタに、どの資格情報で接続するかは、kubeconfigという設定ファイルに書かれています。
OKEでは、このファイルを作るコマンドがコンソールに表示されます。
クラスタの詳細画面を開き、右上の「アクション」から「クラスタへのアクセス」を押します。
ダイアログが開くので、「Cloud Shellアクセス」を選びます。
「Cloud Shellの起動」を押すと、画面の下側にCloud Shellが開きます。
Cloud Shellは、ブラウザ上で使えるターミナル(コマンドを文字で打ち込む画面)で、kubectlとOCI CLI(OCIをコマンドで操作するツール)が最初から入っています。
ダイアログに表示されているアクセス・コマンドのコピーおよび実行のコマンドをCloud Shellに貼り付けて実行します。
# <クラスタのOCID> の部分は、ダイアログに表示されたコマンドでは実際の値が入っている
oci ce cluster create-kubeconfig \
--cluster-id <クラスタのOCID> \
--file $HOME/.kube/config \
--region <リージョン識別子> \
--token-version 2.0.0 \
--kube-endpoint PUBLIC_ENDPOINT
(OCIDは、OCIのリソース1つ1つに付く識別子です。--file はkubeconfigの保存先、--kube-endpoint PUBLIC_ENDPOINT は、接続先としてパブリック・エンドポイントを使う指定です。)
実行するとNew config written to the Kubeconfig file /home/XXXXが表示されます。
これで、Cloud Shellからこのクラスタを操作できるようになりました。
ノードを確認する
接続できたかどうかは、ノードの一覧を表示すると分かります。
# get はリソースの一覧を表示するサブコマンド。-o wide を付けると表示する列が増える
kubectl get nodes -o wide
作成したノードが2台並び、STATUS 列が Ready になっていれば、Podを受け入れられる状態です。
VERSION 列にはKubernetesのバージョン、CONTAINER-RUNTIME 列にはコンテナを動かすソフトウェアが表示されます。
ノードがReadyになった時刻は、ノードの情報から取り出せます。
# ノード名、クラスタに参加した時刻、Readyになった時刻を並べて表示する
kubectl get nodes -o jsonpath='{range .items[*]}{.metadata.name}{" "}{.metadata.creationTimestamp}{" "}{.status.conditions[?(@.type=="Ready")].lastTransitionTime}{"\n"}{end}'
VMそのものが作られた時刻は、コンピュート・インスタンスの詳細画面「作業リクエスト」で確認できます。
何が作られたのか
クイック作成では、クラスタ以外にもいくつかリソースが作られています。
構成を図にすると、次のようになります。
- VCN(仮想ネットワーク) — OCIの中に作る自分専用のネットワークです。この中にサブネットやゲートウェイが置かれます
- ワーカーノード用サブネット — サブネットは、VCNをIPアドレスの範囲で区切ったものです。ワーカーノードのVMはここに置かれます
- ロードバランサ用サブネット — アプリケーションを外部に公開するときに使うサブネットです。今回は何も置かれません
- インターネット・ゲートウェイ — VCNとインターネットの間の出入り口です
- NATゲートウェイ — プライベートなノードからインターネットへ出るための出口です。ノードがイメージを取得するときなどに使われます
作られたリソースは、コンソールからも確認できます。
ネットワークのVCN一覧には、oke-vcn-quick- で始まる名前のVCNが増えています。
コンピュート・インスタンスの一覧には、ワーカーノードのVMが2台並んでいます。
注意点: ワーカーノードのVMは、クラスタが存在する間ずっと動き続けます。
Always Free枠のシェイプを選んでいれば枠の中に収まりますが、枠を超えるシェイプや台数にすると料金がかかります。
また、Arm(A1)のシェイプは、リージョンによっては容量不足で作成に失敗することがあります。
その場合は、時間をおいて試すか、有料のシェイプを選ぶことになります。
片付け
使い終わったクラスタは削除します。
クラスタを削除すると、ノードプール(ワーカーノードのまとまりを管理する単位)とワーカーノードのVMも一緒に削除されます。
コンソールのクラスタ詳細画面から削除を実行し、コンピュート・インスタンスの一覧でVMが消えたことを確認します。
クイック作成で作られたVCNは、クラスタを削除しても残ります。
使い終わったら、ネットワークのVCN一覧から削除します。
まとめ
- OKEのクイック作成を使うと、クラスタと一緒にVCN、サブネット、ゲートウェイ、ワーカーノードまで作られる
- コントロールプレーンはOracleが管理し、Basicクラスタなら料金はかからない。料金がかかるのはワーカーノードのVM
- Always Free枠のA1シェイプ(合計2 OCPU、メモリ12 GB)に収めれば、1 OCPU / 6 GBのノードを2台動かせる
- Cloud Shellでkubeconfigを作るコマンドを実行すれば、kubectlでクラスタを操作できる
- ノードがPodを受け入れられる状態になるまでは、VMを作る時間に加えてクラスタへ参加する時間がかかる
これでKubernetesを操作する環境ができました。
次は、このクラスタに kubectl apply でPodを作り、指示を出してからコンテナが動き出すまでに中で何が起きているのかを見ていきます。
少しでも参考になれば嬉しいです。
















