Kubernetes | |
---|---|
Tyyppi | ilmainen ja avoimen lähdekoodin ohjelmisto |
Kehittäjä | Google [1] ja Cloud Native Computing Foundation |
Sisään kirjoitettu | Mene [2] [3] |
Käyttöjärjestelmä | Linux , Microsoft Windows ja macOS |
Ensimmäinen painos | 7. kesäkuuta 2014 |
uusin versio |
|
Lisenssi | Apache License 2.0 [5] |
Verkkosivusto | kubernetes.io _ |
Mediatiedostot Wikimedia Commonsissa |
Kubernetes ( K8s [6] ) on avoimen lähdekoodin orkestrointiohjelmisto konttisovelluksille – automatisoi niiden käyttöönoton, skaalauksen ja koordinoinnin klusteriympäristössä . Tukee suuria konttitekniikoita , mukaan lukien Docker , rkt , laitteiston virtualisointiteknologiat ovat myös tuettuja [7] .
Alkuperäisen version kehitti Google sisäisiin tarpeisiin, minkä jälkeen järjestelmä siirrettiin Cloud Native Computing Foundationin hallintaan . Useiden suurten organisaatioiden ja Internet-projektien käyttämä, erityisesti Wikimedia Foundationin infrastruktuuri siirrettiin itse kehitetyistä klusterien järjestämiseen tarkoitetuista ohjelmistoista Kubernetesiin.
Sana "Kubernetes" tulee muusta kreikasta. κυβερνήτης - ruorimies, ruorimies [6] . Numeronyymiä "k8s" käytetään myös usein : sanassa "kubernetes" on kahdeksan kirjainta "k":n ja "s:n" välissä, analogisesti numeron "i18n" kanssa - lyhennetty versio "kansainvälistymisestä".
Googlen sisäisen järjestelmän ensimmäisten versioiden pääkehittäjät olivat ohjelmoijat Joe Beda , Brendan Burns ja Craig McLuckie [8] , myöhemmin projektiin liittyivät heidän kollegansa Brian Grant ja Tim Hawkin ( Tim Hockin ). Järjestelmän pääohjelmointikieli on Go . Kubernetesin kehitykseen ja sisäiseen ideologiaan vaikutti vakavasti toinen Googlen tuote, joka jäi sisäiseksi kehitykseksi - Google Borg -klusterinhallintajärjestelmä [9] [10] , jota aiemmin työskentelivät useat Kubernetes-kehittäjät.
Projektin alkuperäinen nimi on Project Seven (viittaus Star Trek -sarjan sankarittareen , joka palasi yksilölliseen ja ihmisystävälliseen tilaan Borg-kollektiivin epäinhimillisen parven kyberneettisen mielen jäsenen asemasta ) [11] ; Projektin logon ohjauspyörässä olevat seitsemän kahvaa ovat viittaus tähän taiteelliseen kuvaan.
Vuoden 2014 puolivälissä hankkeen lähdekoodit [12] julkaistiin . 21. heinäkuuta 2015 julkaistiin versio 1.0 [13] . jonka jälkeen Google järjesti yhteistyössä Linux Foundationin kanssa erityisen Cloud Native Computing Foundationin (CNCF), jolle yhtiö siirsi Kubernetesin alkuperäisenä teknisenä panoksena.
19. joulukuuta 2016 otettiin käyttöön Container Runtime Interface (CRI), joka korvasi Dockerin [14] konttien hallinnan moottorina tarjoten siten tukea Dockerin lisäksi myös muille yhteensopiville konttityökaluille.
Kuten monet monimutkaiset tuotteet, Kubernetes ottaa käyttöön useita erityisiä termejä ja käsitteitä ekosysteemissään.
Solmu on yksittäinen fyysinen tai virtuaalinen kone, jossa sovellussäiliöt otetaan käyttöön ja suoritetaan. Jokainen klusterin solmu sisältää palveluita sovellusten suorittamiseen säilöissä (esimerkiksi Docker ) sekä komponentteja solmun keskitettyyn hallintaan.
Pod ( pod , englanniksi - "pod, cocoon", myös moduuli ) on perusyksikkö sovellusten käynnistämiseen ja hallintaan: yksi tai useampi kontti, joka toimii taatusti samassa solmussa, tarjoaa resurssien jakamista [15] ja prosessien välistä viestintää , ja anna yksilöllinen klusterin IP-osoite [16] . Jälkimmäinen antaa podissa käyttöön otetut sovellukset käyttää kiinteitä ja ennalta määritettyjä porttinumeroita ilman ristiriitojen riskiä. Podeja voidaan hallita suoraan Kubernetes API :lla tai ne voidaan ulkoistaa ohjaimelle [15] .
Volume ( volyymi ) on jaettu tallennusresurssi, jota voidaan jakaa samassa podissa käyttöönotetuista säilöistä.
Kaikki Kubernetesin hallintaobjektit (solmut, podit, säiliöt) on merkitty tunnisteilla ( label ), etiketin valitsimet ( label selector ) ovat pyyntöjä, joiden avulla voit saada linkin jotakin tarraa vastaaviin objekteihin [15] . Tunnisteet ja valitsimet ovat Kubernetesin päämekanismi, jolla valitaan, mitä objektia käytetään pyydettyyn toimintoon.
Kubernetesin palvelu on kokoelma loogisesti toisiinsa liittyviä pod-joukkoja ja niihin liittyviä käyttökäytäntöjä . Palvelu voi esimerkiksi vastata yhtä kerroksellisen ohjelmistoarkkitehtuurin periaatteiden mukaisesti kehitetystä ohjelmistokerroksesta. Palvelua vastaava podd-joukko saadaan suorittamalla sopiva etiketin valitsin [15] .
Kubernetes tarjoaa palveluiden etsintä- ja on-demand-reitityksen. Erityisesti järjestelmä pystyy osoittamaan uudelleen palvelun IP-osoitteen ja verkkotunnuksen, jotka ovat välttämättömiä palvelun käyttämiseksi sen osana oleville eri podille. Tämä varmistaa kuormituksen tasapainottamisen Round robin DNS -tyylisesti palvelua vastaavien podien välillä sekä oikean toiminnan, jos jokin klusterin solmuista epäonnistuu ja siinä isännöidyt podit siirretään automaattisesti muihin solmuihin [16] . Palvelu on oletusarvoisesti saatavilla Kubernetesin hallinnoiman klusterin sisällä – esimerkiksi taustapohjat ryhmitellään yhteen kuormituksen tasapainottamiseksi ja esitetään käyttöliittymälle sellaisenaan. Klusteri voidaan myös konfiguroida tarjoamaan pääsy sen muodostaviin podeihin ulkopuolelta yhtenä käyttöliittymänä [17] .
Ohjain ( controller ) on prosessi , joka hallitsee klusterin tilaa yrittäen tuoda sen todellisesta tilasta haluttuun [18] ; se tekee tämän käyttämällä Pod-joukkoa, joka on määritelty etikettivalitsimilla ja osa ohjaimen määritelmää [19] . Ohjainten suorittamisen tarjoaa Kubernetes Controller Manager -komponentti. Yksi ohjaintyypeistä, tunnetuin on Replication Controller , joka tarjoaa skaalauksen suorittamalla tietyn määrän Pod-kopioita klusterissa. Se myös varmistaa, että uudet Pod-esiintymät käynnistetään, jos tämän ohjaimen hallitsemaa Podia käyttävä isäntä epäonnistuu [18] . Muita Kubernetes-pääjärjestelmään sisältyviä ohjaimia ovat "DaemonSet Controller", joka varmistaa, että Pod käynnistetään jokaisessa koneessa (tai koneiden osajoukossa), ja "Työnohjain" loppuun suoritettavien podien käynnistämiseksi, kuten esim. osa erätyötä..
Operaattorit ( operaattorit ) ovat erikoistuneita Kubernetes-ohjelmistoja, jotka on suunniteltu sisällyttämään klusteriin palveluita, jotka ylläpitävät tilansa suoritusten välillä ( tilallinen ), kuten DBMS, valvontajärjestelmät tai välimuisti [20] . Operaattoreiden tarkoitus on tarjota mahdollisuus hallita Kubernetes-klusterin tilallisia sovelluksia läpinäkyvästi ja piilottaa asetustensa tiedot Kubernetes-klusterin pääprosessista.
Järjestelmä toteuttaa isäntä-orja- arkkitehtuurin : klusterinhallinnan alijärjestelmä on allokoitu, ja osa komponenteista hallitsee yksittäisiä orjasolmuja (jota kutsutaan itse Kubernetes-solmuiksi) [15] [21] .
Ohjausalijärjestelmä tarjoaa tiedonsiirron ja kuormituksen jakautumisen klusterin sisällä; alijärjestelmän komponentit voidaan suorittaa yhdessä tai useammassa rinnakkain toimivassa pääsolmussa, jotka yhdessä tarjoavat korkean käytettävyyden tilan [21] .
Etcd on hallintaalijärjestelmän osa, joka vastaa klusterin kokoonpanotietojen johdonmukaisesta tallentamisesta, tietyssä mielessäUnix-järjestelmien /etc -hakemiston hajautettu vastine. Toteutettu kevyenä hajautettunaavainarvoluokan NoSQL DBMS:nä; luotu osana CoreOS- projektia .
API-palvelin on ohjausalijärjestelmän avainkomponentti, joka tarjoaa REST -tyyppisen API:n ( JSON -viestintä HTTP -siirron kautta ) ja jota käytetään tarjoamaan ulkoinen ja sisäinen pääsy Kubernetes-toimintoihin [15] . API-palvelin päivittää etcd:hen tallennettujen objektien tilan, jolloin sen asiakkaat voivat hallita säilöjen jakoa ja kuormitusta hallitun järjestelmän solmujen välillä.
Ajastin on ohjausalijärjestelmän komponentti, joka valitsee resurssien saatavuuden kriteerien perusteella, missä solmussa tietyn Podin tulee toimia. Ajastin seuraa kunkin solmun resurssien käyttöä ja varmistaa, että kuorma jakautuu siten, että se ei ylitä käytettävissä olevia resursseja. Tätä tarkoitusta varten ajoittimella on oltava tiedot kussakin solmussa käytettävissä olevista resursseista, niitä koskevista vaatimuksista hallituilta podeilta sekä erilaisista lisäkäyttäjärajoituksista ja -käytännöistä, kuten QoS , affiniteetti- ja anti-affiniteettivaatimukset ( affinity - anti-affinity - niput tai irrottaa ohjausobjektit keskenään), tietojen lokalisointi . Toisin sanoen ajoittajan tehtävänä on löytää ja tarjota resursseja kuormituksen yhteydessä ilmenevien pyyntöjen mukaan [22] .
Ohjainten hallinta on prosessi, joka ajaa tärkeimpiä Kubernetes-ohjaimia, kuten DaemonSet Controlleria ja Replication Controlleria. Ohjaimet ovat vuorovaikutuksessa Kubernetes API -palvelimen kanssa luomalla, päivittämällä ja poistamalla hallitsemiaan resursseja (podit, palvelun sisääntulopisteet ja muut).
Kubectl on komentorivikäyttöliittymä sekä API, joka tarjoaa Kubernetesin hallitsemien resurssien hallinnan.
Kubernetes toimii siten, että solmujen resurssit jaetaan dynaamisesti niillä käynnissä olevien podien kesken. Jokainen klusterin solmu sisältää joukon yleisiä komponentteja.
Konttien vesillelaskupalvelu tarjoaa toimintoja oikeantyyppisten konttien suorittamiseen (käytettävän konttimoottorin tyypistä riippuen). Kubernetes-ohjelmistoympäristön näkökulmasta säiliöt on kapseloitu podeihin, jolloin kontit ovat itse alhaisimpia ohjelmistokomponentteja, joiden kanssa Kubernetes-ohjelmisto on vuorovaikutuksessa. Ne puolestaan sisältävät suoritettavia sovelluksia, kirjastoja ja muita näiden sovellusten toimintaan tarvittavia resursseja. Säiliöt pääsevät ulkomaailmaan kullekin podille määritetyn IP-osoitteen kautta.
Kubelet vastaa solmun podien suoritustilasta - se valvoo, toimiiko kukin kontti oikein toimintakunnossa. Kubelet tarjoaa sovellussäiliöiden käynnistyksen, pysäytyksen ja hallinnan. Toiminnallisesti Kubelet voidaan nähdä analogisena supervisorin kanssa [15] [23] . Jos Pod havaitaan olevan virheellinen, komponentti yrittää asentaa sen uudelleen ja käynnistää sen uudelleen solmussa . Itse solmun tila lähetetään ohjausalijärjestelmään muutaman sekunnin välein diagnostisten viestien muodossa ( heartbeat message ). Jos mastersolmu näiden sanomien sisällön tai niiden puutteen perusteella havaitsee, että tietty solmu ei toimi kunnolla, toisinnusohjaimen ohjausalijärjestelmän prosessi yrittää käynnistää tarvittavat podit uudelleen toisessa solmussa, joka on kunnossa.
Kube-proxy on komponentti, joka on verkon välityspalvelimen ja kuormituksen tasapainottimen yhdistelmä . Siinä toteutetut verkkokerroksen toiminnot käyttävät palveluabstraktiota [15] . Se on vastuussa saapuvan liikenteen reitittämisestä tiettyihin konteihin, jotka kulkevat solmussa sijaitsevassa Podissa. Reititys tarjotaan saapuvan pyynnön IP-osoitteen ja portin perusteella.
cAdvisor on Kubernetesin sisäisen valvontajärjestelmän agentti, joka kerää suorituskykymittareita ja tietoja solmun sisällä olevien säiliöiden resurssien käytöstä, kuten suorittimen ajasta, RAM-muistista, tiedosto- ja verkkojärjestelmän kuormituksesta.
Kubernetes tarjoaa useita työkaluja tässä järjestelmässä käynnissä olevien ohjelmistojen kehittämisen ja käyttöönoton integrointiin. Yleisimmin käytettyjä työkaluja tähän tarkoitukseen ovat:
Monille näistä työkaluista on vaihtoehtoja, esimerkiksi Fluxia ja werfiä käytetään joskus ArgoCD:n sijasta.
Monet kontinhallintatoimittajista ovat ottaneet käyttöön Kubernetes-tuen tuotteissaan, ja monet heistä ovat osallistuneet CNCF- toimintaan . Erityisesti Rancher Labs sisällytti Kubernetesin Rancher-konttihallintaalustaan [25] , Pivotal Software käytti Kubernetesia Pivotal Container Service (PKS) -tuotteessa [26] , Red Hat käytti sitä osana PaaS- [28][27]OpenShift (joka on itse asiassa Kubernetesin laajennettu versio, jota usein kutsutaan jopa "Kubernetes-jakeluksi"), CoreOS sisällytti järjestelmän Container Linux Tectonic -jakelun kaupalliseen versioon, ja IBM käytti sitä IBM Cloud Container Servicessä [29 ] [30] ja IBM Cloud Privatessa [31] [32] [33] . Oracle Corporation liittyi Cloud Native Computing Foundationiin syyskuussa 2017 ja liitti Kubernetesin Oracle Cloudiin ja Oracle Linuxiin [34] .
Kuberneteksen uskotaan olleen 2010-luvun loppuun mennessä käytännössä pilvijärjestelmissä ja -palveluissa käytettävä standardi PaaS -mallin mukaisesti , joka mahdollistaa sovellusten kontoinnin, ja se on erityisesti konttipalveluiden perusta. joukko suurimpia julkisia pilvipalveluntarjoajia - Amazon ( AWS Elastic Container Service), Microsoft ( Microsoft Azure Containers), Google ( Google Cloud Platform Kubernetes Engine). Vuodesta 2019 lähtien Rancher Labs on kehittänyt k3s- jakelua , Kubernetesin kevyttä versiota, joka on tarkoitettu käytettäväksi ympäristöissä, joissa on rajalliset laskentaresurssit.
Samaan aikaan kehitetään myös vaihtoehtoisia tuotteita konttisovellusten järjestämiseen - Docker Swarm [ Dockerin kehittäjältä ja Nomad HashiCorpilta . Docker Swarmiin verrattuna Kubernetes on toiminnaltaan rikkaampi, mutta sillä on korkeampi kynnys päästä tekniikkaan. Kun siirryt Docker Swarmista Kubernetesiin, sinun on muutettava Docker Composessa luodut orkestrointimääritystiedostot Kubernetesin tukemaan muotoon Kompose-sovelluksella.
Sosiaalisissa verkostoissa | |
---|---|
Temaattiset sivustot | |
Bibliografisissa luetteloissa |