管理対象ノードとの仮想ノードの比較

Container Engine for Kubernetes (OKE)を使用して作成できる仮想ノードと管理対象ノードの違いを確認します。

Container Engine for Kubernetesを使用してノード・プールを作成する場合、ノード・プールに作成するワーカー・ノードのタイプを次のいずれかとして指定します:

拡張クラスタにのみ仮想ノードを作成できます。管理対象ノードは、基本クラスタと拡張クラスタの両方に作成できます。

Container Engine for Kubernetesドキュメントのノードおよびワーカー・ノードへのすべての参照は、特に明記されていないかぎり、仮想ノードと管理対象ノードの両方を参照します。

仮想ノードおよび仮想ノード・プール

仮想ノードはContainer Engine for Kubernetesテナンシで実行されます。仮想ノードを作成するには、仮想ノード・プールを作成します。仮想ノードおよび仮想ノード・プールは、Oracleによって完全に管理されます。

仮想ノードはサーバーレスのKubernetesエクスペリエンスを提供し、データ・プレーン・インフラストラクチャのアップグレードやクラスタの容量の管理といった運用上のオーバーヘッドなしで、コンテナ化されたアプリケーションを大規模に実行できます。

拡張クラスタでは、仮想ノードおよびノード・プールのみを作成できます。

仮想ノードによってサポートされる著名な機能

管理対象ノードではなく仮想ノードを使用する場合、一部の機能のサポートは異なります。

  • リソース割当て:リソース割当ては、ワーカー・ノード・レベルではなくポッド・レベルです。そのため、ノード・プール内のワーカー・ノードではなく、ポッド仕様でCPUおよびメモリー・リソース要件(リクエストおよび制限として)を指定します。仮想ノードによってプロビジョニングされたポッドに割り当てられたリソースを参照してください。

  • ロード・バランシング:ロード・バランシングは、ワーカー・ノード間ではなくポッド間です(管理対象ノードの場合と同様)。仮想ノードを含むクラスタでは、ロード・バランサ・セキュリティ・リスト管理が有効になっていないため、常にセキュリティ・ルールを手動で構成する必要があります。ロード・バランサは、ポッドのIPアドレスと割り当てられたノード・ポート間でトラフィックを分散します。仮想ノードで実行されているポッドに接続する場合は、<node-ip>:<nodeport>ではなく構文<pod-ip>:<nodeport>を使用します。ポッドおよびノードに異なるサブネットを使用する場合は、ポッド・サブネットでノード・ポート・イングレスを構成します。
  • ポッド・ネットワーキング: VCNネイティブ・ポッド・ネットワーキングのみがサポートされています(フルチャネルCNIプラグインはサポートされていません)。さらに、仮想ノードを使用する場合のサポートは若干異なります。
    • 各仮想ノードにアタッチされるVNICは1つのみです。
    • IPアドレスは、ポッドが作成される前に事前に割り当てられていません。
    • VCN-Native Pod Networking CNIプラグインはkube-systemネームスペースで実行中として表示されません。
    • VCNネイティブ・ポッド・ネットワーキングのみがサポートされているため、ポッド・サブネット・ルート表には(インターネット・ゲートウェイではなく) NATゲートウェイおよびサービス・ゲートウェイに対して定義されたルート・ルールが必要です。
  • 自動スケーリング:仮想ノードは、500ポッドをサポートするように自動的にスケーリングされます。Oracleは仮想ノードの基礎となるリソースを管理するため、Kubernetes Horizontal Pod Autoscalerを使用すると簡単に操作できます。Kubernetes Cluster Autoscalerを使用する必要はありません(仮想ノードではまだサポートされていません)。Kubernetes Vertical Pod Autoscalerは仮想ノードではサポートされていません。

仮想ノードの使用時にサポートされない著名なKubernetesの機能

管理対象ノードではなく仮想ノードを使用する場合、一部のKubernetes機能がサポートされていないか、まだ使用できません。

Kubernetes機能はサポートされていません 追加情報
Flannelおよびその他のサード・パーティのCNIプラグインはサポートされていません。 仮想ノードはOCI VCN-Native Pod Networking CNIプラグインのみをサポートします。
Kubernetesデーモンセットはサポートされていません。

たとえば、次はサポートされません。

apiVersion: apps/v1
kind: DaemonSet
永続ボリューム要求(PVC)はサポートされていません。 追加情報がありません。
クラスタで使用されるCNIプラグイン(CalicoやCiliumなど)とともにNetworkPolicyリソースをサポートするネットワーク・プロバイダはサポートされていません。 追加情報がありません。
ネットワーク・ポリシー(Kubernetes NetworkPolicyリソース)はサポートされていません。 追加情報がありません。
サービス・メッシュ製品はサポートされていません。 Oracle Cloud Infrastructure Service MeshやIstio Service Meshなどの製品はサポートされません。

HTTPタイプのLiveness and Readinessプローブはサポートされています

HTTPS、gRPC、およびexecプローブはサポートされていません

起動プローブはサポートされていません

probe.terminationGracePeriodSecondsはサポートされていません

たとえば、次がサポートされています。
livenessProbe:
  httpGet:
    path: /healthz
    port: 8080
  initialDelaySeconds: 3
  periodSeconds: 3
ただし、次はサポートされていません:
livenessProbe:
  grpc:
     port: 8080
  initialDelaySeconds: 5
  periodSeconds: 5
livenessProbe:
  exec:
    command:
    - cat
    - /tmp/healthy
livenessProbe:
  httpGet:
    path: /healthz
    port: 8080
    scheme: "HTTPS"
startupProbe:
  httpGet:
    path: /healthz
    port:8080

kubectl logsコマンドはサポートされています

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

たとえば、次はサポートされません。
kubectl logs -f workload1-589578899f-lwzm9
一時コンテナはサポートされていません。 追加情報がありません。
Init-containersはサポートされていません。 追加情報がありません。

次のボリュームタイプはサポートされています

  • emptyDir
  • ConfigMap
  • 機密
  • 次のタイプのProjectedVolume:

    • ServiceAccount
    • ConfigMap
    • 機密

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

  • hostPath
  • persistentVolumeClaim
  • ローカル
  • NFS
  • イスチ
  • 天井

たとえば、次はサポートされません。

volumes:
- name: test-volume
  hostPath:
    path: /data
ポッド仕様では、現在、タイプemptyDirの最大1ボリュームを定義できます。 追加情報がありません。

次のポッド・フィールドはサポートされていません:

  • hostIPC
  • hostNetwork
  • hostPid
  • hostName
  • podOS
  • 間接費
  • setHostNameAsFqdn
  • shareProcessNamespace
たとえば、次はサポートされません。
spec:
  hostIPC: true
  hostNetwork: true
  hostPID: false
  setHostnameAsFQDN : true
  shareProcessNamespace : true

次のポッド・セキュリティ・コンテキストはサポートされています

  • runAsNonRoot
  • runAsUser
  • runAsGroup

次のポッド・セキュリティ・コンテキストはサポートされていません

  • fsGroup
  • fsGroupChangePolicy
  • supplementalGroups
  • seLinuxOptions
  • sysctl
  • seccompProfile
たとえば、次はサポートされません。
spec:
  securityContext:
    seLinuxOptions:
      type: dummy_container.proces

次のコンテナ・セキュリティ・コンテキストはサポートされています

  • readOnlyRootFilesystem
  • allowPrivilegeEscalation:false

次のコンテナ・セキュリティ・コンテキストはサポートされていません

  • allowPrivilegeEscalation:true
  • 特権
  • procMount
  • 機能
たとえば、次はサポートされません。
containers:
  - name: openssh-1
    securityContext:
      capabilities:
        add:
        - CAP_NET_ADMIN

Container.Port

  • ホストIP
  • ホスト・ポート
たとえば、次はサポートされません。
ports:
  - name: test
    containerPort: 81
    hostPort: 80

コンテナ

  • TerminationMessagePolicy
  • TerminationMessagePath
  • VolumeDevices
  • VolumeMount.MountPropagation
  • VolumeMount.Subpath式
Kubernetesは、デフォルトでTerminationMessagePolicyおよびTerminationMessagePathを追加します。
コンテナ・ポート範囲(1、65535)は、NodePort範囲(30000-32767)と競合できません。 たとえば、次はサポートされません。
containers:
  - name: my-nginx
    image: nginx
    ports:
    - containerPort: 30002
Pod.Volumes.EmptyDirVolumeSource:SizeLimit たとえば、次はサポートされません。
emptyDir:
  sizeLimit: 500Mi
Pod.Volumes.EmptyDirVolumeSource:Medium - ""または"Memory"のみ使用できます たとえば、次はサポートされません。
emptyDir:
  medium: "Memory1"

Pod:Volumes - 次に対してモードを0644として指定する必要があります。

  • ConfigMapVolumeSource:KeyToPath: モード
  • SecretVolumeSource:KeyToPath: モード
  • ProjectedVolumeSource:SecretProjection:KeyToPath: モード
  • ProjectedVolumeSource:ConfigMapProjection:KeyToPath:Mode
たとえば、次はサポートされません。
- name: myconfigmap
  configMap:
    name: kube-root-ca.crt
    items:
    - key: ca.crt
      path: abc
      mode: 0400

ポッド: ボリューム- 次に対してDefaultModeが指定されている場合、DefaultModeは0644である必要があります:

  • ConfigMapVolumeSource:DefaultMode
  • ProjectedVolumeSource:DefaultMode
  • SecretVolumeSource:DefaultMode
たとえば、次はサポートされません。
- name: workload-volume
    configMap:
      name: myconfigmap
      defaultMode: 0400
Resources.RequestsはResources.Limitsと異なることはできません たとえば、次はサポートされません。
resources:
  requests:
    cpu: 50m
    memory: 200Mi
  limits:
    cpu: 100m
    memory: 400Mi
ボリューム:DownwardAPI:ResourceFieldRef たとえば、次はサポートされません。
resourceFieldRef:
  containerName: openssh
  resource: limits.cpu
TerminationGracePeriodSeconds たとえば、次はサポートされません。
terminationGracePeriodSeconds: 30
DeletionGracePeriodSeconds たとえば、次はサポートされません。
metadata:
  DeletionGracePeriodSeconds: 30
実行コンテナ たとえば、次はサポートされません。
kubectl exec workload1-589578899f-lwzm9 -- sh
Kubectl port-forwardコマンド かわりにkubectl proxyを使用します(kubectlポートフォワードではなくkubectlプロキシを使用した仮想ノードでのポッドおよびサービスのトラブルシューティングを参照)。
pod.spec.containers[].imageへの突然変異を含むUpdatePodリクエスト 追加情報がありません。
マウントされた構成マップおよびシークレットへの更新のポッドへの伝播 追加情報がありません。
仮想kubeletメトリック・エンドポイントのコンテナ・レベルのメトリック 追加情報がありません。
コンテナ: 生産資源所要量サブコア 追加情報がありません。
コンテナ標準入力/stdinOnce、tty 追加情報がありません。
externalTrafficPolicyの場合、クライアントIPアドレスを保持します: ローカル 追加情報がありません。
configおよびconfigJson以外のImagePullSecretタイプ 追加情報がありません。
ProjectedVolumeSource:ServiceAccountTokenProjection:ExpirationSeconds 追加情報がありません。
既存のコンテナ内ですでに実行されているプロセスと対話するkubectl attachコマンド。 追加情報がありません。

仮想ノードの使用時にはサポートされていない注目のContainer Engine for Kubernetesの機能

Container Engine for Kubernetesの一部の機能は、管理対象ノードではなく仮想ノードを使用する場合、使用できないか、まだ使用できません。

Container Engine for Kubernetes機能はサポートされていません 追加情報
ワーカー・ノードへのSSH接続(要塞経由を含む) 使用できません。
カスタムcloud-initスクリプトの使用 使用できません。
Node Doctorスクリプト 使用できません。
バージョン1.25より前のKubernetesバージョンのサポート 仮想ノードでは、クラスタでKubernetesバージョン1.25以上が実行されている必要があります。
仮想ノードと管理対象ノードの両方を含む混合クラスタ。 まだ使用不可です。
仮想ノードの数を自動スケールします。 まだ使用不可です。
仮想ノードをプロビジョニングするための容量予約。 まだ使用不可です。
IntelおよびGPUシェイプのポッド。 まだ使用不可です。
資格証明のローテーション(クラスタ資格証明のローテーションを参照) まだ使用不可です。

仮想ノードを使用する場合、共通デプロイメントがサポートされず、異なる方法でサポートされます。

次の一般的なデプロイメントは、管理対象ノードではなく仮想ノードを使用する場合はサポートされず、異なる方法でサポートされます。

デプロイメント ノート
kube-systemネームスペースおよびkube-proxyクラスタ・アドオン内のkube-proxy kube-proxyは、仮想ノードでスケジュールされたポッドで実行されますが、kube-systemネームスペースにデプロイされません。
Kubernetes Dashboard 仮想ノードを使用する場合、サポートされていません。
Nginxイングレス・コントローラ 仮想ノードを使用する場合は、異なる方法でデプロイします(サンプル・イングレス・コントローラの設定を参照)。
Kubernetesクラスタ・オートスケーラ 仮想ノードを使用する場合、サポートされていません。
Vertical Pod Autoscaler 仮想ノードを使用する場合、サポートされていません。
Kubernetesメトリック・サーバー 仮想ノードの使用時に異なる方法でデプロイします(Kubectlを使用したクラスタへのKubernetesメトリック・サーバーのデプロイを参照)。

管理対象ノードと管理対象ノード・プール

管理対象ノードは、テナンシのコンピュート・インスタンス(ベア・メタルまたは仮想マシン)で実行されます。管理対象ノードを作成するには、管理対象ノード・プールを作成します。管理対象ノードと管理対象ノード・プールは、ユーザーが管理します。

管理対象ノードの管理を担当しているため、特定の要件を満たすように柔軟に構成できます。管理対象ノードのKubernetesのアップグレードおよびクラスタ容量の管理は、ユーザーの責任となります。

管理対象ノードを使用する場合、アプリケーションを実行するコンピュート・インスタンスに対して支払います。

管理対象ノードとノード・プールは、基本クラスタと拡張クラスタの両方に作成できます。

管理対象ノードによってサポートされる著名な機能

仮想ノードではなく管理対象ノードを使用する場合、一部の機能のサポートは異なります。

  • リソース割当:リソース割当は、ポッド・レベルではなくワーカー・ノード・レベルです。そのため、ポッド仕様ではなく、ノード・プール内のワーカー・ノードのCPUおよびメモリー・リソース要件を指定します。
  • ロード・バランシング:ロード・バランシングは、(仮想ノードの場合と同様に)ポッド間ではなくワーカー・ノード間です。したがって、ポッド準備ゲートを使用して、管理対象ノードを含むクラスタ内のロード・バランサ・バックエンド・セットにトラフィックをルーティングすることはできません。
  • ポッド・ネットワーキング: VCNネイティブ・ポッド・ネットワーキングCNIプラグインとフルチャネルCNIプラグインの両方がサポートされています。
  • 自動スケーリング: Kubernetes Cluster AutoscalerおよびVertical Pod Autoscalerの使用がサポートされています。

管理対象ノードの使用時に、重要な機能がサポートされていないか、まだ使用できません

仮想ノードではなく管理対象ノードを使用する場合、次のような機能はまだ使用できません。
  • Kubernetes taint