Kata 容器的簡要概述和設置

Kata 容器的簡要概述和設置
本文將討論它是如何工作的 卡塔集裝箱,並且還將有一個與 Docker 連接的實際部分。

關於 Docker 的常見問題及其解決方案 被寫,今天簡單介紹一下Kata Containers的實現。 Kata Containers 是一個基於輕量級虛擬機的安全容器運行時。 使用它們與使用其他容器相同,但此外還有使用硬件虛擬化技術的更可靠的隔離。 該項目始於 2017 年,當時同名社區完成了 Intel Clear Containers 和 Hyper.sh RunV 最佳創意的合併,之後繼續致力於支持各種架構,包括 AMD64、ARM、IBM p- 和 z -系列。 此外,虛擬機管理程序 QEMU、Firecracker 內部也支持工作,並且還與 containerd 集成。 該代碼可在 GitHub上 在麻省理工學院的許可下。

主要特點

  • 使用獨立的核心,從而提供網絡、內存和 I/O 隔離,可以強制使用基於虛擬化擴展的硬件隔離
  • 支持行業標準,包括 OCI(容器格式)、Kubernetes CRI
  • 常規 Linux 容器的一致性能,增強隔離性,而無需常規虛擬機的性能開銷
  • 無需在成熟的虛擬機內運行容器,通用接口簡化了集成和啟動

安裝

許多 安裝選項,我會考慮從基於 Centos 7 操作系統的存儲庫安裝。
這一點很重要:Kata Containers 工作僅在硬件上受支持,虛擬化轉發並不總是有效,而且 需要sse4.1支持 來自處理器。

安裝 Kata 容器非常簡單:

安裝用於使用存儲庫的實用程序:

# yum -y install yum-utils

禁用Selinux(配置更正確,但為了簡單起見我禁用它):

# setenforce 0
# sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config

我們連接存儲庫並執行安裝

# source /etc/os-release
# ARCH=$(arch)
# BRANCH="${BRANCH:-stable-1.10}"
# yum-config-manager --add-repo "http://download.opensuse.org/repositories/home:/katacontainers:/releases:/${ARCH}:/${BRANCH}/CentOS_${VERSION_ID}/home:katacontainers:releases:${ARCH}:${BRANCH}.repo"
# yum -y install kata-runtime kata-proxy kata-shim

調整

我將設置與 docker 一起工作,它的安裝是典型的,我不會更詳細地描述它:

# rpm -qa | grep docker
docker-ce-cli-19.03.6-3.el7.x86_64
docker-ce-19.03.6-3.el7.x86_64
# docker -v
Docker version 19.03.6, build 369ce74a3c

我們對 daemon.json 進行更改:

# cat <<EOF > /etc/docker/daemon.json
{
  "default-runtime": "kata-runtime",
  "runtimes": {
    "kata-runtime": {
      "path": "/usr/bin/kata-runtime"
    }
  }
}
EOF

重新啟動碼頭工人:

# service docker restart

功能測試

如果在重新啟動 docker 之前啟動容器,您可以看到 uname 將給出主系統上運行的內核版本:

# docker run busybox uname -a
Linux 19efd7188d06 3.10.0-1062.12.1.el7.x86_64 #1 SMP Tue Feb 4 23:02:59 UTC 2020 x86_64 GNU/Linux

重啟後,內核版本如下:

# docker run busybox uname -a
Linux 9dd1f30fe9d4 4.19.86-5.container #1 SMP Sat Feb 22 01:53:14 UTC 2020 x86_64 GNU/Linux

更多團隊!

# time docker run busybox mount
kataShared on / type 9p (rw,dirsync,nodev,relatime,mmap,access=client,trans=virtio)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
tmpfs on /dev type tmpfs (rw,nosuid,size=65536k,mode=755)
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=666)
sysfs on /sys type sysfs (ro,nosuid,nodev,noexec,relatime)
tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,relatime,mode=755)
cgroup on /sys/fs/cgroup/systemd type cgroup (ro,nosuid,nodev,noexec,relatime,xattr,name=systemd)
cgroup on /sys/fs/cgroup/cpu,cpuacct type cgroup (ro,nosuid,nodev,noexec,relatime,cpu,cpuacct)
cgroup on /sys/fs/cgroup/blkio type cgroup (ro,nosuid,nodev,noexec,relatime,blkio)
cgroup on /sys/fs/cgroup/memory type cgroup (ro,nosuid,nodev,noexec,relatime,memory)
cgroup on /sys/fs/cgroup/devices type cgroup (ro,nosuid,nodev,noexec,relatime,devices)
cgroup on /sys/fs/cgroup/perf_event type cgroup (ro,nosuid,nodev,noexec,relatime,perf_event)
cgroup on /sys/fs/cgroup/net_cls,net_prio type cgroup (ro,nosuid,nodev,noexec,relatime,net_cls,net_prio)
cgroup on /sys/fs/cgroup/freezer type cgroup (ro,nosuid,nodev,noexec,relatime,freezer)
cgroup on /sys/fs/cgroup/pids type cgroup (ro,nosuid,nodev,noexec,relatime,pids)
cgroup on /sys/fs/cgroup/cpuset type cgroup (ro,nosuid,nodev,noexec,relatime,cpuset)
mqueue on /dev/mqueue type mqueue (rw,nosuid,nodev,noexec,relatime)
shm on /dev/shm type tmpfs (rw,nosuid,nodev,noexec,relatime,size=65536k)
kataShared on /etc/resolv.conf type 9p (rw,dirsync,nodev,relatime,mmap,access=client,trans=virtio)
kataShared on /etc/hostname type 9p (rw,dirsync,nodev,relatime,mmap,access=client,trans=virtio)
kataShared on /etc/hosts type 9p (rw,dirsync,nodev,relatime,mmap,access=client,trans=virtio)
proc on /proc/bus type proc (ro,relatime)
proc on /proc/fs type proc (ro,relatime)
proc on /proc/irq type proc (ro,relatime)
proc on /proc/sys type proc (ro,relatime)
tmpfs on /proc/acpi type tmpfs (ro,relatime)
tmpfs on /proc/timer_list type tmpfs (rw,nosuid,size=65536k,mode=755)
tmpfs on /sys/firmware type tmpfs (ro,relatime)

real    0m2.381s
user    0m0.066s
sys 0m0.039s

# time docker run busybox free -m
              total        used        free      shared  buff/cache   available
Mem:           1993          30        1962           0           1        1946
Swap:             0           0           0

real    0m3.297s
user    0m0.086s
sys 0m0.050s

快速負載測試

為了評估虛擬化帶來的損失 - 我運行 sysbench,作為主要示例 採取這個選項.

使用 Docker+containerd 運行 sysbench

處理器測試

sysbench 1.0:  multi-threaded system evaluation benchmark

Running the test with following options:
Number of threads: 1
Initializing random number generator from current time

Prime numbers limit: 20000

Initializing worker threads...

Threads started!

General statistics:
    total time:                          36.7335s
    total number of events:              10000
    total time taken by event execution: 36.7173s
    response time:
         min:                                  3.43ms
         avg:                                  3.67ms
         max:                                  8.34ms
         approx.  95 percentile:               3.79ms

Threads fairness:
    events (avg/stddev):           10000.0000/0.00
    execution time (avg/stddev):   36.7173/0.00

內存測試

sysbench 1.0:  multi-threaded system evaluation benchmark

Running the test with following options:
Number of threads: 1
Initializing random number generator from current time

Initializing worker threads...

Threads started!

Operations performed: 104857600 (2172673.64 ops/sec)

102400.00 MiB transferred (2121.75 MiB/sec)

General statistics:
    total time:                          48.2620s
    total number of events:              104857600
    total time taken by event execution: 17.4161s
    response time:
         min:                                  0.00ms
         avg:                                  0.00ms
         max:                                  0.17ms
         approx.  95 percentile:               0.00ms

Threads fairness:
    events (avg/stddev):           104857600.0000/0.00
    execution time (avg/stddev):   17.4161/0.00

使用 Docker+Kata 容器運行 sysbench

處理器測試

sysbench 1.0:  multi-threaded system evaluation benchmark

Running the test with following options:
Number of threads: 1
Initializing random number generator from current time

Prime numbers limit: 20000

Initializing worker threads...

Threads started!

General statistics:
    total time:                          36.5747s
    total number of events:              10000
    total time taken by event execution: 36.5594s
    response time:
         min:                                  3.43ms
         avg:                                  3.66ms
         max:                                  4.93ms
         approx.  95 percentile:               3.77ms

Threads fairness:
    events (avg/stddev):           10000.0000/0.00
    execution time (avg/stddev):   36.5594/0.00

內存測試

sysbench 1.0:  multi-threaded system evaluation benchmark

Running the test with following options:
Number of threads: 1
Initializing random number generator from current time

Initializing worker threads...

Threads started!

Operations performed: 104857600 (2450366.94 ops/sec)

102400.00 MiB transferred (2392.94 MiB/sec)

General statistics:
    total time:                          42.7926s
    total number of events:              104857600
    total time taken by event execution: 16.1512s
    response time:
         min:                                  0.00ms
         avg:                                  0.00ms
         max:                                  0.43ms
         approx.  95 percentile:               0.00ms

Threads fairness:
    events (avg/stddev):           104857600.0000/0.00
    execution time (avg/stddev):   16.1512/0.00

原則上,情況已經很清楚了,但是最好運行幾次測試,刪除異常值並對結果進行平均,所以我還沒有做更多的測試。

發現

儘管事實上這樣的容器需要大約五到十倍的時間來啟動(使用containerd時類似命令的典型運行時間不到三分之一秒),但如果我們採用絕對啟動時間(有上面是示例,命令平均執行時間為三秒)。 好吧,對 CPU 和 RAM 的快速測試結果顯示幾乎相同的結果,這不能不令人高興,特別是考慮到使用 kvm 這樣運行良好的機制提供隔離。

公告

這篇文章是一篇評論,但它讓您有機會感受另類運行時。 許多應用領域都沒有涵蓋,例如,該網站描述了在 Kata 容器之上運行 Kubernetes 的能力。 此外,您還可以運行一系列測試,重點關注查找安全問題、設置限制和其他有趣的事情。

我請求所有閱讀並回顧此處的人參與這項調查,該主題的未來出版物將取決於該調查。

只有註冊用戶才能參與調查。 登入, 請。

我應該繼續發表有關 Kata Containers 的文章嗎?

  • 企業排放佔全球 80,0%是的,多寫點!28

  • 企業排放佔全球 20,0%不,不要……7

35 位用戶投票。 7 名用戶棄權。

來源: www.habr.com

添加評論