全部產品
Search
文件中心

Container Service for Kubernetes:runC容器和安全沙箱(runV)容器的區別

更新時間:Feb 28, 2024

本文通過對比runC容器和安全沙箱(runV)容器的效能和建立方式,讓您瞭解安全沙箱容器的優勢以便更好地使用安全沙箱容器。

runC容器和安全沙箱(runV)容器方案對比

配置runC容器安全沙箱(runV)容器
容器引擎Docker、ContainerdContainerd
容器所在節點型號ECS、EBMEBM
容器核心與宿主機共用核心獨佔核心
容器隔離方式Cgroups和Namespace輕量虛擬機器
Rootfs Graph DriverOverlayFSOverlayFS
Rootfs IO限速Cgroups
NAS直掛
雲端硬碟直掛
容器記錄檔採集logtail可直接從節點側採集容器內的日誌。logtail sidecar,詳情請參見通過Sidecar-CRD方式採集容器文本日誌
Pod OverheadMemory:M=64 Mi+Pod記憶體申請 *2%。當M>512,M最終取值為512 Mi。當M<64,M最終取值為64。

runC Pod和安全沙箱(runV)Pod的建立方式對比

您可以通過kubectl命令列工具串連Container ServiceKubernetes版(ACK)叢集,請參見擷取叢集KubeConfig並通過kubectl工具串連叢集

  • 建立runC Pod
    1. 可選:通過runtimeClassName: runc指定使用runC容器運行時。
      說明 您也可以不配置,Pod會用預設的容器運行時runC。
    2. 執行以下命令建立runC Pod。
      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指定使用安全沙箱容器運行時。
    2. 可選:執行以下命令查看叢集中已經存在的runv這個RuntimeClass對象。
      kubectl get runtimeclass runv -o yaml
      說明 安全沙箱容器叢集中預設建立了RuntimeClass對象runv
    3. 執行以下命令建立安全沙箱Pod。
      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(不包括1.16),需添加以下nodeSelector配置;如果您的Kubernetes版本在1.16(包括1.16)以上則不需要添加。
      nodeSelector:
          alibabacloud.com/container-runtime: Sandboxed-Container.runv
    4. 執行以下命令查看建立的Pod。如果輸出結果為runv,則表示Pod已經運行在安全沙箱內了。
      kubectl get pod busybox-runv -o jsonpath={.spec.runtimeClassName}
    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核心數並非宿主機CPU核心數,記憶體總大小為Pod記憶體與Overhead記憶體之和(系統會消耗一些記憶體,所以看到的記憶體會少一些)。