Containers makkelijk beheren met CoreOS
Met Fedoras CoreOS bouw je een server die slechts één taak heeft: diensten uitvoeren in containers. Geheel volgens het wegwerpprincipe van containers zijn handmatige updates en onderhoud niet nodig.
systeem is bedoeld voor reproduceerbare wegwerpservers en werkt het systeem volledig automatisch bij. CoreOS is een minimaal Linux-systeem waarin populaire containertools zoals Docker of Podman zorgen voor het starten en beheren van containers. De voor complexe infrastructuren ontwikkelde container-orchestrator Kubernetes maakt geen deel uit van de distributie, maar kan op verzoek geïnstalleerd worden. Na het opstarten van Fedora werkt CoreOS zelfvoorzienend. Het start de containers op en kan in het beste geval geheel zonder verdere tussenkomst van een beheerder. Om dat doel te bereiken, neemt Fedora CoreOS meteen meerdere maatregelen die verschillen van de manier waarop conventionele
distributies werken. Zo is onder meer niet voorzien in het installeren van softwarepakketten, omdat alle applicaties in containers draaien. Om aanpassingen aan het basissysteem te voorkomen, heeft Fedora CoreOS de volledige /usr-directory als read-only gemount. Bovendien beschermt het security-framework SELinux door zeer strenge toegangsregels tegen potentiële aanvallen.
ZELFSTANDIG
CoreOS kun je heel goed gebruiken om je containers op een of meerdere servers te starten zonder dat er veel energie in het besturingssysteem hoeft te worden gestoken. Het doel is dat je reproduceerbare exemplaren in elkaar zet die naar believen kunnen worden gemaakt of vernietigd – precies zoals bij containers gebruikelijk is.
Om die servers zo eenvoudig en reproduceerbaar te maken, gebeurt het configureren via een YAML-bestand. Wanneer het installatiemedium gestart wordt, lanceert Fedora CoreOS automatisch een tool genaamd Ignition. Die tool haalt een door de beheerder aangemaakt configuratiebestand op, leest dat en stelt het systeem vervolgens in volgens de daarin opgegeven specificaties – inclusief alle containers die erop moeten draaien. De set-up omvat naast het aanmaken van gebruikersaccounts ook het aanmaken van Systemd-units en het partitioneren van de harde schijf.
Bovendien werkt het systeem zichzelf automatisch 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 automatisch de oude image opnieuw op. Beheerders kunnen de update ook makkelijk terugdraaien in geval van incompatibiliteiten (roll-back). Voor dat ingenieuze updatemechanisme vertrouwen de Fedora-ontwikkelaars op rpm-ostree. Een server van het Fedora-project stelt eerst een bestandssysteem samen, dat vervolgens het clientsysteem en een bestandssysteem-image downloadt en activeert.
CONFIGURATIEVOORBEELD
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 downloaddeel van CoreOS onder het tabblad ‘Bare Metal & Virtualized’ 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 configuratiebestand voorbereiden.
Als voorbeeld voor dit artikel gebruiken we een CoreOS-configuratie waarvan de resulterende CoreOS-installatie toegankelijk 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 individueel welkomstbericht ziet. Dat illustreert hoe je de configuratiebestanden in het systeem kunt aanpassen. In de gedefinieerde container draait alleen een Nextcloud-instance. Met deze basiskennis kun je ook complexe omgevingen met CoreOS implementeren.
Het configureren van Fedora CoreOS bestaat voor een beheerder uit verschillende, soms niet echt triviale stappen. Eerst moet hij het configuratiebestand in YAML-formaat aanmaken. Het resultaat moet dan worden overgedragen aan de startende Fedora CoreOS. In het eenvoudigste geval staat het configuratiebestand op een webserver, waar het dan met behulp van curl gedownload kan worden.
Bij het maken van het configuratiebestand 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 gegenereerd door ssh-keygen, dat op de meeste Linux-distributies wel geïnstalleerd is. Nadat je de vragen van het programma beantwoord hebt, open je het bestand id_rsh.pub in de (verborgen) subdirectory .ssh en kopieer je de inhoud ervan tussen de aanhalingstekens 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 bijbehorende 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 willekeurige salt-waarde. Voer de gegenereerde hash in na password_hash. Met groups:
wordt vastgelegd tot welke gebruikersgroepen de gebruiker behoort. In het voorbeeld kan de gebruiker tim op Fedora CoreOS inloggen en systeembeheerrechten krijgen met sudo en Docker-containers draaien.
CONFIGURATIE-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 voorbeeldconfiguratie overschreven 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 configuratiebestand. Met mode: stel je dan de toegangsrechten nog in.
In het deel systemd: zijn onder het deel units: Systemd-units op het systeem te installeren. 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 bovengenoemde kent Ignition nog veel meer instellingen. Je kunt bijvoorbeeld bestanden downloaden van webservers, de harde schijf partitioneren en een RAID instellen. Al die opties worden beschreven bij de specificatie, die je kunt vinden op GitHub bij het FCCT-project.
CONFIGURATIE DOORGEVEN
Sla het configuratiebestand op als simple.ffc. Je moet dan de Fedora CoreOS Configuration Transpiler (FCCT) toepassen op dat bestand. Dat zet de configuratie om naar het JSON-formaat dat nodig is voor
Ignition. Als je Docker of Podman al op je systeem geïnstalleerd 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 standaardinput en het geconverteerde bestand naar de standaardoutput schrijft, zorgen de vishaken voor de juiste omleidingen.
Je kunt FCCT ook vinden op GitHub voor verschillende besturingssystemen als een direct uitvoerbaar programma. Als Linux-gebruiker kun je het bestand
fcct-x86_64-unknown-linuxgnu pakken, dat hernoemen naar fcct en markeren als uitvoerbaar. Voer vervolgens FCCT uit op het configuratiebestand:
fcct -p -s -o simple.ign simple.fcc
WAKKER WORDEN
Je moet het gegenereerde bestand simple.ign dan beschikbaar stellen voor Fedora CoreOS, zodat het zichzelf bij de eerste keer opstarten daarmee kan configureren. De ontwikkelaars advizeren daar een webserver voor. Bij de meeste Linux-distributies kun je die gewoon opstarten met python3 -m http.server.
Die minimalistische 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 alternatief voor het gebruik van een webserver, kopieer je simple.ign naar een extern medium of naar een medium dat in het doelsysteem ingebouwd is.
Je kunt dan de gedownloade CoreOS-image starten. Het installatiesysteem heeft minimaal 3 GB werkgeheugen nodig, met minder RAM zal het opstartproces al meteen stoppen. Het volledig geïnstalleerde systeem is echter al tevreden met 2 GB. Wanneer je CoreOS in een virtuele machine start, kun je
een kant-en-klaar installatiebestand gebruiken voor een 64-bit Fedora. De hoeveelheid benodigde ruimte op de harde schijf is afhankelijk van de op te starten containers, maar bij een virtuele machine heb je waarschijnlijk 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 installeren verloren.
Het installatiesysteem krijgt bij het opstarten automatisch een IP-adres van alle bestaande interfaces via DHCP. De networkmanager doet dat op de achtergrond. 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 commandline. Mocht de loginformatie de weergave blokkeren, dan druk je eenmaal op de Enter-toets.
Zorg ervoor dat het installatiesysteem is aangesloten op internet. Indien nodig kun je de tool nmcli
van de networkmanager gebruiken om het netwerk in te stellen en bijvoorbeeld 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 configuratiebestand 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 configuratiebestand naar de huidige directory. Dan kun je de installatie van CoreOS starten: sudo coreos-installer install /dev/sda –-ignition simple.ign
In dat commando staat fedora-coreos-qemu. qcow2 voor de gedownloade en uitgepakte Fedora CoreOS-image voor QEMU. Na het opstarten van CoreOS controleert de tool Zincati regelmatig op updates. Als er een beschikbaar is, wordt dat gemeld bij rpm-ostree om het te installeren en over te schakelen naar de nieuwe image.Het hele systeem wordt één keer opnieuw opgestart. Aangezien dat de lopende diensten onderbreekt, 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 ondersteunen, dat op zijn beurt gebaseerd is op HTTP. Een beschrijving daarvan valt buiten het bestek van dit artikel, maar kun je vinden in de Zincati-documentatie (zie de link). Als een update mislukt, houd je de Shift-toets ingedrukt tijdens het opstarten van het systeem. Daardoor wordt automatisch overgeschakeld naar het oude systeem. Om een roll-back uit te voeren, log je in op CoreOS en voer je
uit.
BEPERKINGEN
Het voorbeeld laat zien hoe snel je een eenvoudige CoreOS-installatie kunt implementeren met een eenvoudige container. Als je eenmaal gewend bent aan de manier waarop de Ignition-configuratie werkt, zijn de YAML-configuraties makkelijk op te stellen. Als je bestaande systemen wilt verplaatsen, 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 installeren. Ook het vrijgeven van de Docker-socket voor internet is geen probleem. Je kunt dus containers op de server starten vanaf je werkcomputer zonder de commandline.
De mogelijkheden van Ignition zijn momenteel beperkt. De tool zelf kan bijvoorbeeld geen netwerkconfiguratie wijzigen. Om dat te doen, moet je de juiste configuratiebestanden opgeven bij de sectie
Fedora CoreOS en Ignition werken in de praktijk soepel en zonder problemen, en die distributie 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 ontwikkeling en de geplande functies kunnen gevolgd worden op GitHub.