
Bu makale nasıl çalıştığını tartışacak , 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 , 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: 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 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-utilsSelinux'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/configDepoyu 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-shimAyar
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 369ce74a3cDaemon.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"
}
}
}
EOFDocker'ı yeniden başlat:
# service docker restartFonksiyonel 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/LinuxYeniden 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/LinuxDaha 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.050sHızlı yük testi
Sanallaştırmadan kaynaklanan kayıpları değerlendirmek için - ana örnek olarak sysbench'i çalıştırıyorum .
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.00bellek 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.00Sysbench'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.00bellek 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.00Prensip 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. Lütfen.
Kata Konteynerleri hakkında makaleler yayınlamaya devam etmeli miyim?
80,0%Evet, daha fazla yaz!28
20,0%Hayır, yapma…7
35 kullanıcı oy kullandı. 7 kişi çekimser kaldı.
Kaynak: habr.com
