Recenzija: Red Hat radi Dockera na teži način

Projekt Atomic iz Red Hat-a zamišljen je način pokretanja Linux kontejnera. Operativni sustav Atomic Host dolazi s već instaliranim Docker-om (spremnici), Flannel-om (umrežavanje), OSTree-om (upravljanje hostom), Etcd (distribuirano spremište ključ-vrijednost) i Kubernetes (orkestracija). 

Kubernetes je jedan od dva popularna sustava za orkestraciju kontejnera, a drugi je Docker Swarm. Mogli biste to nazvati "punom snagom", ali s tim dolazi i dodatna složenost i administrativni troškovi.

Kubernetes koordinira stvaranje "mahuna" na više atomskih domaćina. Podovi su skupine Dockerovih spremnika koji logički odvajaju usluge u aplikaciji. Spremnici u podu dijele IP adresu i komuniciraju preko localhosta.

Flannel pruža overlay mrežu za atomske hostove, omogućavajući svakom mahuni u klasteru da komunicira s bilo kojim drugim mahunom ili uslugom unutar klastera. Ova preklapajuća mreža koristi se samo za umrežavanje spremnika. Kubernetes proxy usluga omogućuje pristup IP prostoru domaćina.

Etcd se koristi za spremanje konfiguracija i za Kubernetes i za Flanel na svim hostovima u klasteru.

Skupine atomskih spremnika čine određene pretpostavke zbog Kubernetesa. Administratori doista nemaju izbora s Atomicom: ili upotrijebite Kubernetes ili pronađite drugi OS kontejnera. 

Ako se palite na "dizajn prema dogovoru" i želite veću slobodu i fleksibilnost u domaćinu spremnika, možete razmotriti RancherOS ili VMware Photon. Ako je vaš krajnji cilj pokretanje mnogih spremnika na mnogim hostovima, tada bi Atomic Host, Kubernetes i prijatelji mogli biti upravo ono što trebate.  

Administracija sustava Atomic Host

Atomic Host koristi vlastitu verziju dockernaredbe, atomiciako je prava  dockernaredba dostupna u / bin / docker. Njegovo mjesto u / bin nagovještava neke prerade koje su izvršene na RHEL / CentOS / Fedora kako bi Atomic OS bio napravljen za kontejnere. U / bin se obično nalaze samo važni binarni programi sustava.

Atomskim hostom upravljate putem dva podsustava. RPM-OSTree upravlja implementacijom i ažuriranjima host sustava, dok Docker osigurava spremnike za pokretanje usluga i aplikacija. Ovim podsustavima upravlja atomicnaredba smještena u / usr / bin /.

RPM-OSTree čini atomski datotečni sustav nepromjenjivim; tj. datotečni sustav je samo za čitanje, osim za / var i / itd. U direktoriju / var / lib / docker pohranjuju se sve datoteke i slike povezane s Dockerom, dok / etc ima sve konfiguracijske datoteke. Kao što ćemo vidjeti kasnije, ovo omogućuje jednostavnije i sigurnije nadogradnje i nadogradnje hosta, što je bitan uvjet prilikom upravljanja potencijalno tisućama domaćina spremnika u klasteru.

atomicNaredba je namijenjen da bude jedan polazna točka za spremnik podsustava-kišobran naredbe za sve stvari kontejner uključujući operacije domaćina. U atomicnaredba izgleda i osjeća slično kao dockernaredbu, ali adrese temeljni problem dijele svi spremnik domaćina operativnim sustavima: počevši uslugu razini sustava u spremniku pri dizanju, na pouzdan i transparentan način, uz korištenje Systemd jedinica datoteke.

U Atomicu se to radi s onim što se naziva super privilegiranim spremnikom, koji ima mogućnost vidjeti i manipulirati samim hostom. Dakle, iako atomicizgleda kao standardna naredba Docker, ona popunjava praznine između Dockera i RPM-OSTree - konfigurira instalacijske skripte, postavlja usluge, dodjeljuje odgovarajuće privilegije i slično - kako bi omogućila pouzdanu implementaciju aplikacije koja se temelji na spremniku .

Jednostavno rečeno,  atomic naredba vam omogućuje da manipulirate osnovnom infrastrukturom domaćina (cgroups, prostori imena, SELinux, itd.) Za pokretanje vaših aplikacija. Na primjer, recimo da ste izgradili aplikaciju spremnika Network Time Protocol (ntpd) koja zahtijeva mogućnost SYS_TIME kako bi se izmijenilo vrijeme hosta. To biste mogli konfigurirati dodavanjem metapodataka na sliku spremnika pomoću naredbe:

LABEL RUN /usr/bin/docker run -d —cap-add=SYS_TYPE ntpd

Tada kada pokrenete spremnik ( atomic run ntpd), sustav će pročitati te metapodatke i konfigurirati sposobnost SYS_TIME i druge resurse za spremnik. 

Instalacija i konfiguracija atomskog hosta

Instalacija je bila muka, ponajviše zato što sam smatrao da je dokumentacija neorganizirana i zbunjujuća. Dokumenti pretpostavljaju visoku razinu znanja o ekosustavu Red Hat koje neće imati svaki čitatelj. Nakon nekoliko lažnih startova, napokon sam uspio instalirati s golo-metalnog ISO-a. Podrška za instalaciju virtualnog stroja bilo čime osim Vir-Managera je bolna. Atomic Host u tom pogledu definitivno nije prikladan za Windows ili Mac.

Svima koji su upoznati s instalacijom CentOS-a postupak golog metala bit će jednostavan. Jedine uočljive razlike su u rasporedu diska, s prostorom koji se automatski rezervira za Docker i spremnike, zajedno s mnoštvom nosača za SELinux, cgroups itd. Koji prate instalaciju OS spremnika.

Korištenje Kubernetesa za upravljanje spremnicima preko klastera znatno je složenije od pokretanja Dockera na jednom hostu, ali s većom složenošću dolazi i veća pouzdanost i sposobnost. Kubernetesom također pružate udobnost znajući da je sustav testiran u bitnim proizvodnim okruženjima (na Googleu).

Ne postoji jednostavan način za postavljanje majstora Kubernetesa. Dokumentacija je raspoređena na raznim web lokacijama projekata, a mnogo puta se dokumenti preusmjeravaju na druge web stranice za detalje, zato budite spremni potrošiti puno vremena na čitanje, progon dokumenata i eksperimentiranje. Ukupni napor uključuje modificiranje desetak datoteka raspoređenih u nekoliko direktorija / etc. Trik je naravno znati koje su to modifikacije. Kubernetes zapravo nije stvoren za povremeno eksperimentiranje s kontejnerima. Ovo su teške proizvodne stvari.

Nakon što sam konfigurirao master s Kubernetesom, certifikatima, uslugama i mrežom prekrivača Flannel, zatim instalirao Flannel (flanneld), Kubernetes (kubelet) i Etcd na svaki čvor, napokon sam pokrenuo klaster spremnika s pet čvorova. Nažalost, ovo je potrošilo prilično memorije i nisam uspio pronaći način za testiranje pomoću jednog čvora, kao što sam to učinio prilikom testiranja RancherOS-a i VMware Photona.

U ovom trenutku, Kubernetes se može koristiti za pokretanje i upravljanje mahunama, onim skupinama spremnika koji obuhvaćaju usluge i aplikacije.

Pohrana i umrežavanje atomskog hosta

Kao i većina operativnih sustava domaćina spremnika, Atomic Host ima minimalistički pristup, s uključenim dovoljno prostora na disku za pokretanje hosta. To ne ostavlja mnogo za mnoge Dockerove spremnike koji će se izvoditi tipični klaster, pa ćete za to trebati priključiti vanjsku pohranu na host.

U Dockeru se slike i povezane datoteke obično pohranjuju u / var / lib / docker, a na većinu standardnih operativnih sustava jednostavno biste montirali uređaj na to mjesto u datotečni sustav kako biste dodali pohranu. Međutim, Atomic koristi izravne LVM (Linux Volume Manager) volumene preko stražnjeg kraja Map Mappera za pohranu Dockerovih slika i metapodataka: / dev / atomicos / docker-data i / dev / atomicos / docker-meta. To znači da ćete trebati naučiti nešto o LVM-u i volumenima kako biste dodali prostor atomskom hostu.

Polazna točka za upravljanje pohranom u Atomicu je skripta za postavljanje, / etc / sysconfig / docker-storage-setup. Atomic Host ima spremište za pohranu Dockera (i hosta), pa je trik ovdje dodavanje novog uređaja u ovaj bazen. To ćete učiniti dodavanjem na popis uređaja u datoteci, poput ovog:

DEVS="/dev/vdb /dev/vdc"

Zatim pokrenite pomoćnu skriptu, / usr / bin / docker-storage-setup. Ako sve bude u redu, vaši su diskovi dodani u spremište, a vaš Atomic domaćin ima mjesta za Docker. Pretpostavljam da će se LVM-om upravljati u proizvodnji s postojećim administrativnim alatima ili sa skriptama poput Ansible / Salt / Chef / Lutka, tako da će se administratorima koji rade u velikim središtima centara podataka vjerojatno činiti standardnijim.

Project Atomic koristi Flannel za pružanje mreže preklapanja spremnika putem Etcd-a. To konfigurirate guranjem JSON konfiguracijske datoteke u trgovinu ključeva / vrijednosti Etcd, koristeći alate poput Curl. Da bismo konfigurirali podmrežu za spremnike, mogli bismo stvoriti JSON datoteku koja izgleda ovako:

   "Mreža": "172.16.0.0/12",

   "SubnetLen": 24,

   "Backend": {

      "Tip": "vxlan"

   }

}

A da bismo ovo prenijeli u Etcd master, guramo ga u mrežni konfiguracijski ključ:

curl -L //localhost:2379/v2/keys/atomic.io/config -XPUT --data-urlencode [email protected]

Iako je pomalo glomazan, njime se može upravljati. Ja bih volio vidjeti omot za tih konfiguracija naredbe koje ga čine više intuitivan za administratora Unix, možda nešto slično atomic ifconfig…, atomic route…itd

Ovdje postoji još jedna razlika koju vrijedi naglasiti: Kubernetesovi koncepti mahuna i usluga. Mahuna je skupina spremnika koji su relativno čvrsto povezani. Svi spremnici u mahuni dijele istog domaćina i istu IP adresu i svi zajedno žive ili umiru. Vi odredite koliko primjeraka mahune želite pokrenuti, a Kubernetes izvršava narudžbu. Ako se instanca zaustavi ili ne uspije, Kubernetes zavrti drugu kako bi se podudarala sa željenim stanjem.

Kubernetes usluga je apstrakcija koja definira logički skup mahuna i politiku kojom im se pristupa. To daje (mikro) usluzi jedno stabilno ime i adresu tijekom životnog ciklusa mahune. Postoji još mnogo toga, ali to bi vam trebalo pomoći da shvatite zašto vam je potrebna zasebna komponenta za upravljanje mrežom. U atomskom hostu ta je komponenta flanel.

Nadogradnje i nadogradnje Atomic Hosta

Atomic Host koristi upravitelj paketa pod nazivom RPM-OSTree, koji kombinira značajke tradicionalnog RPM-a i OSTree-a. RPM-OSTree daje nam mogućnost pouzdanog pomicanja naprijed i natrag, budući da je postupak „atomski“ (u smislu riječi baze podataka). RPM-OSTree pruža pouzdane transakcije za ažuriranja, što znači da je malo vjerojatno da će pokvariti operativni sustav. Poput naredbi za spremnike, nadogradnje i vraćanja hosta sučeljavaju se atomicsustavom upravljanja:

atomic host upgrade

atomic host rollback

Imajte na umu da nisam testirao povrat, jer se nisam imao na što vratiti.

Red Hat Atomic Host je najprikladniji za organizacije s velikim ulaganjem u vještine i infrastrukturu Red Hat-a. Tvrtke koje polaze iz drugog kuta možda će htjeti razmotriti druge mogućnosti. Uključivanje Kubernetesa i povijest Red Hat-a u velika proizvodna okruženja znače da će Atomic Host biti gotovo "kapaljka" za pokretanje kontejneriziranih radnih opterećenja u poduzećima. Ali ne vidim da ga programeri prihvaćaju kao svoju odabranu Docker platformu.