このトピックでは、パフォーマンスとポッド作成方法の観点から、runC とサンドボックスコンテナー (runV) の違いについて説明します。サンドボックスコンテナーについてより深く理解し、活用するために役立ちます。
runC と runV の比較
コンポーネント | runC | runV |
コンテナーエンジン | Docker および containerd | containerd |
ノードタイプ | Elastic Compute Service (ECS) インスタンスおよび ECS ベアメタルインスタンス | EBM |
コンテナーカーネル | ホストカーネルを共有 | 専用カーネルを使用 |
コンテナーの隔離 | Control groups (cgroups) および名前空間 | 軽量 VM |
Rootfs Graph Driver | OverlayFS | OverlayFS |
RootFS I/O 速度制限 | Cgroups | サポートされていません |
NAS マウント | サポートされていません | サポートされています |
ディスクマウント | サポートされていません | サポートされていません |
コンテナーログ収集 | Logtail はノードからコンテナーログを直接収集します。 | |
Pod オーバーヘッド | 該当なし | ポッドオーバーヘッドのメモリは、次の式に基づいて計算されます。ポッドオーバーヘッドのメモリ = 64 MiB + ポッドメモリリクエスト × 2%。結果が 512 MiB を超える場合は、値は 512 MiB に設定されます。結果が 64 MiB 未満の場合は、値は 64 MiB に設定されます。 |
runC と runV のポッド作成の違い
前提条件
runC を使用するポッドを作成する
オプション:
runtimeClassName: runcを使用して、コンテナーランタイムを runC に設定します。説明上記の構成はオプションです。 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 を使用するポッドを作成する runV
runtimeClassName: runvを使用して、コンテナーランタイムを runV に設定します。オプション: 次のコマンドを実行して、
runvという名前の RuntimeClass オブジェクトがクラスターに存在することを確認します。kubectl get runtimeclass runv -o yaml説明runvという名前の RuntimeClass オブジェクトは、サンドボックスコンテナーを使用する Kubernetes クラスターで自動的に作成されます。次のコマンドを実行して、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 構成を追加する必要があります。それ以外の場合は、構成は必要ありません。
nodeSelector: alibabacloud.com/container-runtime: Sandboxed-Container.runv次のコマンドを実行して、作成されたポッドをクエリします。出力に
runvが含まれている場合、ポッドはサンドボックス内で実行されています。kubectl get pod busybox-runv -o jsonpath={.spec.runtimeClassName}次のコマンドを実行してポッドにログインし、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 の数がホストの CPU の数と同じではないことを示しています。合計メモリは、ポッドメモリとポッドオーバーヘッドの合計です。システムもメモリを消費するため、合計メモリはわずかに小さくなります。