Zephyrnet-logo

Het verhaal van Kubernetes!

Datum:

Dit artikel is gepubliceerd als onderdeel van het Data Science-blogathon.

https://tinyurl.com/4n8u64jh

Introductie

Kubernetes, in de volksmond bekend als (K8s) is een systeem voor automatisering inzet, schalen en beheren van gecontaineriseerde applicaties.

De containers van een applicatie zijn gegroepeerd in logische eenheden, die gemakkelijk kunnen worden beheerd en ontdekt. Een belangrijk element van Kubernetes is 15 jaar ervaring met het uitvoeren van productieworkloads bij Google in combinatie met de beste ideeën en praktijken van de community.

Als onderdeel van de microservices-architectuur vertegenwoordigt Kubernetes een stap verwijderd van monolithische architecturen, waar services ontkoppeld, geïsoleerd en alleen zo groot zijn als nodig is. Deze microservices, ontwikkeld in de vorm van containers, worden binnen enkele seconden gelanceerd en kunnen na slechts enkele minuten gebruik worden beëindigd.

Als u uw monoliet gaat ontbundelen en in een container verpakken, waarom zou u zich dan druk maken als het eindresultaat bijna identiek is aan de gebruiker? Het is bijna net zo eenvoudig te onderhouden en te ontwikkelen als implementeren. Microservices bieden een aantal voordelen ten opzichte van monolithische architecturen, zoals vereenvoudigd configuratiebeheer, nauwkeurigere toewijzing van resources en verbeterde prestatiebewaking.

In deze handleiding bespreken we alles wat u moet weten over het voorbereiden van uw toepassingen op het leven in cloudcontainers.

Essentieel van Kubernetes-architectuur 

Kubernetes-architectuur

https://tinyurl.com/2tp33ydc

containers: Over het algemeen is een container een geïsoleerde "micro-applicatie" met alle benodigde softwarepakketten en bibliotheken.

Pods: Pods groeperen twee of meer containers en vormen een belangrijk onderdeel van de K8s-architectuur. Als een pod uitvalt, kan K8s deze automatisch vervangen, meer CPU en geheugen toevoegen en zelfs repliceren om uit te schalen. Pods krijgen IP-adressen toegewezen. Een 'controller' beheert een groep pods, die samen een schaalbare 'workload' vormen. De pods zijn verbonden via "services", die het geheel van de werklast vertegenwoordigen. Ondanks het schalen of vernietigen van sommige pods, balanceert een service het webverkeer over de pods. Het is ook belangrijk op te merken dat opslagvolumes zijn gekoppeld aan pods en worden blootgesteld aan containers in die pods.

Controller: Een controller is een regellus die de gewenste en werkelijke status van het K8s-cluster vergelijkt en verbinding maakt met de API-server om de beheerde bronnen te maken, bij te werken en te verwijderen. De labelselectors in de controller bepalen de set pods die de controller kan besturen. Replicatiecontroller (schaalt pods), DeamonSet-controller (zorgt ervoor dat elk knooppunt één kopie krijgt van een aangewezen pod), Job Controller (voert software uit op een specifiek tijdstip), Cronjob Controller (schemat taken die periodiek worden uitgevoerd), StatefulSet-controller (controleert stateful-applicaties) , en Deployment Controller zijn allemaal voorbeelden van K8s-controllers (controleert stateless applicaties).

Knooppunt: Een pod kan worden gepland op een knooppunt, een fysieke of virtuele server. Een containerruntime, een kubelet-pod en een Kube-proxy-pod zijn allemaal op elk knooppunt geïnstalleerd (meer over deze drie items volgt). Handmatig en automatisch schalen van node groepen (ook wel autoscaling groepen of node pool groepen genoemd) is mogelijk.

Volumes: De opslagvolumes van de K8 maken langdurige gegevensopslag mogelijk die gedurende de hele levensduur van de pod toegankelijk is. De containers van een pod kunnen een opslagvolume delen. Een node heeft ook rechtstreeks toegang tot een opslagvolume.

Diensten: Een Kubernetes-service is een verzameling pods die samenwerken. Hieronder ziet u een voorbeeld van een K8s-service.

In een serviceconfiguratiebestand definieert een "labelselector" een verzameling pods die samen een enkele service vormen. De servicefunctie geeft de service een IP-adres en een DNS-naam en stuurt het verkeer door naar adressen die overeenkomen met de labelkiezer. Met deze aanpak kan de frontend effectief worden "losgekoppeld" (of geabstraheerd) van de backend.

Kube-proxy: Het Kube-proxy-onderdeel wordt op elk knooppunt geïnstalleerd en is verantwoordelijk voor het onderhouden van netwerkservices op werkknooppunten. Het is ook verantwoordelijk voor het onderhouden van netwerkregels, het mogelijk maken van netwerkcommunicatie tussen services en pods en het routeren van netwerkverkeer.

Kubelet: Op elk knooppunt wordt een kubelet uitgevoerd die informatie naar Kubernetes stuurt over de status en status van containers.

Containerruntime: De containerruntime is de software waarmee containers kunnen worden uitgevoerd. Containers, Docker en CRI-O zijn populaire voorbeelden van containerruntime.

Controller vliegtuig: De belangrijkste besturingseenheid van een cluster is de Kubernetes-master. Het beheert het volledige K8s-cluster, inclusief workloads, en dient als de communicatie-interface van het cluster. Het Kubernetes-controllervlak bestaat uit verschillende delen. Deze componenten stellen Kubernetes in staat applicaties met een hoge beschikbaarheid uit te voeren. Dit zijn de belangrijkste onderdelen van het Kubernetes-besturingsvlak:

  • enz: etcd slaat de algemene configuratiegegevens van het cluster op (dwz de status en details van een pod), waardoor de status van het cluster wordt weergegeven in Kubernetes-hoofdknooppunten. De API-server bewaakt het cluster en brengt wijzigingen aan in het cluster zodat deze overeenkomen met de gewenste statusset met behulp van etcd-gegevens.
  • API-server: JSON-gegevens worden verzonden via HTTP. Het dient als de interne en externe interface van Kubernetes. Het verwerkt verzoeken, valideert ze en instrueert de juiste service of controller om het statusobject in etcd bij te werken, en stelt gebruikers in staat om workloads over het cluster te configureren.
  • Scheduler: evalueert knooppunten om te bepalen waar een ongeplande pod moet worden geplaatst op basis van CPU- en geheugenverzoeken, beleid, labelaffiniteiten en plaats van werkbelastinggegevens

Controller-manager: De controllermanager is een enkel proces dat toezicht houdt op alle controllers van Kubernetes. Hoewel de controllers logisch gescheiden processen zijn, worden ze als een enkel proces in een DaemonSet uitgevoerd om dingen te vereenvoudigen.

Voorwaarden

Hardware-eisen

Een of meer machines met een van:

Ubuntu 16.04 +

Debian 9

7 CentOS

RHEL 7

Fedora 25/26 (inspanning)

HypriotOS v1.0.1+

Container Linux (getest met 1800.6.0)

Minimaal vereist geheugen & CPU (cores)

Het minimaal vereiste geheugen van het hoofdknooppunt is 2 GB en het werkknooppunt heeft minimaal 1 GB nodig

Het hoofdknooppunt heeft minimaal 1.5 en het werkknooppunt heeft minimaal 0.7 kernen nodig.

Clusterconfiguratie

Om uw cluster te beheren, moet u installeren kubeadm, kubelet en kubectl.

kubeadm: de opdracht om het cluster te bootstrappen.

kubus: het onderdeel dat op alle machines in uw cluster draait en dingen doet zoals het starten van pods en containers.

kubectl: het opdrachtregelprogramma om met uw cluster te praten.

Stappen om te volgen 

  • IP-tabellen configureren
  • Schakel SWAP uit
  • Docker installeren en configureren
  • Installeer Kubeadm-Kubelet & Kubectl
  • Standaard controlebeleid maken
  • NFS-clientstuurprogramma's installeren

Belangrijkste kenmerken van Kubernetes

Functies van Kubernetes

https://tinyurl.com/yc8rdrhh

Servicedetectie en taakverdeling: Kubernetes wijst een enkele DNS-naam en een IP-adres toe aan elke groep pods. Wanneer er veel verkeer is, verdeelt K8s automatisch de belasting over een service die meerdere pods kan bevatten.

Geautomatiseerde rollouts en rollbacks: K8's kunnen nieuwe pods inzetten en deze verwisselen met bestaande pods. Het kan ook configuraties wijzigen zonder eindgebruikers te beïnvloeden. Kubernetes bevat ook een geautomatiseerde rollback-functie. Als een taak niet met succes wordt voltooid, kan deze rollback-functionaliteit de wijzigingen ongedaan maken.

Geheim- en configuratiebeheer: Configuratie en geheime informatie kunnen veilig worden opgeslagen en bijgewerkt zonder de noodzaak om images opnieuw op te bouwen. Stackconfiguratie vereist geen onthulling van geheimen, waardoor het risico op gegevensaantasting wordt verkleind.

Opslag orkestratie: K8's kunnen worden gebruikt om verschillende opslagsystemen te koppelen, waaronder lokale opslag, netwerkopslag en openbare cloudproviders.

Automatische bakverpakking: Kubernetes-algoritmen proberen containers efficiënt toe te wijzen op basis van geconfigureerde CPU- en RAM-vereisten. Deze functie helpt bedrijven bij het optimaliseren van het gebruik van hulpbronnen.

Zelfgenezing: Kubernetes voert statuscontroles uit op pods en herstart containers die mislukken. Als een pod faalt, staat K8s geen verbindingen toe totdat de statuscontroles zijn voltooid.

Verschil tussen Kubernetes en Docker

Kubernetes Docker Zwerm
Complexe installatie Gemakkelijkere installatie
Complexer met een steile
leercurve, maar krachtiger
Lichtgewicht en gemakkelijker te
leren maar beperkte functionaliteit
Ondersteunt automatisch schalen Handmatig schalen
Ingebouwde monitoring Heeft tools van derden nodig voor:
Grensverkeer
Handmatige instelling van de belasting
balancer
Autoload-balancer
Behoefte aan een aparte CLI-tool Geïntegreerd met Docker CLI
Ondersteunt 2000 > knooppunten Ondersteunt maximaal 5000 knooppunten
Openbare cloudservice
aanbieder – Azuur Slechts
Openbare cloudservice
aanbieders – Google, Azure en AWS
Snelheid wordt overwogen voor de
sterke clusterstaten.
Biedt containerimplementatie
en schalen, zelfs in grote clusters zonder rekening te houden met de snelheid.
Gebruikt door Spotify,
Pinterest, eBay, Twitter, enz.
Gebruikt door 9GAG, Intuit,
Buffer, Evernote, enz.

Casestudy's uit de echte wereld

Babylon

Uitdaging

De producten van Babylon zijn sterk afhankelijk van machine learning en kunstmatige intelligentie, en in 2019 was er niet genoeg rekenkracht in Babylon om een ​​bepaald experiment uit te voeren. Naast groei (van 100 naar 1,600 in drie jaar), was het bedrijf van plan om uit te breiden naar andere landen.

Oplossing

Het infrastructuurteam van Babylon heeft zijn op Kubernetes gebaseerde gebruikersgerichte applicaties in 2018 verplaatst naar Kubeflow, een toolkit die machine learning op Kubernetes mogelijk maakt. We hebben een Kubernetes-kernserver ontworpen, we hebben Kubeflow geïmplementeerd en we hebben het hele experiment georkestreerd, wat erg goed uitpakte”, zegt AI Infrastructure Lead Jérémie Vallée. Bovenop Kubernetes wordt een zelfbedieningsplatform voor AI-training ontwikkeld.

Impact

In tegenstelling tot uren of dagen wachten op toegang tot computerbronnen, hebben teams er direct toegang toe. Vroeger duurde het 10 uur voordat een klinische validatie was voltooid; nu duurt het minder dan 20 minuten. Bovendien heeft Babylon's cloud-native platform het mogelijk gemaakt om internationaal uit te breiden.

Booking.com

Uitdaging

Booking.com implementeerde OpenShift in 2016, waardoor productontwikkelaars sneller toegang kregen tot de infrastructuur. Het infrastructuurteam werd een 'kennisknelpunt' toen zich uitdagingen voordeden omdat Kubernetes werd geabstraheerd van de ontwikkelaars. Het vermogen om ondersteuning op te schalen werd onhoudbaar.

Oplossing

Het platformteam besloot, na een jaar OpenShift te hebben gebruikt, om hun eigen vanilla Kubernetes-platform te bouwen en ontwikkelaars te vragen enkele Kubernetes te leren om het te kunnen gebruiken. Ben Tyler, hoofdontwikkelaar, B Platform Track, zegt: "Dit is geen magisch platform.". Je kunt het niet gebruiken door alleen de instructies te volgen. Ontwikkelaars moeten leren en we gaan er alles aan doen om hen te helpen leren.

Impact

Ondanks de leercurve is de acceptatie van Kubernetes gestegen. Het kan uren duren voordat ontwikkelaars een nieuwe service hebben gemaakt voordat ze worden gecontaineriseerd, of weken als ze Puppet niet kenden. Met het nieuwe platform duurt het slechts 10 minuten. In de eerste acht maanden zijn meer dan 500 nieuwe diensten ontwikkeld.

Spotify

Uitdaging

Met meer dan 200 miljoen maandelijkse actieve gebruikers wereldwijd, werd het audiostreamingplatform in 2008 gelanceerd. Jai Chakrabarti, Director of Engineering, Infrastructure and Operations, zegt: "We streven ernaar om makers meer mogelijkheden te bieden en een meeslepende luisterervaring mogelijk te maken voor al onze consumenten vandaag en in de toekomst.” Spotify, een early adopter van microservices en Docker, had gecontaineriseerde microservices over zijn vloot van VM's laten draaien met behulp van Helios, een zelf ontwikkeld containerorkestratiesysteem. "Een klein team hebben dat aan de functies werkte, was gewoon niet zo efficiënt als iets adopteren dat werd ondersteund door een veel grotere gemeenschap", zegt hij eind 2017.

Oplossing

"We zagen de ongelooflijke gemeenschap die was opgegroeid rond Kubernetes en wilden daar deel van uitmaken", zegt Chakrabarti. Kubernetes bood meer functies dan Helios. Bovendien "wilden we profiteren van een hogere snelheid en lagere kosten, en ons aansluiten bij de rest van de industrie op het gebied van best practices en tools." Tegelijkertijd wilde het team zijn kennis en invloed bijdragen aan de bloeiende Kubernetes-gemeenschap. De migratie, die gelijktijdig met Helios zou plaatsvinden, zou soepel moeten verlopen omdat "Kubernetes heel mooi past als compliment en nu als vervanger van Helios", aldus Chakrabarti.

Impact

Het team heeft een groot deel van 2018 besteed aan het aanpakken van de belangrijkste technologische problemen die nodig zijn voor een migratie, die eind dat jaar begon en een belangrijk aandachtspunt is voor 2019. “Een klein percentage van onze vloot is gemigreerd naar Kubernetes, en we hebben van onze interne teams dat ze zich minder hoeven te concentreren op handmatige capaciteitsvoorziening en meer tijd hebben om zich te concentreren op het leveren van functies voor Spotify”, zegt Chakrabarti. Volgens James Wen, Site Reliability Engineer, verwerkt de grootste service die momenteel op Kubernetes draait ongeveer 10 miljoen verzoeken per seconde als een geaggregeerde service en profiteert hij enorm van automatisch schalen. "Voorheen moesten teams een uur wachten om een ​​nieuwe service te creëren en goedkeuring te krijgen", voegt hij eraan toe.

Adidas

Uitdaging

De afgelopen jaren was het Adidas-team tevreden met zijn technologische keuzes, maar toegang tot alle tools was een uitdaging. "Alleen al om een ​​VM voor ontwikkelaars te krijgen", zegt Daniel Eichten, Senior Director van Platform Engineering, "moest je een aanvraagformulier verzenden, het doel opgeven, de titel van het project geven, wie verantwoordelijk is, de interne kostenplaats bellen, zodat dat ze kunnen opladen.” “In het beste geval had je je machine binnen een half uur in huis. In het ergste geval is dat een halve week of zelfs een week.”

Oplossing

Om het proces te verbeteren, "zijn we begonnen vanuit het oogpunt van de ontwikkelaar", en zochten we naar manieren om de tijd te verkorten die nodig was om een ​​project in gebruik te nemen en in de Adidas-infrastructuur te krijgen, zegt Senior Director van Platform Engineering Fernando Cornago. Ze vonden de oplossing met containerisatie, agile ontwikkeling, continue levering en een cloud-native platform met Kubernetes en Prometheus.

Impact

Zes maanden na de start van het project draaide de e-commercesite van Adidas volledig op Kubernetes. De laadtijd van de e-commercesite werd gehalveerd. De frequentie van afgifte nam toe van elke 4-6 weken tot 3-4 keer per dag. adidas draait nu 40% van zijn meest kritische, impactvolle systemen op zijn cloud-native platform, met 4,000 pods, 200 nodes en 80,000 builds per maand

Voordelen

  • Het gebruik van Kubernetes en zijn enorme ecosysteem kan uw productiviteit verbeteren
  • Kubernetes en een cloud-native tech stack trekken talent aan
  • Test en autocorrectie van applicaties
  • Kubernetes is een toekomstbestendige oplossing
  • Kubernetes helpt om uw applicatie stabieler te laten werken
  • Kubernetes kan goedkoper zijn dan zijn alternatieven
  • Het is ontwikkeld door Google, wat jarenlange waardevolle ervaring in de branche met zich meebrengt.
  • Grootste community onder tools voor containerorkestratie.
  • Biedt een verscheidenheid aan opslagopties, waaronder on-premises SAN's en openbare clouds.
  • Houdt zich aan de principes van onveranderlijke infrastructuur.
  • Implementaties en updates beheren en automatiseren
  • Bespaar geld door infrastructurele middelen te optimaliseren dankzij het efficiëntere gebruik van hardware
  • Schaal resources en applicaties in realtime
  • Los veel voorkomende problemen op die voortvloeien uit de verspreiding van containers door ze in "pods" te organiseren

Nadelen

  • Kubernetes kan een overkill zijn voor eenvoudige toepassingen
  • De overgang naar Kubernetes kan omslachtig zijn
  • Beperkte functionaliteit volgens de beschikbaarheid in de Docker API.
  • Zeer complex installatie-/configuratieproces
  • Niet compatibel met bestaande Docker CLI- en Compose-tools
  • Ingewikkelde handmatige clusterimplementatie en automatische instelling van horizontale schaling

Woordenlijst Kubernetes-ecosysteem

TROS

Is een set machines die afzonderlijk worden aangeduid als knooppunten die worden gebruikt om gecontaineriseerde applicaties uit te voeren die worden beheerd door Kubernetes.

Knooppunt

Is een virtuele of fysieke machine. Een cluster bestaat uit een hoofdknooppunt en een aantal werkknooppunten.

Cloudcontainer

Is een afbeelding die software en zijn afhankelijkheden bevat.

Peul

Is een enkele container of een set containers die wordt uitgevoerd op uw Kubernetes-cluster.

Deployment

Is een object dat gerepliceerde toepassingen beheert die worden weergegeven door pods. Pods worden geïmplementeerd op de knooppunten van een cluster.

Replicaset

Zorgt ervoor dat een opgegeven aantal pod-replica's tegelijk wordt uitgevoerd.

Service

Beschrijft hoe u toegang krijgt tot toepassingen die worden vertegenwoordigd door een set pods. Services beschrijven doorgaans poorten en load balancers en kunnen worden gebruikt om interne en externe toegang tot een cluster te regelen.

containers: Een standalone, uitvoerbaar softwarepakket dat alle benodigde code en afhankelijkheden bevat.

Onveranderlijke architectuur: Een infrastructuurparadigma waarbij servers nooit worden gewijzigd, alleen worden vervangen.

Infrastructuur-als-code: De praktijk van het leveren en beheren van datacenterbronnen met behulp van menselijk leesbare declaratieve definitiebestanden (bijv. YAML).

Microservices: Een reeks onafhankelijk inzetbare softwarediensten die samen een applicatie vormen.

Verticaal schalen: Waar u meer CPU of geheugen toewijst aan uw individuele machines of containers.

Horizontaal schalen: Waar u meer machines of containers toevoegt aan uw load-balanced computing-resourcepool.

Conclusie

Kubernetes is een geavanceerd systeem. Het heeft echter bewezen het meest veerkrachtige, schaalbare en performante platform te zijn voor het orkestreren van hoog beschikbare containergebaseerde applicaties, het ondersteunen van ontkoppelde en diverse stateless en stateful workloads en het bieden van geautomatiseerde rollouts en rollbacks.

Er is geen eenvoudig antwoord op de vraag of het adopteren van Kubernetes de beste optie voor u is. Het is afhankelijk van uw specifieke eisen en prioriteiten, en veel technische redenen worden hier niet eens genoemd. Als u een nieuw project start, werkt in een startup die meer wil schalen en ontwikkelen dan alleen een snelle MVP, of een verouderde applicatie moet upgraden, kan Kubernetes een goede keuze zijn omdat het veel flexibiliteit, kracht en schaalbaarheid. Het vereist echter altijd een tijdsinvestering omdat er nieuwe vaardigheden moeten worden geleerd en er nieuwe workflows moeten worden opgezet in uw ontwikkelteam.

Als het echter correct wordt gedaan, zal het investeren van de tijd om Kubernetes te leren en te adopteren, in de toekomst vaak de moeite waard zijn vanwege een verbeterde servicekwaliteit, verhoogde productiviteit en een gemotiveerder personeelsbestand.

In ieder geval moet u een weloverwogen beslissing nemen en er zijn tal van dwingende redenen om Kubernetes te gebruiken of te vermijden. Ik hoop dat dit bericht je heeft geholpen bij het maken van de beste beslissing voor jou.

De in dit artikel getoonde media zijn geen eigendom van Analytics Vidhya en worden naar goeddunken van de auteur gebruikt.

spot_img

Laatste intelligentie

spot_img