I en tidligere artikkel kan du utforske hva LXD er og hvordan du kommer i gang med det, i tilfelle du ikke er kjent med plattformen.
I de fleste tilfeller vil du bruke flere containere på samme system for å dele en større helhet i mindre komponenter. Det er fornuftig å begrense mengden ressurser hver komponent kan bruke. Men hvorfor? Åpenbart er antall årsaker like ubegrensede som scenariene du kan bruke containere til.
Når begrensninger på LXD-containere kan være nyttige
- Å tilby en tjeneste og gi hver kunde en LXD-forekomst. Dette kan for eksempel være en stor server, og du er vert for hvert kundenettsted i en separat container. Hvis et nettsted får en plutselig utbrudd av trafikk, kan dette redusere de andre forekomsten. Med begrensninger vil bare en container bremse, og resten vil fungere normalt.
- I et lignende scenario kan du enkelt selge forskjellige serviceplaner. Den ene kunden kan betale for X mengde ressurser, og den andre kan betale for Y-beløpet. Og du kan enkelt justere dette med noen få enkle kommandoer.
- Du kan beskytte deg mot enklere former for Denial of Service-angrep. Når en container blir bombardert, vil den nå grensene for ressursbruk. De andre beholderne blir ikke berørt.
- Du har to containere som hver bruker 100% av CPU-tiden som er tilgjengelig. Imidlertid vil du at en skal fullføre jobben raskere enn den andre. For eksempel kan man gjengi en video for et prosjekt du trenger i morgen. Du kan tilordne 90% av CPU-tiden til den første og 10% til den andre.
Selvfølgelig kan du ha dine egne grunner. Og hvis du bare bruker en container på hele systemet, trenger du kanskje ikke engang dette. Men hvis du bruker flere containere, må du nesten alltid sette noen typer grenser. Fordi et angrep, en feil eller annen form for dårlig oppførsel i en LXD-forekomst kan påvirke hele systemet og bremse det. Jo flere containere du har, jo større øker sannsynligheten for et slikt scenario.
Hvordan sette ressursbegrensninger på LXD-containere
Ressurskontroll knyttet til diskoperasjoner vil trenge at ZFS installeres. Hvis du fulgte veiledningen her, er den allerede installert. Ellers installerer du ZFS-verktøy som beskrevet i opplæringen, og kjører deretter kommandoen på nytt. Velg ZFS når du blir spurt om hvilken lagringsbakgrunn du skal bruke.
sudo lxd init
Begrens minnebruk
I kommandoene nedenfor erstatter du «container_name» med det faktiske navnet på containeren din. Å sette en minnegrense er så enkelt som å angi:
lxc config set container_name limits.memory 100MB
Skriv “GB” i stedet for “MB” hvis du vil bruke gigabyte i stedet for megabyte.
Begrens CPU-bruk
Når du vil begrense hvor mange CPU-kjerner en container kan bruke, skriv inn:
lxc config set container_name limits.cpu 2
For å «feste» til spesifikke CPU-kjerner, bruk:
lxc config set container_name limits.cpu 0-0
Dette vil gjøre at beholderen bare bruker den første CPUen. For å bruke det andre skriver du 1-1. Hvis du vil bruke alle CPU-kjernene fra første til tredje, skriver du 0-3.
En annen type grense er hvor mye CPU-tid en container kan bruke.
lxc config set container_name limits.cpu.allowance 10ms/100ms
Dette ville bare la containeren bruke ti milisekunder CPU-tid ut av hver 100 milisekund, så rundt 10% av en CPU-kjerne.
Begrens diskbruk
For å begrense diskrelaterte ressurser, må du først legge til en rotdiskenhet i beholderen din. Den eksisterer allerede som standard, arvet fra standard LXD-profilen. Men du kan ikke endre innstillingene per container-basis før du gjør dette.
lxc config device add container_name root disk pool=default path=/
Hvis du navngir bassenget ditt annerledes, erstatter du «standard» med navnet på lagringsbassenget ditt. Hvis du har glemt navnet, kan du vise det med:
lxc storage list
For å begrense diskplass kan en LXD-forekomst bruke:
lxc config device set container_name root size 7GB
Dessverre begrenser I / O (les / skriv «hastigheter» og IOPS) fungerer ikke for øyeblikket.
Begrens nettverksbruk
Som med disker, må du først legge til en virtuell Ethernet-enhet som du kan konfigurere. Finn navnet på nettverksbroen din som forbinder dine LXD-forekomster med omverdenen.
lxc network list
Bytt ut “lxdbr0” om nødvendig (hvis broen er navngitt annerledes i ditt tilfelle). Hvis du ikke valgte nettverkstypen som bro (standardsvar), i konfigurasjonstrinnene “lxd init” må du kanskje tilpasse kommandoen nedenfor for å gjenspeile ditt valg. For eksempel kan det hende du må erstatte «nictype» også med det du brukte for LXD-nettverket.
lxc config device add container_name eth0 nic name=eth0 nictype=bridged parent=lxdbr0
Til slutt, sett grenser for nettverksinngang (nedlasting) og / eller utgang (opplasting).
lxc config device set container_name eth0 limits.ingress 1Mbit
1Mbit er en megabit (ikke megabyte). En byte inneholder 8 biter, noe som betyr at dette vil begrense nedlastinger til rundt 1/8 = 0,125 Mbps per sekund, omtrent 120 kilobyte. Så hvis du vil at den skal lastes ned med 1 MB / s (megabyte), multipliser med 8, og sett inngangsgrensen til 8 MB.
For utgang, bruk:
lxc config device set container_name eth0 limits.egress 1Mbit
Konklusjon
Dette dekker de mest brukte egenskapene knyttet til ressursgrenser. Men det er mange flere variabler du kan stille med lxc config device set
og lxc config set
. Du kan Les mer om disse justerbare beholderegenskapene på LXDs GitHub-side.