Imuabilitatea este grozavă pentru a realiza consecvența, predictibilitatea și fiabilitatea și nu văd niciun motiv pentru care nu ar trebui să mă străduiesc pentru imuabilitatea la nivel de sistem de operare atunci când implementez aplicația mea pe VPS-uri Linux de la diferiți furnizori de cloud din întreaga lume. lume. Cu instrumente precum Packer pentru a ajuta la crearea imaginilor sistemului de operare, aceasta pare să fie și calea de urmat.
Pentru unii furnizori de cloud (de exemplu, Digital Ocean), pot crea imaginea local în qcow2 sau format brut și apoi pot încărca imaginea finalizată la furnizorul de cloud pentru implementare atunci când instanțiez noi VPS.Aceasta pare a fi cea mai bună opțiune.
Dar alți furnizori de servicii cloud (de exemplu, Hetzner din Germania) nu acceptă importarea propriilor imagini ale sistemului de operare - în schimb, trebuie să construiți imaginea pe infrastructura lor pe baza uneia dintre imaginile lor sursă și apoi puteți instantanee instalarea finală într-un sistem reutilizabil. imagine, când totul este configurat corect. De fapt, acest lucru este, de asemenea, ceea ce face „Hetzner Cloud Builder” de la Packer.
Dar cum pot garanta atunci că imaginea finală Hetzner are corect aceeași instalare CentOS 8 (până la același set precis de pachete RPM instalate cu exact aceleași numere de versiune) ca și care rulează pe toți ceilalți furnizori de cloud?
Îmi imaginez că soluția ar putea fi un fel de instrument declarativ, care preia o listă de pachete RPM și numerele de versiune asociate și aduce sistemul țintă în concordanță cu această listă - asigurându-se că orice pachete RPM lipsă sunt instalate în versiunea corectă, eliminând superflue. Pachetele RPM, actualizarea pachetelor RPM mai vechi și downgrade-ul pachetelor RPM mai noi pentru a vă asigura că versiunea necesară este instalată.
Există un astfel de instrument sau ar trebui să mă gândesc complet diferit despre asta?
Unii ar putea argumenta că pachetele CentOS RPM ar trebui să fie întotdeauna actualizate la cea mai nouă versiune disponibilă, dar nu pot garanta că toți furnizorii de cloud rulează aceeași instalare a sistemului de operare - ceea ce poate afecta predictibilitatea și fiabilitatea serviciului meu.
În schimb, vreau să pot testa în detaliu o configurare completă (OS + aplicație) înainte de a o implementa la orice furnizor de cloud, iar apoi implementarea va fi aceeași pentru toți furnizorii de cloud. Așa facem lucrurile la nivel de aplicație folosind imagini Docker și nu văd de ce ar trebui să acceptăm mai puțin la nivelul sistemului de operare.
Vreo contribuție de la colegii dvs. DevSecOps cum să atingeți aceste obiective?