CoreCP

Releases beheren

Een nieuwe versie van PHP, van de agent of van het paneel zelf gaat niet in één keer naar alle servers. Hij loopt: eerst een soak op het beta-kanaal, dan één canary-machine, dan de vloot in golven, met een wachttijd tussen elk paar en een g

Geschreven voor: Beheerder

Een nieuwe versie van PHP, van de agent of van het paneel zelf gaat niet in één keer naar alle servers. Hij loopt: eerst een soak op het beta-kanaal, dan één canary-machine, dan de vloot in golven, met een wachttijd tussen elk paar en een gezondheidscontrole die het geheel kan stilzetten. Deze pagina gaat over hoe je dat vanuit het paneel stuurt, en hoe je leest wat het je vertelt.

Alleen beheerders zien dit. Resellers en eindklanten zien nooit welke versies er zijn, laat staan welke machine op welke versie staat.

Open Servers → Releases.

De drie vragen die het bord beantwoordt

De pagina staat in de volgorde waarin je ze echt stelt.

1. Mag er nú een golf starten? De banner bovenaan. Groen als de deur open staat, oranje als dat niet zo is — en dan staat er in een hele zin waarom: een zaterdag, een feestdag, of een incident dat iemand heeft geopend.

2. Wat wacht er op mij? De pijplijn. Elke versie met een badge voor zijn risicoklasse, zijn kanaal, en hoe ver de soak is.

3. Welke machines raakt hij als eerste? De golfgroepen, onderaan. Sleep een server van de ene kaart naar de andere om de volgorde te veranderen waarin de vloot wordt bijgewerkt.

Risicoklassen

De badge op elke release bepaalt alles aan de manier waarop hij reist.

  • minor-runtime — een PHP-patch, een LiteSpeed-build. Op de node blijft er niets van achter, dus een downgrade is een echt antwoord, en het paneel zet hem zelf door zodra de soak schoon is.
  • platform — de agent, of het paneel. Doorzetten gebeurt pas als een mens klikt, de canary is minstens drie machines waaronder een drukke, en het paneel rolt vooruit in plaats van terug: een database die gemigreerd is, migreert niet terug omdat een binary achteruit ging.
  • security-critical — een fix die niet kan wachten. De timers krimpen. Verder niets.

Een onbekend pakket wordt als platform behandeld; dat is het behoudende antwoord. Onder Geavanceerd → risicoklassen overschrijf je de klasse van een pakket als de naamregel het misslaat.

Een release goedkeuren

Een release waarvan de klasse een mens vereist krijgt de status awaiting_approval, en de banner bovenaan telt ze. Open hem om het bewijs te zien:

Soakhoeveel dagen hij op beta staat, tegenover wat zijn klasse vraagt
Canaryhoeveel canary-machines hem namen, en hoeveel hun gate haalden
Foutlogshoe hard de foutlogs van klanten groeiden, als factor van ervoor
Blootstellinghoeveel synthetische verzoeken er echt geslaagd zijn

Dit zijn dezelfde vier getallen waarop het paneel een minor-runtime-release zelf doorzet. Er is geen tweede, verborgen set.

Is de soak schoon, dan zet Goedkeuren hem naar het volgende kanaal. Is hij dat niet, dan leest de knop Toch goedkeuren en is een reden verplicht — die komt met jouw naam in het promotieregister en blijft daar staan.

Afwijzen vraagt ook een reden. Het is het enige verslag van waarom een release niet is uitgegaan.

Golfgroepen

test staat op beta en bevat de operator-machines met synthetische klantsites erop. wave-1, wave-2 en wave-3 staan op stable, op volgorde van blast radius.

Twee dingen waar het paneel op staat:

  • Golf 1 heeft een écht drukke server nodig. De kaart laat zien hoeveel hostingaccounts elke machine draagt en markeert de drukke. Een eerste golf van stille machines oefent geen enkel codepad dat de release straks tegenkomt, dus het bord waarschuwt als golf 1 er geen heeft — en een uitrol die zo gepland is wordt geweigerd.
  • Een nieuwe server landt vanzelf in een late golf, round-robin, zodra je deze pagina opent. Sleep hem naar voren zodra je weet wat hij draagt.

Een groep kan zichzelf tegenhouden met een kanaal-pin of een versieplafond — een klant die een release achter wil blijven. Elke klasse respecteert dat, behalve security-critical: die bereikt ze tóch, tenzij je de groep expliciet uitzondert, en die uitzondering wordt vastgelegd met jouw naam en jouw reden.

Wat een uitrol stopzet

Terwijl een golf loopt wordt elke machine ná zijn eigen update gecontroleerd — niet "gaf apt exitcode nul", maar of zijn klanten er net zo goed voor staan als tien minuten eerder: antwoorden de websites nog, lopen hun foutlogs niet vol, blijft de mailqueue leeg.

Slaat die controle rood uit, dan doet het paneel vier dingen en stopt dan:

  1. het rolt die machine terug naar de versie die hij had,
  2. het stopt de uitrol, en de machines die het nooit bereikte krijgen de status overgeslagen,
  3. het opent een incident, dat elke volgende golf blokkeert tot jij het sluit,
  4. het stuurt de pagingmail.

Het probeert het nooit opnieuw. Een uitrol die een gevallen machine opnieuw probeert gaat flapperen, en elke ronde daarvan is weer een storing voor de sites erop. De vloot blijft staan waar hij staat en wacht op jou.

Blackout-vensters

Er start geen golf op vrijdag, zaterdag of zondag, op een Nederlandse feestdag, of terwijl er een incident open staat. Dat is geen bijgeloof: een golf bakt urenlang, en de hele waarde van dat bakken is dat iemand meekijkt.

Het toch proberen wordt geweigerd, met het venster erbij genoemd. De enige weg eromheen is de noodbaan.

De noodbaan

Het rode blok op het paneel van een release. Hij vraagt eerst om een reden, en somt op wat hij gaat overschrijven:

  • de beta-soak — uren in plaats van dagen,
  • de bake tussen golven — minuten in plaats van een dag,
  • de kanaal-pin en het versieplafond van een groep,
  • blackout-vensters,
  • de zachtere gezondheidscontroles.

En wat hij niet overschrijft, en dat is het deel dat vertrouwen verdient:

  • de canary. Geen enkele klasse mag hem overslaan, en er is geen pad in het paneel dat een uitrol zonder canary plant.
  • een rode gate. De uitrol stopt nog steeds, rolt de gevallen machine nog steeds terug, en stuurt nog steeds een pagingmail.

Alles wat de noodbaan doet wordt vastgelegd: op de release, op de uitrol, en in het auditlog.

Vanaf de terminal

Alles hierboven is de API, en het is dezelfde API die het scherm gebruikt.

# Wat staat er in de pijplijn
$ curl -s -b cookies https://panel1.corecp.dev/api/v1/releases |
    python3 -c 'import json,sys
for r in json.load(sys.stdin):
    print(r["package"], r["version"], r["risk_class"], r["state"], r["channel"])'
corecp-php85 8.5.3 minor-runtime approved stable
corecp-agent 0.34.1 platform awaiting_approval beta

# Draai het promotiebeleid nu, in plaats van een kwartier te wachten
$ curl -s -X POST -b cookies https://panel1.corecp.dev/api/v1/releases/tick

# Mag er een golf starten?
$ curl -s -b cookies https://panel1.corecp.dev/api/v1/releases/windows |
    python3 -c 'import json,sys; d=json.load(sys.stdin); print(d["open"])'
True

Op een server zelf is dezelfde controle die de gate gebruikt één commando:

# root@stck1
$ corectl release gate

Hij eindigt met 0 als de machine er niet slechter voor staat dan zijn baseline, en met 1 als dat wel zo is — met de site of de dienst erbij die veranderde.

Alles op deze pagina staat in jouw taal

Het releasebord legt veel uit: waarom een venster dicht is, wat een risicoklasse inhoudt, wie een versie mag doorzetten, en waarom een soak nog niet schoon is. Die zinnen worden op de server gemaakt, en tot de eindcontrole van ronde 2 kwamen ze er in het Engels uit — ook als je paneel op Nederlands stond.

Dat is opgelost, en op een manier die je merkt als je de taal omzet: zet het paneel rechtsboven op English en dezelfde uitleg verschijnt in het Engels, zonder de pagina opnieuw te laden. De server stuurt geen zin meer maar een verwijzing plus de getallen die erin horen; het paneel maakt er de zin van.

Op de commandoregel verandert er niets — daar staat de Engelse tekst nog steeds:

ssh panel1.corecp.dev 'corecp-panel releases policy --config /etc/corecp-panel/panel.yaml'
ssh panel1.corecp.dev 'corecp-panel waves board --config /etc/corecp-panel/panel.yaml'

Zie je op dit scherm tóch nog een Engelse zin terwijl je paneel Nederlands staat, meld hem dan: dat is een gaatje in de vertaallijst en geen bedoeling.

Zie ook

  • docs/maintenance.md — het volledige beleid, de matrix en het mechanisme.
  • Een server toevoegen — een nieuwe machine landt in een late golf; daar komt dat vandaan.