ACK クラスターでは、2 種類のコンテナランタイム(runc および runV(Sandboxed-Container))をサポートしています。runc は、コントロールグループ(cgroups)および名前空間を用いた共有カーネルによる隔離を実現する標準的な Linux コンテナランタイムです。一方、runV は各 Pod を専用の軽量仮想マシン(VM)上で実行し、独立したカーネルおよびハードウェアレベルの隔離を提供します。
runc と runV の比較
| コンポーネント | runc | runV |
|---|---|---|
| コンテナエンジン | Docker および containerd | containerd |
| ノードタイプ | Elastic Compute Service (ECS) インスタンスおよび ECS Bare Metal (EBM) インスタンス | EBM インスタンス |
| コンテナカーネル | ホストカーネルを共有 | 専用カーネルを使用 |
| コンテナ隔離 | コントロールグループ(cgroups)および名前空間 | 軽量 VM |
| Rootfs Graph Driver | OverlayFS | OverlayFS |
| RootFS I/O 速度制限 | cgroups | 非対応 |
| NAS マウント | 非対応 | 対応 |
| ディスクマウント | 非対応 | 非対応 |
| コンテナログ収集 | Logtail がノードから直接コンテナログを収集 | Logtail Sidecar |
| Pod オーバーヘッド | 該当なし | メモリ = 64 MiB + (Pod メモリリクエスト × 2 %)。上限:512 MiB、下限:64 MiB。 |
runV における Pod オーバーヘッド
すべての runV Pod は、軽量 VM およびそのゲストコンポーネントを実行するために、一定のメモリオーバーヘッドを必要とします。
計算式は次のとおりです:Pod オーバーヘッドメモリ = 64 MiB + Pod メモリリクエスト × 2 %(上限 512 MiB、下限 64 MiB)。
runV Pod 内で可視化される合計メモリは、Pod メモリリクエストに Pod オーバーヘッドを加算したものから、システムが消費するわずかなメモリを差し引いた値となります。また、Pod 内の CPU 数もホストとは異なります。
runV の制限事項
runV を使用する場合、以下の機能は非対応です。
RootFS I/O 速度制限:rootfs に対して cgroup を用いた I/O 速度制限は利用できません。
ディスクマウント:永続ディスクボリュームを直接マウントできません。
直接ログ収集:Logtail がノードから直接ログを収集することはできません。代わりに Logtail Sidecar をご使用ください。
runc を使用する Pod の作成
前提条件
開始する前に、以下の条件を満たしていることを確認してください。
Pod の作成
以下のコマンドを実行して、runc を使用する Pod を作成します。
説明runtimeClassName: runcの設定は任意です。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 を使用する Pod の作成
前提条件
開始する前に、以下の条件を満たしていることを確認してください。
Pod の作成
(任意)クラスター内に
runvという名前の RuntimeClass オブジェクトが存在することを確認します。kubectl get runtimeclass runv -o yaml説明Sandboxed-Container を使用する ACK クラスターでは、
runvという名前の RuntimeClass オブジェクトが自動的に作成されます。以下のコマンドを実行して、runV を使用する Pod を作成します。
重要Kubernetes のバージョンが 1.16 より前の場合、
nodeSelectorフィールドの指定が必要です。バージョン 1.16 以降では不要です。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 EOFPod がサンドボックス内で実行されているかを確認します。
kubectl get pod busybox-runv -o jsonpath={.spec.runtimeClassName}出力結果に
runvが含まれている場合、Pod はサンドボックス内で実行されています。Pod にログインし、CPU およびメモリ構成を確認します。
kubectl exec -ti pod busybox-runv /bin/sh / # cat /proc/meminfo | head -n1 MemTotal: 1130692 kB / # cat /proc/cpuinfo | grep processor processor : 0Pod 内の CPU 数はホストとは異なります。合計メモリは Pod メモリリクエストと Pod オーバーヘッドの合計に相当しますが、システムが一部のメモリを消費するため、若干小さくなります。
次のステップ
Sandboxed-Container ランタイムとの互換性がある Pod フィールドについて確認するには、「Sandboxed-Container の互換性に関する注意事項」をご参照ください。
RuntimeClass リソースおよびランタイム選択の詳細については、「RuntimeClass」をご参照ください。