Cloud Service
OKE Virtual Nodes
ワーカーノードのプロビジョニングやパッチを Oracle に任せ、Pod 単位の課金で Kubernetes をサーバーレスに運用できる。OKE のワーカー方式の一つで、AWS EKS の Fargate プロファイルに相当。
- 1.OKE のワーカーをサーバーレスに提供し、ノードのプロビジョニング・パッチが不要になる方式。
- 2.課金は Pod 単位(リクエストした vCPU・メモリ)で、キャパシティ管理を意識しなくてよい。
- 3.AWS EKS の Fargate に相当。kubectl やマニフェストはそのまま使え、マネージドノードと共存もできる。
解決する課題
OKE のワーカーをマネージドノードで運用すると、ノードのシェイプ選定・OS パッチ・キャパシティ計画・オートスケールの調整といった「ノードの面倒」が残ります。仮想ノード(Virtual Nodes)は、このワーカー層をサーバーレスに提供することで、その負担そのものを取り除きます。利用者は Pod の定義に集中でき、その下のノードは Oracle が管理します。
- ワーカーノードのプロビジョニング・OS パッチ・サイズ計画を自分でやりたくない
- 負荷が読みにくく、ノードの余剰を抱えたくない(使った Pod の分だけ払いたい)
- Kubernetes の枠組みは維持したまま、運用をできるだけ薄くしたい
- 既存の
kubectl運用やマニフェスト・Helm チャートをそのまま使い続けたい
主要概念と用語
- 仮想ノード(Virtual Node): ワーカーをサーバーレスに提供する論理的なノード。実体のコンピュートインスタンスを利用者が管理せず、Pod の実行基盤を Oracle が担う方式
- 仮想ノードプール(Virtual Node Pool): 仮想ノードをまとめて管理する単位。配置するサブネットや可用性ドメイン、Pod の配置ポリシーなどをプール単位で設定する
- マネージドノード(Managed Node): 対になるもう一つのワーカー方式。自分のテナンシ内のコンピュートインスタンスがワーカーになり、シェイプや OS を自分で制御する
- 拡張クラスタ(Enhanced Cluster): 仮想ノードを使う前提となるクラスタタイプ。追加機能と SLA を持つ。基本クラスタでは仮想ノードは利用できない
- VCN ネイティブ Pod ネットワーキング: Pod に VCN の IP を直接割り当てるネットワーキング方式。仮想ノードはこの方式を前提とする
- OKE ワークロード ID(Workload Identity): Pod 単位で OCI の権限を渡す仕組み。仮想ノードでは資格情報の付与にこれを用いる(AWS の IRSA に相当)
- Pod 単位課金: ノードの台数ではなく、Pod が要求した vCPU・メモリのリソース量に応じて課金される考え方
仕様・制限・クォータ
- 仮想ノードは拡張クラスタ(Enhanced Cluster)でのみ利用できる。基本クラスタでは選べない
- ネットワーキングは VCN ネイティブ Pod ネットワーキングが前提で、Pod は VCN のサブネットに IP を持つ
- 提供される Kubernetes はアップストリーム互換で、
kubectl・Helm・標準マニフェストがそのまま使える - ノードを利用者が管理しない方式のため、ノードへの直接アクセス(SSH やデーモンセット的な使い方)や、ノード固有のシェイプ指定に依存するワークロードには制約がある
- GPU やベアメタルなどの特殊シェイプ、ホストレベルの細かな制御が必要な用途はマネージドノードを選ぶ
- Pod が要求するリソース(vCPU・メモリ)は requests に基づいて確保・課金される設計のため、requests を適切に設定することが重要
- テナンシ/リージョンごとに**サービス制限(リミット)**があり、扱える規模はクラスタタイプや上限に依存する。最新の制限値はコンソールの利用状況で確認する(具体的な数値を断定しない)
- 仮想ノードとマネージドノードは同一クラスタ内で併用でき、ワークロードごとに使い分けられる
内部の仕組み
仮想ノードでは、ワーカーノードの実体を Oracle 側で管理します。利用者から見ると Kubernetes 上に通常どおりノードが現れますが、その下のキャパシティ確保・OS パッチ・基盤の冗長化はマネージドサービスとして提供されます。Pod をデプロイすると、必要なリソースが Pod 単位で割り当てられ、ノードの台数や空き容量を利用者が計画する必要はありません。
ネットワークは VCN ネイティブ Pod ネットワーキングで構成され、各 Pod は VCN のサブネットから IP を受け取ります。これにより Pod は VCN 上のリソースやセキュリティリスト・NSG の制御対象として扱われ、ロードバランサや他サービスとの連携も VCN ネットワーキングの枠組みで行えます。Pod への OCI 権限付与は OKE ワークロード ID を用い、資格情報を埋め込まずに最小権限で OCI を呼び出せます。
運用を最小化したい一般的なステートレスワークロードは仮想ノードに寄せ、GPU・ベアメタル・ノードへの直接アクセスや特殊な OS 要件があるものはマネージドノードに置く、という併用が現実的です。Kubernetes の枠組みはどちらも同じなので、ワークロードの移植性は保たれます。
設計パターン / ベストプラクティス
- Pod の requests / limits を正確に設定する。仮想ノードは requests に基づいて確保・課金されるため、過大設定はコスト増、過小設定は不安定さにつながる
- ノード管理が不要なステートレスなマイクロサービスを仮想ノードに寄せ、特殊要件のものはマネージドノードに分離する
- スケールは Horizontal Pod Autoscaler(HPA) を中心に設計する。ノードの台数計画が不要なので Pod レベルの自動調整に集中できる
- 可用性のため、仮想ノードプールを複数の可用性ドメインにまたがるサブネットへ配置し、Pod を分散させる
- 権限は OKE ワークロード ID で Pod 単位に最小限付与し、資格情報をイメージやマニフェストに埋め込まない
- ノード固有の前提(特権 DaemonSet・ホストパス依存・SSH 運用)を持つワークロードは仮想ノードに載せず、設計段階で切り分ける
運用・監視
- メトリクスは OCI Monitoring、コンテナの標準出力は OCI Logging で収集する。日常操作は通常どおり
kubectlで行う - kubeconfig は OCI CLI で取得し、トークンベースで認証する。マネージドノードのクラスタと操作手順は変わらない
- ノードの OS パッチやアップグレードはマネージドサービス側で扱われるため、ノード入れ替え(cordon / drain)の運用は基本的に不要
- Pod が起動しない → イメージ取得権限(OCIR / ポリシー)、requests と利用可能リソース、サブネットの IP 容量や枯渇、セキュリティリスト / NSG を確認する
- 外部公開がつながらない → Service / Ingress とロードバランサのヘルスチェック、Pod が属するサブネットとセキュリティルールを確認する
コスト
仮想ノードの課金は**ノードの台数ではなく、Pod が要求した vCPU・メモリのリソース量(Pod 単位)**で決まります。アイドルなノードの余剰を抱えにくく、負荷の変動が大きい・読みにくいワークロードでコスト効率を出しやすいのが特徴です。一方で requests を過大に設定すると、その分が確保・課金されるため無駄が生じます。変動する単価は断定せず、最新の料金は公式情報で確認してください。
| 観点 | 仮想ノード | マネージドノード |
|---|---|---|
| 課金単位 | Pod 単位(要求した vCPU・メモリ) | ノードのコンピュート・ストレージ |
| 余剰キャパシティ | 抱えにくい | ノード単位で発生しうる |
| 向いている負荷 | 変動が大きい・読みにくい | 定常的で稼働率が高い |
| 最適化の勘所 | requests を正確に設定 | シェイプ選定とノード稼働率 |
セキュリティ
- Pod の OCI 認証は OKE ワークロード ID を使い、資格情報のハードコードを排除する(AWS の IRSA に相当)
- 操作権限は Kubernetes の RBAC と OCI の IAM ポリシーを組み合わせて制御する
- Pod は VCN ネイティブ Pod ネットワーキングで VCN 上に配置されるため、NSG / セキュリティリストで通信範囲を最小化する
- イメージは OCIR に格納し、脆弱性スキャンを有効化してからデプロイする
- シークレットは OCI Vault で管理し、Kubernetes Secret や環境変数経由で安全に注入する
- API サーバーへのアクセスはプライベートエンドポイント化や許可 CIDR で絞り、不要な公開を避ける
API キーや DB パスワードをコンテナイメージや Kubernetes マニフェストにベタ書きするのは NG。OKE ワークロード ID と OCI Vault を使えば、資格情報を埋め込まずに最小権限で OCI を呼び出せ、漏洩・ローテーションのリスクを大幅に下げられます。
関連サービス・比較
仮想ノードは、同じ OKE のワーカー方式であるマネージドノードと対になります。どちらを選んでも Kubernetes の枠組みは同じで、同一クラスタ内で併用もできます。
| 観点 | 仮想ノード | マネージドノード |
|---|---|---|
| 位置づけ | サーバーレスなワーカー | 自分のコンピュートを使うワーカー |
| ノード管理 | Oracle がマネージド(パッチ不要) | 利用者が管理(OS パッチ含む) |
| 課金単位 | Pod 単位(vCPU・メモリ) | ノードのコンピュート・ストレージ |
| 前提クラスタ | 拡張クラスタのみ | 基本・拡張のどちらも可 |
| 特殊シェイプ | GPU・ベアメタルは非対応 | GPU・ベアメタルを選べる |
| AWS の対応 | EKS の Fargate プロファイル | EKS の EC2 ノードグループ |
ハンズオン / CLI例
# 仮想ノードプールを作成(拡張クラスタが前提。サブネットや AD は環境に合わせる)
oci ce virtual-node-pool create \
--compartment-id "ocid1.compartment.oc1..xxxx" \
--cluster-id "ocid1.cluster.oc1.phx.xxxx" \
--display-name "demo-vnp" \
--placement-configurations '[{"availabilityDomain":"Uocm:PHX-AD-1","subnetId":"ocid1.subnet.oc1.phx.xxxx"}]' \
--pod-configuration '{"subnetId":"ocid1.subnet.oc1.phx.xxxx","shape":"Pod.Standard.E4.Flex"}'
# 仮想ノードプールを一覧して OCID と状態を確認
oci ce virtual-node-pool list \
--compartment-id "ocid1.compartment.oc1..xxxx" \
--cluster-id "ocid1.cluster.oc1.phx.xxxx" \
--query "data.items[].{Name:\"display-name\", State:\"lifecycle-state\"}" \
--output table
# kubeconfig を取得して kubectl を使えるようにする
oci ce cluster create-kubeconfig \
--cluster-id "ocid1.cluster.oc1.phx.xxxx" \
--file "$HOME/.kube/config" \
--region "us-phoenix-1" \
--token-version "2.0.0"
# 仮想ノード上に Pod が立つことを確認
kubectl get nodes
kubectl get pods --all-namespaces
OCI Service
OKE Virtual Nodesを実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
コンテナ
比較で見る軸
クラウド: OCI / カテゴリ: コンテナ / 難易度: intermediate
導入後に効く点
課金は Pod 単位(リクエストした vCPU・メモリ)で、キャパシティ管理を意識しなくてよい。
先に潰すリスク
サービス単体ではなく、権限、ネットワーク、監視、課金、バックアップを含めて設計する必要がある。
- クラウド
- OCI
- カテゴリ
- コンテナ
- 難易度
- intermediate
- 関連資格
- —
- 設計柱
- operational / cost / reliability
判断チェックリスト
- 自社の用途が「コンテナ / operational」に近いか確認する。
- 強みである「OKE のワーカーをサーバーレスに提供し、ノードのプロビジョニング・パッチが不要になる方式。」が本当に評価軸になるか確認する。
- 注意点の「サービス単体ではなく、権限、ネットワーク、監視、課金、バックアップを含めて設計する必要がある。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。