Mahdollinen: 120 VM-kokoonpanon siirto CoreOS:stä CentOS:ään 18 kuukaudessa

Mahdollinen: 120 VM-kokoonpanon siirto CoreOS:stä CentOS:ään 18 kuukaudessa

Tämä on puheen transkriptio DevopsConf 2019 и SPbLUG 2019-09-25.

Tämä on tarina projektista, jossa käytettiin itse kirjoitettua kokoonpanonhallintajärjestelmää ja miksi muutto Ansibleen kesti 18 kuukautta.

Päivä nro -ХХХ: Ennen alkua

Mahdollinen: 120 VM-kokoonpanon siirto CoreOS:stä CentOS:ään 18 kuukaudessa

Aluksi infrastruktuuri koostui useista erillisistä isännistä, jotka käyttivät Hyper-V:tä. Virtuaalikoneen luominen vaati monia vaiheita: levyjen sijoittaminen oikeaan paikkaan, DNS:n rekisteröinti, DHCP:n varaaminen, VM-määritysten laittaminen git-varastoon. Tämä prosessi oli osittain mekanisoitu, mutta esimerkiksi VM:t jaettiin isäntien kesken käsin. Mutta esimerkiksi kehittäjät voivat korjata VM-kokoonpanon gitissä ja ottaa sen käyttöön käynnistämällä VM:n uudelleen.

Mukautettu kokoonpanonhallintaratkaisu

Mahdollinen: 120 VM-kokoonpanon siirto CoreOS:stä CentOS:ään 18 kuukaudessa

Epäilen, että alkuperäinen idea suunniteltiin IaC:ksi: monet tilattomat virtuaalikoneet, jotka nollaavat tilansa uudelleenkäynnistettäessä. Mikä oli VM-määritysten hallinta? Kaavamaisesti se näyttää yksinkertaiselta:

  1. VM:lle naulattiin staattinen MAC.
  2. VM:ään liitettiin ISO CoreOS:llä ja käynnistyslevyke.
  3. CoreOS käynnistää mukautuskomentosarjan lataamalla sen WEB-palvelimelta sen IP-osoitteen perusteella.
  4. Skripti lataa VM-kokoonpanon SCP:n kautta IP-osoitteen perusteella.
  5. Systemd-yksikkötiedostojen jalkaliina ja bash-skriptien jalkaliina käynnistetään.

Mahdollinen: 120 VM-kokoonpanon siirto CoreOS:stä CentOS:ään 18 kuukaudessa

Tällä ratkaisulla oli monia ilmeisiä ongelmia:

  1. CoreOS ISO on vanhentunut.
  2. Paljon monimutkaisia ​​automatisoituja toimintoja ja taikuutta siirrettäessä/luodattaessa virtuaalikoneita.
  3. Vaikeuksia päivittämisen kanssa ja milloin tarvitaan tietty ohjelmistoversio. Vielä hauskempaa ydinmoduulien kanssa.
  4. VM:itä ei niin saatu ilman dataa, ts. Virtuaalikoneisiin ilmestyi levy, johon oli asennettu lisää käyttäjätietoja.
  5. Joku sotki jatkuvasti järjestelmäyksiköiden riippuvuuksia ja CoreOS jumiutui uudelleenkäynnistyksen yhteydessä. Tätä oli vaikea saada kiinni CoreOS:n käytettävissä olevilla työkaluilla.
  6. Salaisuuksien hallinta.
  7. CM:ää ei ollut. CoreOS:lle oli bash- ja YML-konfiguraatioita.

VM-määrityksen käyttöönotto edellyttää, että se käynnistetään uudelleen, mutta se ei välttämättä käynnisty uudelleen. Vaikuttaa ilmeiseltä ongelmalta, mutta pysyviä levyjä ei ole - lokeja ei ole minnekään tallentaa. No, ok, yritetään lisätä ytimen latausvaihtoehto, jotta lokit lähetetään. Mutta ei, kuinka monimutkaista kaikki on.

Päivä 0: Tunnista ongelma

Mahdollinen: 120 VM-kokoonpanon siirto CoreOS:stä CentOS:ään 18 kuukaudessa

Se oli tavallinen kehitysinfrastruktuuri: jenkinit, testiympäristöt, valvonta, rekisteri. CoreOS on suunniteltu k8s-klustereiden isännöintiin, ts. Ongelmana oli CoreOS:n käyttö. Ensimmäinen askel oli pinon valinta. Päätimme:

  1. CentOS perusjakaumana, koska Tämä on tuotantoympäristöjä lähinnä oleva jakelu.
  2. Ansible kokoonpanon hallintaan, koska siitä tehtiin laaja tutkimus.
  3. Jenkins puitteet olemassa olevien prosessien automatisoinnille, koska sitä on jo käytetty aktiivisesti kehitysprosesseissa
  4. Hyper-V virtualisointialustana. On useita syitä, jotka ylittävät tarinan, mutta lyhyesti sanottuna - emme voi käyttää pilviä, meidän on käytettävä omaa laitteistoamme.

Päivä nro 30: Nykyisten sopimusten korjaaminen - Sopimukset koodina

Mahdollinen: 120 VM-kokoonpanon siirto CoreOS:stä CentOS:ään 18 kuukaudessa

Kun pino oli selvä, aloitettiin valmistelut siirtoon. olemassa olevien sopimusten korjaaminen koodin muodossa (Sopimukset koodina!). Siirtyminen ruumiillinen työ -> koneellistaminen -> automaatio.

1. Määritä virtuaalikoneet

Mahdollinen: 120 VM-kokoonpanon siirto CoreOS:stä CentOS:ään 18 kuukaudessa

Ansible tekee hyvää työtä tässä. Vähimmäisillä kehon liikkeillä voit hallita VM-kokoonpanoja:

  1. Luo git-arkisto.
  2. Laitamme luettelon virtuaalikoneista inventaarioon, kokoonpanot leikkikirjoihin ja rooleihin.
  3. Olemme perustamassa erityisen jenkins-orjan, josta voit käyttää Ansiblea.
  4. Luomme työpaikan ja määritämme Jenkinsin.

Ensimmäinen prosessi on valmis. Sopimukset ovat kiinteät.

2. Luo uusi VM

Mahdollinen: 120 VM-kokoonpanon siirto CoreOS:stä CentOS:ään 18 kuukaudessa

Kaikki täällä ei ollut kovin kätevää. Ei ole kovin kätevää luoda virtuaalikoneita Hyper-V:lle Linuxista. Yksi yrityksistä koneistaa tämä prosessi oli:

  1. Ansbile muodostaa yhteyden WinRM:n kautta Windows-isäntään.
  2. Ansible suorittaa powershell-skriptin.
  3. Powershell-skripti luo uuden virtuaalikoneen.
  4. Hyper-V/ScVMM:ää käytettäessä isäntänimi määritetään luotaessa virtuaalikonetta vieraskäyttöjärjestelmässä.
  5. Kun päivität DHCP-vuokrasopimusta, VM lähettää isäntänimensä.
  6. Normaali ddns- ja dhcp-integraatio Domain Controller -puolella määrittää DNS-tietueen.
  7. Voit lisätä VM:n varastoosi ja määrittää sen Ansiblen avulla.

3. Luo VM-malli

Mahdollinen: 120 VM-kokoonpanon siirto CoreOS:stä CentOS:ään 18 kuukaudessa

He eivät keksineet täällä mitään - he ottivat pakkaajan.

  1. Lisää pakkaaja, kickstart config git-arkistoon.
  2. Erityisen jenkins-orjan asettaminen hyper-v:n ja Packerin kanssa.
  3. Luomme työpaikan ja määritämme Jenkinsin.

Kuinka tämä linkki toimii:

  1. Packer luo tyhjän VM:n ja poimii ISO:n.
  2. Virtuaalinen kone käynnistyy, Packer antaa komennon käynnistyslataimeen käyttääkseen kickstart-tiedostoamme levykkeeltä tai http.
  3. Anaconda käynnistetään konfiguraatiollamme ja käyttöjärjestelmän alkuasetukset on tehty.
  4. Packer odottaa, että VM tulee saataville.
  5. Virtuaalikoneen sisällä oleva Packer toimii paikallisessa tilassa.
  6. Ansible käyttää täsmälleen samoja rooleja, joita se toimii vaiheessa #1.
  7. Packer vie VM-mallin.

Päivä #75: Refaktoroi sopimus rikkomatta = Testattavissa + Testkitchen

Mahdollinen: 120 VM-kokoonpanon siirto CoreOS:stä CentOS:ään 18 kuukaudessa

Konventojen kaappaaminen koodiin ei välttämättä riitä. Loppujen lopuksi, jos prosessin läpikotaisin haluat muuttaa jotain, voit rikkoa jotain. Siksi infrastruktuurin tapauksessa ilmenee juuri tämän infrastruktuurin testaus. Synkronoidaksemme tiedon tiimin sisällä aloimme testata Ansible-rooleja. En mene syvemmälle, koska... siellä on artikkeli, joka kuvaa sen ajan tapahtumia Testaa minua, voitko vai haaveilevatko YML-ohjelmoijat Ansiblen testaamisesta?(spoileri tämä ei ollut lopullinen versio ja myöhemmin kaikki muuttui monimutkaisemmaksi Kuinka aloittaa Ansiblen testaus, heijasta projekti vuoden sisällä ja älä mene hulluksi).

Päivä #130: Ehkä CentOS+ansible ei ole tarpeen? ehkä openshift?

Meidän on ymmärrettävä, että infrastruktuurin käyttöönottoprosessi ei ollut ainoa, vaan sivuprojekteja oli. Esimerkiksi tuli pyyntö käynnistää sovelluksemme openshiftissä ja tämä johti yli viikon kestäneeseen tutkimukseen Käynnistämme sovelluksen Openshiftissä ja vertaamme olemassa olevia työkaluja mikä hidasti siirtoprosessia. Tuloksena kävi ilmi, että openshift ei kata kaikkia tarpeita, vaan tarvitaan todellista laitteistoa tai ainakin kykyä pelata ytimellä.

Päivä #170: Openshift ei sovellu, otetaanko mahdollisuus Windows Azure Packin kanssa?

Mahdollinen: 120 VM-kokoonpanon siirto CoreOS:stä CentOS:ään 18 kuukaudessa

Hyper-V ei ole kovin ystävällinen, SCVMM ei tee siitä paljon parempaa. Mutta on olemassa sellainen asia kuin Windows Azure Pack, joka on SCVMM:n lisäosa ja jäljittelee Azurea. Mutta todellisuudessa tuote näyttää hylätyltä: dokumentaatiossa on rikkinäisiä linkkejä ja se on erittäin niukkaa. Mutta osana tutkimusta vaihtoehtoista pilvemme käyttöiän yksinkertaistamiseksi he tarkastelivat myös sitä.

Päivä #250: Windows Azure Pack ei ole kovin hyvä. Pysymme SCVMM:ssä

Mahdollinen: 120 VM-kokoonpanon siirto CoreOS:stä CentOS:ään 18 kuukaudessa

Windows Azure Pack vaikutti lupaavalta, mutta WAP:ia monimutkaistuksineen päätettiin olla tuomatta järjestelmään tarpeettomien ominaisuuksien vuoksi ja pysyttiin SCVMM:ssä.

Päivä #360: Elefantin syöminen pala palalta

Mahdollinen: 120 VM-kokoonpanon siirto CoreOS:stä CentOS:ään 18 kuukaudessa

Vasta vuoden kuluttua muuttoalusta oli valmis ja muuttoprosessi alkoi. Tätä tarkoitusta varten asetettiin SMART-tehtävä. Tarkistimme kaikki VM:t ja aloimme selvittää kokoonpanoa yksitellen, kuvata sitä Ansiblessa ja peittää sen testeillä.

Päivä #450: Millaisen järjestelmän sait?

Mahdollinen: 120 VM-kokoonpanon siirto CoreOS:stä CentOS:ään 18 kuukaudessa

Itse prosessi ei ole mielenkiintoinen. Se on rutiinia, voidaan todeta, että useimmat konfiguraatiot olivat suhteellisen yksinkertaisia ​​tai isomorfisia ja Pareto-periaatteen mukaan 80% VM-konfiguraatioista vaati 20% ajasta. Samalla periaatteella 80 % ajasta käytettiin muuton valmisteluun ja vain 20 % itse muuttoon.

Päivä #540: Finaali

Mahdollinen: 120 VM-kokoonpanon siirto CoreOS:stä CentOS:ään 18 kuukaudessa

Mitä tapahtui 18 kuukaudessa?

  1. Sopimuksista tuli koodi.
  2. Ruumiillinen työ -> Mekanisointi -> automaatio.

Lähde: will.com

Lisää kommentti