C’t Magazine

Containers makkelijk beheren met CoreOS

-

Met Fedoras CoreOS bouw je een server die slechts één taak heeft: diensten uitvoeren in containers. Geheel volgens het wegwerppri­ncipe van containers zijn handmatige updates en onderhoud niet nodig.

systeem is bedoeld voor reproducee­rbare wegwerpser­vers en werkt het systeem volledig automatisc­h bij. CoreOS is een minimaal Linux-systeem waarin populaire containert­ools zoals Docker of Podman zorgen voor het starten en beheren van containers. De voor complexe infrastruc­turen ontwikkeld­e container-orchestrat­or Kubernetes maakt geen deel uit van de distributi­e, maar kan op verzoek geïnstalle­erd worden. Na het opstarten van Fedora werkt CoreOS zelfvoorzi­enend. Het start de containers op en kan in het beste geval geheel zonder verdere tussenkoms­t van een beheerder. Om dat doel te bereiken, neemt Fedora CoreOS meteen meerdere maatregele­n die verschille­n van de manier waarop convention­ele

distributi­es werken. Zo is onder meer niet voorzien in het installere­n van softwarepa­kketten, omdat alle applicatie­s in containers draaien. Om aanpassing­en aan het basissyste­em te voorkomen, heeft Fedora CoreOS de volledige /usr-directory als read-only gemount. Bovendien beschermt het security-framework SELinux door zeer strenge toegangsre­gels tegen potentiële aanvallen.

ZELFSTANDI­G

CoreOS kun je heel goed gebruiken om je containers op een of meerdere servers te starten zonder dat er veel energie in het besturings­systeem hoeft te worden gestoken. Het doel is dat je reproducee­rbare exemplaren in elkaar zet die naar believen kunnen worden gemaakt of vernietigd – precies zoals bij containers gebruikeli­jk is.

Om die servers zo eenvoudig en reproducee­rbaar te maken, gebeurt het configurer­en via een YAML-bestand. Wanneer het installati­emedium gestart wordt, lanceert Fedora CoreOS automatisc­h een tool genaamd Ignition. Die tool haalt een door de beheerder aangemaakt configurat­iebestand op, leest dat en stelt het systeem vervolgens in volgens de daarin opgegeven specificat­ies – inclusief alle containers die erop moeten draaien. De set-up omvat naast het aanmaken van gebruikers­accounts ook het aanmaken van Systemd-units en het partitione­ren van de harde schijf.

Bovendien werkt het systeem zichzelf automatisc­h bij tijdens het gebruik. Fedora CoreOS downloadt dan een actuele snapshot van het systeem en schakelt na een reboot gewoon over naar dat nieuwe fundament. Als de update mislukt, start Fedora CoreOS automatisc­h de oude image opnieuw op. Beheerders kunnen de update ook makkelijk terugdraai­en in geval van incompatib­iliteiten (roll-back). Voor dat ingenieuze updatemech­anisme vertrouwen de Fedora-ontwikkela­ars op rpm-ostree. Een server van het Fedora-project stelt eerst een bestandssy­steem samen, dat vervolgens het clientsyst­eem en een bestandssy­steem-image downloadt en activeert.

CONFIGURAT­IEVOORBEEL­D

De eerste stappen met CoreOS zijn bijzonder eenvoudig te nemen met behulp van de officiële ISO-image.

Alle downloads en links die hier worden genoemd zijn te vinden via de link op de laatste pagina van dit artikel. Op de Fedora-website is de image verstopt in het downloadde­el van CoreOS onder het tabblad ‘Bare Metal & Virtualize­d’ aan de linkerkant onder ‘Bare Metal’. De ISO-image is slechts ongeveer 650 MB groot en past zelfs op een cd. Voordat je echter een echt systeem of een virtuele machine opstart, moet je een configurat­iebestand voorbereid­en.

Als voorbeeld voor dit artikel gebruiken we een CoreOS-configurat­ie waarvan de resulteren­de CoreOS-installati­e toegankeli­jk moet zijn voor twee gebruikers en starten we een Systemd-service-unit als container (zie de listing op de volgende pagina). Daarnaast wordt het bestand /etc/motd aangepast zodat je bij het inloggen via SSH een individuee­l welkomstbe­richt ziet. Dat illustreer­t hoe je de configurat­iebestande­n in het systeem kunt aanpassen. In de gedefiniee­rde container draait alleen een Nextcloud-instance. Met deze basiskenni­s kun je ook complexe omgevingen met CoreOS implemente­ren.

Het configurer­en van Fedora CoreOS bestaat voor een beheerder uit verschille­nde, soms niet echt triviale stappen. Eerst moet hij het configurat­iebestand in YAML-formaat aanmaken. Het resultaat moet dan worden overgedrag­en aan de startende Fedora CoreOS. In het eenvoudigs­te geval staat het configurat­iebestand op een webserver, waar het dan met behulp van curl gedownload kan worden.

Bij het maken van het configurat­iebestand moet je ervoor zorgen dat je het inspringen consistent doorvoert, oftewel altijd met de Tab-toets of met twee spaties. Regels die beginnen met het hashteken # fungeren als commentaar. Achter variant: staat

core een publieke SSH-sleutel toegewezen achter ssh_authorized_keys. Die SSH-sleutel kan worden gegenereer­d door ssh-keygen, dat op de meeste Linux-distributi­es wel geïnstalle­erd is. Nadat je de vragen van het programma beantwoord hebt, open je het bestand id_rsh.pub in de (verborgen) subdirecto­ry .ssh en kopieer je de inhoud ervan tussen de aanhalings­tekens achter ssh_authorized. Die sleutel komt later in de home-directory van de gebruiker in het bestand . ssh/authorized_keys.d/ ignition terecht.

Je kunt ook (extra) een normaal wachtwoord toekennen. Om dat te kunnen doen, moet je echter eerst de bijbehoren­de SHA512-hash aanmaken met openssl, zoals die ook in het bestand /etc/shadow

wordt opgeslagen: openssl passwd -6 -salt jouwsalt 123456 Vervang 123456 door je wachtwoord en jouwsalt

voor een willekeuri­ge salt-waarde. Voer de gegenereer­de hash in na password_hash. Met groups:

wordt vastgelegd tot welke gebruikers­groepen de gebruiker behoort. In het voorbeeld kan de gebruiker tim op Fedora CoreOS inloggen en systeembeh­eerrechten krijgen met sudo en Docker-containers draaien.

CONFIGURAT­IE-OPTIES

Ignition maakt op aanvraag ook bestanden aan. Het voorbeeld schrijft de tekst ‘Hello World!’ in het bestand /etc/motd. De ‘Message Of The Day’ die daar is opgeslagen zal door alle gebruikers worden gezien als ze inloggen. Achter path: staat het volledige pad naar het bestand. Als het bestand al bestaat, wordt het met deze voorbeeldc­onfigurati­e overschrev­en door overwrite: true. De eigenlijke inhoud volgt onder contents. In het voorbeeld is de tekst erg kort en daarom wordt die direct inline: geschreven in het configurat­iebestand. Met mode: stel je dan de toegangsre­chten nog in.

In het deel systemd: zijn onder het deel units: Systemd-units op het systeem te installere­n. Het voorbeeld maakt een service genaamd nextcloud.service, die een Podman-container met Nextcloud opstart, maar eerder bestaande Nextcloud-containers verwijdert. Met enabled: true zorg je ervoor dat Systemd de unit ook activeert. De inhoud van de unit staat achter contents: |, de daarop volgende tekst wordt door Ingnition later in het bestand nextcloud.service geschreven.

Naast de bovengenoe­mde kent Ignition nog veel meer instelling­en. Je kunt bijvoorbee­ld bestanden downloaden van webservers, de harde schijf partitione­ren en een RAID instellen. Al die opties worden beschreven bij de specificat­ie, die je kunt vinden op GitHub bij het FCCT-project.

CONFIGURAT­IE DOORGEVEN

Sla het configurat­iebestand op als simple.ffc. Je moet dan de Fedora CoreOS Configurat­ion Transpiler (FCCT) toepassen op dat bestand. Dat zet de configurat­ie om naar het JSON-formaat dat nodig is voor

Ignition. Als je Docker of Podman al op je systeem geïnstalle­erd hebt, kun je FCCT starten met het volgende commando in een geschikte container:

docker run -i --rm quay.io/coreos/fcct:release --pretty --strict < simple.ffc > simple.ign Indien nodig vervang je docker door podman. Aangezien FCCT input verwacht via standaardi­nput en het geconverte­erde bestand naar de standaardo­utput schrijft, zorgen de vishaken voor de juiste omleidinge­n.

Je kunt FCCT ook vinden op GitHub voor verschille­nde besturings­systemen als een direct uitvoerbaa­r programma. Als Linux-gebruiker kun je het bestand

fcct-x86_64-unknown-linuxgnu pakken, dat hernoemen naar fcct en markeren als uitvoerbaa­r. Voer vervolgens FCCT uit op het configurat­iebestand:

fcct -p -s -o simple.ign simple.fcc

WAKKER WORDEN

Je moet het gegenereer­de bestand simple.ign dan beschikbaa­r stellen voor Fedora CoreOS, zodat het zichzelf bij de eerste keer opstarten daarmee kan configurer­en. De ontwikkela­ars advizeren daar een webserver voor. Bij de meeste Linux-distributi­es kun je die gewoon opstarten met python3 -m http.server.

Die minimalist­ische webserver in Python geeft toegang tot de bestanden in de huidige directory en is voldoende voor een eerste test. De Python-webserver luistert op poort 8000, waar de firewalls op je systemen dan wel toegang toe moeten verlenen. Als alternatie­f voor het gebruik van een webserver, kopieer je simple.ign naar een extern medium of naar een medium dat in het doelsystee­m ingebouwd is.

Je kunt dan de gedownload­e CoreOS-image starten. Het installati­esysteem heeft minimaal 3 GB werkgeheug­en nodig, met minder RAM zal het opstartpro­ces al meteen stoppen. Het volledig geïnstalle­erde systeem is echter al tevreden met 2 GB. Wanneer je CoreOS in een virtuele machine start, kun je

een kant-en-klaar installati­ebestand gebruiken voor een 64-bit Fedora. De hoeveelhei­d benodigde ruimte op de harde schijf is afhankelij­k van de op te starten containers, maar bij een virtuele machine heb je waarschijn­lijk genoeg aan 30 GB voor een eerste test. CoreOS neemt in ieder geval meteen de gehele harde schijf in beslag, en alle gegevens die erop staan zijn na het installere­n verloren.

Het installati­esysteem krijgt bij het opstarten automatisc­h een IP-adres van alle bestaande interfaces via DHCP. De networkman­ager doet dat op de achtergron­d. Als je gebruik maakt van statische IP-adressen in je netwerk, zal het starten iets langer duren. In ieder geval kom je uit bij een commandlin­e. Mocht de loginforma­tie de weergave blokkeren, dan druk je eenmaal op de Enter-toets.

Zorg ervoor dat het installati­esysteem is aangeslote­n op internet. Indien nodig kun je de tool nmcli

van de networkman­ager gebruiken om het netwerk in te stellen en bijvoorbee­ld aan de interface eth0

het statische IP-adres 192.168.1.5 toewijzen: nmcli c add type ethernet con-name static1 ifname eth0 ip4 192.168.1.5/24 gw4 192.168.1.1 nmcli c up static1

STARTEN MAAR

Het configurat­iebestand haal je dan met curl van de webserver met het volgende commando, waarbij het IP-adres en de poort moeten vervangen door die van je webserver: curl -LO http://192. 168.1.101:8000/simple.ign

Als je het bestand simple.ign naar een schijf hebt gekopieerd, koppel die dan met sudo mount en kopieer het configurat­iebestand naar de huidige directory. Dan kun je de installati­e van CoreOS starten: sudo coreos-installer install /dev/sda –-ignition simple.ign

In dat commando staat fedora-coreos-qemu. qcow2 voor de gedownload­e en uitgepakte Fedora CoreOS-image voor QEMU. Na het opstarten van CoreOS controleer­t de tool Zincati regelmatig op updates. Als er een beschikbaa­r is, wordt dat gemeld bij rpm-ostree om het te installere­n en over te schakelen naar de nieuwe image.Het hele systeem wordt één keer opnieuw opgestart. Aangezien dat de lopende diensten onderbreek­t, kan Zincati luisteren naar een externe Lock Manager die bepaalt wanneer elke node in een cluster mag herstarten. In het geval van Zincati moet de Lock Manger het FleetLock-protocol ondersteun­en, dat op zijn beurt gebaseerd is op HTTP. Een beschrijvi­ng daarvan valt buiten het bestek van dit artikel, maar kun je vinden in de Zincati-documentat­ie (zie de link). Als een update mislukt, houd je de Shift-toets ingedrukt tijdens het opstarten van het systeem. Daardoor wordt automatisc­h overgescha­keld naar het oude systeem. Om een roll-back uit te voeren, log je in op CoreOS en voer je

uit.

BEPERKINGE­N

Het voorbeeld laat zien hoe snel je een eenvoudige CoreOS-installati­e kunt implemente­ren met een eenvoudige container. Als je eenmaal gewend bent aan de manier waarop de Ignition-configurat­ie werkt, zijn de YAML-configurat­ies makkelijk op te stellen. Als je bestaande systemen wilt verplaatse­n, kom je eveneens niets tekort. Als je met Docker Compose containers op andere platforms hebt gemaakt, kun je die met CoreOS blijven gebruiken. Je hoeft alleen maar

te installere­n. Ook het vrijgeven van de Docker-socket voor internet is geen probleem. Je kunt dus containers op de server starten vanaf je werkcomput­er zonder de commandlin­e.

De mogelijkhe­den van Ignition zijn momenteel beperkt. De tool zelf kan bijvoorbee­ld geen netwerkcon­figuratie wijzigen. Om dat te doen, moet je de juiste configurat­iebestande­n opgeven bij de sectie

Fedora CoreOS en Ignition werken in de praktijk soepel en zonder problemen, en die distributi­e dient als basis voor RedHat CoreOS. Als je op zoek bent naar een slank Linux-systeem voor containers, moet je zeker een kijkje nemen bij CoreOS. De ontwikkeli­ng en de geplande functies kunnen gevolgd worden op GitHub.

Newspapers in Dutch

Newspapers from Netherlands