すべてのプロダクト
Search
ドキュメントセンター

Container Service for Kubernetes:runCとrunVの違い

最終更新日:Nov 14, 2024

このトピックでは、runCとSandboxed-Container (runV) のパフォーマンスとポッドの作成方法の違いについて説明します。 これにより、サンドボックスコンテナをよりよく理解して活用できます。

runCとrunVの比較

コンポーネント

runC

runV

コンテナーエンジン

Dockerとcontainerd

Containerd

ノード タイプ

Elastic Compute Service (ECS) インスタンスおよびECSベアメタルインスタンス

EBM

コンテナカーネル

ホストカーネルの共有

専用カーネルを使用

コンテナの分離

コントロールグループ (cgroups) と名前空間

軽量VM

Rootfsグラフドライバー

OverlayFS

OverlayFS

RootFS I/Oスロットル

Cgroups

非対応

NASマウント

非対応

対応

ディスクの取り付け

非対応

非対応

コンテナログ収集Container log collection

Logtailは、ノードからコンテナログを直接収集します。

Logtailサイドカー。 詳細については、「SidecarモードでCRDを使用したコンテナテキストログの収集」をご参照ください。

ポッドのオーバーヘッド

非該当

ポッドオーバーヘッドのメモリは、次の式に基づいて計算されます。ポッドオーバーヘッドのメモリ=64 MiB + ポッドメモリ要求 × 2% 。 結果が512 MiBより大きい場合、値は512 MiBに設定される。 結果が64 MiB未満の場合、値は64 MiBに設定されます。

runCとrunVのポッド作成の違い

kubectlコマンドラインツールを使用して、Container Service for Kubernetes (ACK) クラスターに接続できます。 詳細については、「クラスターのkubeconfigファイルを取得し、kubectlを使用してクラスターに接続する」をご参照ください。

  • runCを使用するポッドを作成する

    1. オプション: runtimeClassName: runcを使用して、コンテナランタイムをrunCに設定します。

      説明

      上記の設定はオプションです。 runCはデフォルトのコンテナランタイムです。

    2. 次のコマンドを実行して、runCを使用するポッドを作成します。

      cat <<EOF | kubectl create -f -
      apiVersion: v1
      kind: Pod
      metadata:
        name: busybox-runc
        labels:
          app: busybox-runc
      spec:
        containers:
        - name: busybox
          image: registry.cn-hangzhou.aliyuncs.com/acs/busybox:v1.29.2
          command:
          - tail
          - -f
          - /dev/null 
          resources:
            limits:
              cpu: 1000m
              memory: 512Mi
            requests:
              cpu: 1000m
              memory: 512Mi
      EOF
  • runVを使用するポッドを作成する

    1. runtimeClassName: runvを使用して、コンテナランタイムをrunVに設定します。

    2. オプション: 次のコマンドを実行して、runvという名前のRuntimeClassオブジェクトがクラスターに存在することを確認します。

      kubectl get runtimeclass runv -o yaml
      説明

      runvという名前のRuntimeClassオブジェクトは、Sandboxed-Containerを使用するKubernetesクラスターに自動的に作成されます。

    3. 次のコマンドを実行して、runVを使用するポッドを作成します。

      cat <<EOF | kubectl create -f -
      apiVersion: v1
      kind: Pod
      metadata:
        name: busybox-runv
        labels:
          app: busybox-runv
      spec:
        runtimeClassName: runv
        nodeSelector:
          alibabacloud.com/container-runtime: Sandboxed-Container.runv
        containers:
        - name: busybox
          image: registry.cn-hangzhou.aliyuncs.com/acs/busybox:v1.29.2
          command:
          - tail
          - -f
          - /dev/null
          resources:
            limits:
              cpu: 1000m
              memory: 512Mi
            requests:
              cpu: 1000m
              memory: 512Mi
      EOF
      重要

      Kubernetesのバージョンが1.16より前の場合は、次のnodeSelector設定を追加する必要があります。 Kubernetesバージョンが1.16以降の場合、次のnodeSelector設定は必要ありません。

      nodeSelector:
          alibabacloud.com/container-runtime: Sandboxed-Container.runv
    4. 次のコマンドを実行して、作成されたポッドを照会します。runvが出力に含まれている場合、ポッドがサンドボックスで実行されていることを示します。

      kubectl get pod busybox-runv -o jsonpath={.spec.ru ntimeClassName}
    5. 次のコマンドを実行してポッドにログインし、そのCPUおよびメモリ構成を照会します。

      kubectl exec -ti pod busybox-runv /bin/sh
      / # cat /proc/meminfo | head -n1
      MemTotal:        1130692 kB
      / # cat /proc/cpuinfo | grep processor
      processor    : 0

      上記の出力は、CPUの数がホストの数と同じではないことを示しています。 総メモリは、ポッドメモリとポッドオーバーヘッドの合計です。 システムがいくらかのメモリも消費するため、総メモリはわずかに小さいことに注意してください。