OKEの基本クラスタでも問題ないケース

はじめに

こんにちは、技術部の内藤です。

OKEのクラスタは、基本クラスタと拡張クラスタの2種類があります。拡張クラスタの方が機能が豊富で魅力ですが、すべてのケースで拡張クラスタが必要というわけではありません。

今回は、基本クラスタでも問題ないケースについて説明します。

基本クラスタと拡張クラスタの違い

料金面

2025年7月時点で以下です。

  • 基本クラスタは無料
  • 拡張クラスタは月に約11,500円(日に372円)かかる

詳細は以下をご覧ください。

Container Servicesの価格設定 | オラクル | Oracle 日本

機能面

いろいろと違いはありますが、私が影響が大きいものと考えるのは以下です。

  • アドオンの利用可否
  • Workload Identityの利用可否

詳細は、以下の公式ドキュメントや資料をご確認ください。

基本クラスタでも問題ないケース

以下の条件にすべて当てはまる場合は、基本クラスタで十分です。

要約すると、シンプルかつ非機能要件がゆるいアプリケーションです。
※ならKubernetesじゃないほうがいいのでは?と思われるかもしれませんが、慣れているなら、インスタンスの面倒を見る必要がなく、かんたんにノードやポッドを作り直せるKubernetesは非常に便利です

OCI Native Ingress ControllerでIngressを使わない

基本クラスタはアドオンが使えないため、OCI Native Ingress Controllerが使えません。そのため、Ingressを使用しない、またはNGINX Ingress Controllerなど他のIngress Controllerを使用する場合は、基本クラスタでも問題ありません。

OCI Native Ingress Controllerについての詳細は、以下の公式ドキュメントをご覧ください。

KubernetesクラスタでのOCIネイティブ・イングレス・コントローラの設定

オートスケーリングしない

基本クラスタはアドオンが使えないため、Kubernetes Cluster Autoscalerアドオンが使えません。そのため、クラスタの自動スケーリングができません。ワークロードが安定しており、手動でのスケーリングで十分な場合は基本クラスタで対応可能です。

Kubernetes Cluster Autoscalerについての詳細は、以下の公式ドキュメントをご覧ください。

アクセス制御を厳格にしない

基本クラスタではWorkload Identityが使えないため、ポッドからOCIサービスへのアクセス制御が制限されます。厳格なアクセス制御が不要な環境や、インスタンスプリンシパルで十分な場合は基本クラスタでも対応可能です。

ノード数が多くない(1桁レベル)

基本クラスタではサイクルノードが使えません。ノード数が少なく、手動でのノード管理で十分な場合は基本クラスタで問題ありません。

ノード数が多いと、Kubernetesのアップデート時などに、ノードの更新が大変になります。が、それもスクリプトを作成すれば可能だとは思います。

財務的なSLAが不要

基本クラスタには、サービス・レベル目標(SLO)が付属していますが、財務的に支援されるサービス・レベル合意(SLA)は付属していません。
拡張クラスタには、財務的に支えられたサービス・レベル合意(SLA)が付属しています。

拡張クラスタと基本クラスタの比較には、上記があります。つまり、財務的なSLAが不要なら、基本クラスタで問題ありません。

おわりに

基本クラスタは機能が限定的ですが、シンプルな構成なら基本クラスタで十分です。

OCIは無料枠が豊富で、ノードの料金もインスタンスの無料枠として計算されるため、基本クラスタなら無料枠だけでKubernetesを運用することも十分にできます。

OKEの仮想ノードだと厳しい部分

はじめに

OKEでは、ノードは管理対象ノードと仮想ノードの2種類が存在します。

以下の資料などを読むと、運用は仮想ノードがよさげに思えます。が、個人的にはまだ時期尚早だと思うので、私が仮想ノードで辛いと感じる部分を一部抜粋します。

Oracle Container Engine for Kubernetes (OKE) 概要 - Speaker Deck
https://oracle-japan.github.io/ocidocs/services/developers/oke-overview/

仮想ノードとは?

かんたんにいうと、AWSのFargateです。管理しなくていいです。

仮想ノードだと辛い部分

仮想ノードと管理対象ノードの比較で詳細があります。

Kubernetesデーモンセットはサポートされていません。

うーん、辛い。OSSだったり監視ツールだったりは、だいたいDaemonSetですからね。

永続ボリューム要求(PVC)はサポートされていません。

アプリケーションによっては厳しい。

gRPCプローブはサポートされていません。

アプリケーションによっては以下略

初期コンテナはサポートされていません。

initContainers です。

アプリケーションによっては以下略

kubectl logs -fコマンドはサポートされていません。

本番運用開始したらいいと思いますが、開発中は辛いです。

次のボリューム・タイプはサポートされません。

多い。

  • hostPath
  • persistentVolumeClaim
  • ローカル
  • nfs
  • iscsi
  • cephfs

ポッド仕様では、現在、タイプemptyDirの最大ボリュームを1つ定義できます。

一つだけ? 未確認です。

Resources.RequestsはResources.Limitsと異なる値にできません

厳しいような、、、

ワーカー・ノードへのSSH接続(要塞経由を含む)

ノードの詳細なトラブルシューティングは諦めましょう。作り直せばいいのでしょうが。

カスタムcloud-initスクリプトの使用

例えば、OCIのOKEでFSSの転送中暗号化を有効にするで紹介した oci-fss-utils のインストールは、cloud-init以外で行う必要があります。

Kubernetesクラスタ・自動スケーリング

厳しい。

おわりに

上記は抜粋なので、制限はもっとあります。

仮想ノードで運用が楽になると思ったら、実は構築も運用も非常に辛いこともありえるので、事前に調査しておきましょう!

OCI未経験者がOKEを使うためのおすすめのチュートリアル

はじめに

こんにちは、技術部の内藤です。

OCI未経験者が、OKEでKubernetesを使えるようにするためのおすすめのチュートリアルを紹介します。実際に、私が業務でOCIやOKEを使い始める時にやったチュートリアルです。

前提

以下の知識がある人用です。 ※なくても大丈夫かもしれません

  • AWSなど、OCI以外のクラウドサービスの基本がわかる
    • AWSだと、VPC, EC, セキュリティグループあたりはある程度理解している
  • Kubernetesの基本がわかる
    • Pod, Deployment, Service, Ingressあたりはある程度理解している
    • 理解していなくてもいいのですが、知らない場合は、実際にサービスをKubernetesで構築するときに、基本を理解したほうが絶対によいです

おすすめチュートリアル - 基本編

まずは以下の4つをやりましょう。

MySQLではなくOracle DBを利用される場合は、以下のチュートリアルをどうぞ。

101: Oracle Cloud で Oracle Database を使おう(BaseDB) | Oracle Cloud Infrastructure チュートリアル

PostgreSQLなど上記以外のDBは、おそらくOCI公式の日本語チュートリアルはないので、ひとまずMySQLかOracle DBで試してみることをおすすめします。

なお、もちろんドキュメントは存在します。例として、PostgreSQLのドキュメントを記載します。

OCI Database with PostgreSQLの開始

おすすめチュートリアル - OKE編

次に、OKEの基本を学ぶために以下のチュートリアルをやりましょう。

上記で足りなければ

以下のページに、OCI公式の日本語チュートリアルの一覧があります。ここから、必要なものを探してやってみてください。

Oracle Cloud Infrastructure チュートリアル

もちろん、これだけでは実運用のサービスを動かすための知識や経験は足りないので、実際にサービスを構築していくなかで、公式ドキュメントや他のチュートリアルをやっていきましょう。

おわりに

急いでいるときは、意外とチュートリアルなどを飛ばしてしまいがちですが、最初にある程度基本を理解したほうが、最終的にかかる時間は減ると私は思っています。(今まで、焦りから基本の理解をおろそかにして、結局余計に時間がかかったことが多々あります、、、)

ということで、OCIやOKEを使い始める方は、まずはぜひ上記のチュートリアルをやってみてください。