Kata Konteynerlerine kısa bir genel bakış ve kurulum

Kata Konteynerlerine kısa bir genel bakış ve kurulum
Bu makale nasıl çalıştığını tartışacak Kata Konteynerleri, ayrıca Docker ile bağlantılarının olduğu pratik bir kısım da olacak.

Docker ile ilgili yaygın sorunlar ve çözümleri hakkında zaten yazıldı, bugün kısaca Kata Container'lardan uygulamayı anlatacağım. Kata Containers, hafif sanal makinelere dayalı güvenli bir konteyner çalışma zamanıdır. Onlarla çalışmak, diğer konteynerlerle aynıdır, ancak ek olarak, donanım sanallaştırma teknolojisi kullanılarak daha güvenilir bir izolasyon vardır. Proje, aynı adlı topluluğun Intel Clear Containers ve Hyper.sh RunV'den en iyi fikirlerin birleşmesini tamamladığı 2017 yılında başladı ve ardından AMD64, ARM, IBM p- ve z dahil olmak üzere çeşitli mimariler için destek çalışmalarına devam edildi. -seri. Ek olarak, QEMU, Firecracker hipervizörleri içinde çalışma desteklenir ve ayrıca containerd ile entegrasyon vardır. Kod şu adreste mevcuttur: GitHub MIT lisansı altında.

Ana özellikleri

  • Ayrı bir çekirdek ile çalışarak ağ, bellek ve I/O izolasyonu sağlayarak, sanallaştırma uzantılarına dayalı donanım izolasyonu kullanımını zorlamak mümkündür.
  • OCI (kapsayıcı biçimi), Kubernetes CRI dahil olmak üzere endüstri standartları desteği
  • Normal Linux kapsayıcılarının tutarlı performansı, normal VM'lerin performans ek yükü olmadan artırılmış izolasyon
  • Kapsayıcıları tam teşekküllü sanal makinelerde çalıştırma ihtiyacını ortadan kaldırın, genel arabirimler entegrasyonu ve başlatmayı basitleştirir

Montaj

Var set kurulum seçenekleri, Centos 7 işletim sistemine dayalı depolardan kurulum yapmayı düşüneceğim.
Bu çok önemli: Kata Containers çalışması yalnızca donanım üzerinde desteklenir, sanallaştırma iletme her zaman çalışmaz, ayrıca sse4.1 desteğine ihtiyacınız var işlemciden.

Kata Konteynerlerini kurmak oldukça basittir:

Depolarla çalışmak için yardımcı programları yükleyin:

# yum -y install yum-utils

Selinux'u devre dışı bırakın (yapılandırmak daha doğru, ancak basitlik için devre dışı bırakıyorum):

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

Depoyu bağlarız ve kurulumu gerçekleştiririz

# 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

Ayar

Docker ile çalışmak için kurulum yapacağım, kurulumu tipik, daha ayrıntılı olarak açıklamayacağım:

# 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'da değişiklikler yapıyoruz:

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

Docker'ı yeniden başlat:

# service docker restart

Fonksiyonel test

Kapsayıcıyı docker'ı yeniden başlatmadan önce başlatırsanız, uname'nin ana sistemde çalışan çekirdeğin sürümünü vereceğini görebilirsiniz:

# 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

Yeniden başlatmanın ardından, çekirdek sürümü şöyle görünür:

# 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

Daha fazla takım!

# 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

Hızlı yük testi

Sanallaştırmadan kaynaklanan kayıpları değerlendirmek için - ana örnek olarak sysbench'i çalıştırıyorum bu seçeneği al.

Sysbench'i Docker+containerd kullanarak çalıştırma

işlemci testi

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

bellek testi

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

Sysbench'i Docker+Kata Kapsayıcılarını kullanarak çalıştırma

işlemci testi

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

bellek testi

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

Prensip olarak, durum zaten açık, ancak testleri birkaç kez yapmak, aykırı değerleri kaldırmak ve sonuçların ortalamasını almak daha uygun, bu yüzden henüz daha fazla test yapmıyorum.

Bulgular

Bu tür kapların başlatılması yaklaşık beş ila on kat daha uzun sürmesine rağmen (containd kullanırken benzer komutlar için tipik çalışma süresi saniyenin üçte birinden daha azdır), mutlak başlangıç ​​zamanını alırsak (orada) yine de oldukça hızlı çalışırlar. yukarıdaki örnekler, ortalama üç saniyede gerçekleştirilen komutlar). Hızlı bir CPU ve RAM testinin sonuçları, özellikle izolasyonun kvm gibi iyi çalışan bir mekanizma kullanılarak sağlandığı gerçeği ışığında, sevinmekten başka bir şey yapamayan hemen hemen aynı sonuçları gösteriyor.

Duyuru

Makale bir incelemedir, ancak size alternatif çalışma zamanını hissetme fırsatı verir. Birçok uygulama alanı kapsanmamaktadır, örneğin site, Kubernetes'i Kata Konteynerlerinin üzerinde çalıştırma olasılığını açıklamaktadır. Ek olarak, güvenlik sorunlarını bulmaya, kısıtlamaları belirlemeye ve diğer ilginç şeylere odaklanan bir dizi test de çalıştırabilirsiniz.

Burayı okuyan ve geri saran herkesten, bu konuyla ilgili gelecekteki yayınların bağlı olacağı ankete katılmalarını rica ediyorum.

Ankete sadece kayıtlı kullanıcılar katılabilir. Giriş yapLütfen.

Kata Konteynerleri hakkında makaleler yayınlamaya devam etmeli miyim?

  • %80,0Evet, daha fazla yaz!28

  • %20,0Hayır, yapma…7

35 kullanıcı oy kullandı. 7 kişi çekimser kaldı.

Kaynak: habr.com

Yorum ekle