Questo articolo discuterà come funziona
Su problemi comuni con Docker e le loro soluzioni già
Caratteristiche principali
- Lavorando con un core separato, fornendo così l'isolamento di rete, memoria e I/O, è possibile forzare l'uso dell'isolamento hardware basato su estensioni di virtualizzazione
- Supporto per standard di settore tra cui OCI (formato contenitore), Kubernetes CRI
- Prestazioni costanti dei normali container Linux, maggiore isolamento senza il sovraccarico delle prestazioni delle normali macchine virtuali
- Elimina la necessità di eseguire container all'interno di macchine virtuali complete, le interfacce generiche semplificano l'integrazione e il lancio
Installazione
C'è
È importante: Il lavoro di Kata Containers è supportato solo su hardware, anche l'inoltro della virtualizzazione non sempre funziona bisogno di supporto sse4.1 dal processore.
Installare Kata Containers è abbastanza semplice:
Installa le utilità per lavorare con i repository:
# yum -y install yum-utils
Disabilita Selinux (è più corretto configurare, ma per semplicità lo disabilito):
# setenforce 0
# sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
Colleghiamo il repository ed eseguiamo l'installazione
# 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
registrazione
Mi configurerò per lavorare con la finestra mobile, la sua installazione è tipica, non la descriverò in modo più dettagliato:
# 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
Apportiamo modifiche a daemon.json:
# cat <<EOF > /etc/docker/daemon.json
{
"default-runtime": "kata-runtime",
"runtimes": {
"kata-runtime": {
"path": "/usr/bin/kata-runtime"
}
}
}
EOF
Riavvia la finestra mobile:
# service docker restart
Controllo funzionale
Se avvii il contenitore prima di riavviare la finestra mobile, puoi vedere che uname fornirà la versione del kernel in esecuzione sul sistema principale:
# 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
Dopo un riavvio, la versione del kernel si presenta così:
# 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
Più squadre!
# 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
Test di carico rapido
Per valutare le perdite dovute alla virtualizzazione, eseguo sysbench, come esempio principale
Eseguire sysbench usando Docker+containerd
Test del processore
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
Prova RAM
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
Esecuzione di sysbench utilizzando Docker+Kata Containers
Test del processore
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
Prova RAM
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
In linea di principio la situazione è già chiara, ma è più ottimale eseguire i test più volte, rimuovendo i valori anomali e calcolando la media dei risultati, quindi non eseguo ancora altri test.
risultati
Nonostante il fatto che tali contenitori richiedano da cinque a dieci volte più tempo per avviarsi (il tempo di esecuzione tipico per comandi simili quando si utilizza containerd è inferiore a un terzo di secondo), funzionano comunque abbastanza rapidamente se prendiamo l'ora di inizio assoluta (lì sono esempi sopra, comandi eseguiti in media in tre secondi). Ebbene, i risultati di un rapido test di CPU e RAM mostrano quasi gli stessi risultati, il che non può che rallegrarsi, soprattutto alla luce del fatto che l'isolamento viene fornito utilizzando un meccanismo così ben gestito come kvm.
annuncio
L'articolo è una recensione, ma ti dà l'opportunità di sentire il runtime alternativo. Molte aree di applicazione non sono coperte, ad esempio, il sito descrive la possibilità di eseguire Kubernetes su Kata Containers. Inoltre, puoi anche eseguire una serie di test incentrati sulla ricerca di problemi di sicurezza, l'impostazione di restrizioni e altre cose interessanti.
Chiedo a tutti coloro che hanno letto e riavvolto qui di partecipare al sondaggio, da cui dipenderanno le future pubblicazioni su questo argomento.
Solo gli utenti registrati possono partecipare al sondaggio.
Devo continuare a pubblicare articoli su Kata Containers?
-
80,0%Sì, scrivi di più!28
-
20,0%No, non…7
35 utenti hanno votato. 7 utenti si sono astenuti.
Fonte: habr.com