Kubernetes

De Viquipèdia
Salta a la navegació Salta a la cerca
Infotaula de programariKubernetes
Kubernetes logo without workmark.svg
Desenvolupador(s)Google modifica
Versió inicial7 juny 2014 modifica
Escrit enGo modifica
Sistema operatiumultiplataforma modifica
TipusLinux Foundation Project (en) Tradueix i programari lliure modifica
LlicènciaLlicència Apache, versió 2.0 modifica
Més informació
Lloc webWeb oficial modifica
BlogBlog oficial modifica
Stack ExchangeEtiqueta modifica
Twitter: kubernetesio Modifica els identificadors a Wikidata

Kubernetes (també anomenat k8s) és un sistema d'orquestració de contenidors per l'automatització del desplegament, escalat i gestió d'aplicacions, arreu d'un clúster de hosts. És de codi obert i funciona amb tota una sèrie de tecnologies de contenidorització, sovint amb Docker. Inicialment fou concebut per Google i posteriorment posat a disposició de la Cloud Native Computing Foundation. Molts de serveis al núvol ofereixen plataformes basades en Kubernetes o infraestructures com a servei (PaaS o IaaS) sobre les que Kubernetes pot ser desplegat com un proveïdor de plataforma. Molts fabricant proveeixen també les seves distribucions amb la seva pròpia marca.

Història[modifica]

Kubernetes (de κυβερνήτης: grec per "timoner" o "pilot") fou anunciat per primer cop per Google a mitjans del 2014. El seu desenvolupament i arquitectura van ser fortament influenciats pel sistema Borg de Google. La majoria dels col·laboradors van sortir del projecte Borg. El nom intern de Kubernetes era inicialment Project Seven, en referència al personatge de Star Trek que és un Borg que va esdevenir amistós.[1] Els set radis de timó del logotip de Kubernetes són una referència al nom original.

La versió 1.0 de Kubernetes va ser publicada el 21 de juliol de 2015.[2] Amb el llançament de la primera versió de Kubernetes, Google va associar-se amb la Fundació Linux per crear la Cloud Native Computing Foundation (CNCF) i va oferir a Kubernetes com a tecnologia inicial.

Kubernetes també és utilitzat per RedHat per al seu producte OpenShift,[3] per CoreOS dintre el seu producte Tectonic, i per Rancher Labs per la seva plataforma de gestió de contenidor Rancher.[4]

Components[modifica]

Kubernetes defineix un conjunt d'eines ("primitives") que proporcionen conjuntament mecanismes per desplegar, mantenir i escalar aplicacions. Aquests elements que formen Kubernetes estan dissenyats per ser combinats i extensibles i per tant per suportar una gran varietat de càrrega de treball. Aquesta extensibilitat és proporcionada en gran manera per l’API de Kubernetes, que s’utilitza tant per components interns com per extensions i contenidors que s’executen a Kubernetes.[5]

Pods[modifica]

La unitat bàsica de programació de Kubernetes s'anomena "pod" (mola).[6] És una visió abstracta dels components continguts. Un pod consisteix en un o més contenidors que corren al mateix servidor i que poden compartir recursos.[5] Cada pod de Kubernetes té una adreça IP única (dins del clúster), que permet a les aplicacions utilitzar els ports de la màquina sense risc de conflicte.[7] Un pod pot definir un volum, com un directori en un disc local o a la xarxa, exposat als contenidors d'aquest pod.[8] Els pods es poden gestionar manualment a través de l'API de Kubernetes. La seva gestió també pot ser delegada en un controlador.[5]

Els pods pengen del node que els desplega fins que caduquen o són suprimits. Si el node falla, es podran implementar nous pods amb les mateixes propietats que els anteriors a altres nodes disponibles.[9]

Etiquetes i selectors[modifica]

Kubernetes permet als clients (usuaris i components interns) associar claus anomenades "etiquetes" a qualsevol objecte API del sistema, com ara pods i nodes. Complementàriament, els "selectors d'etiquetes" són consultes contra etiquetes que resolen els objectes vinculats.[5]

Les etiquetes i els selectors són el primer mecanisme d'agrupació de Kubernetes i s'utilitzen per determinar els components sobre els quals aplicar una operació.[10]

Per exemple, si els pods d’una aplicació tenen etiquetes per a un sistema nivell ("frontend", "backend", per exemple) i un circuit de versions ("canary", "preproducció", "producció", per exemple), llavors una operació sobre tot els nodes de backend i de canary poden utilitzar una etiqueta de selecció de la manera següent:

nivell=backend AND circuit de versions=canary

Controladors[modifica]

Un controlador és un bucle d’ harmonització que duu l’ estat actual d’ un clúster fins al seu estat desitjat,[11] comunicant-se amb l'API del servidor per crear, actualitzar i eliminar els recursos que gestiona. El gestor del controlador és un procés que gestiona un conjunt de controladors del nucli de Kubernetes.

Un tipus de controlador seria el "controlador de replicació", que gestiona la replicació i l'escalat executant un conjunt específic de còpies d'un pod arreu d'un clúster. També gestiona la creació de pods de substitució si el node subjacent cau.[11]

Dos dels controladors que formen part del sistema central de Kubernetes són:

  • el "DaemonSet Controller", per executar exactament un pod a cada màquina (o un subconjunt de màquines)
  • el "Job Controller”, per llançar pods que tenen un objectiu específic (per exemple, scripts).[12]

El conjunt de pods que gestiona un controlador està determinat per les etiquetes de selecció, establertes a la configuració del controlador.

Serveis[modifica]

Un servei Kubernetes és un grup de pods que treballen junts, per exemple, una capa en una aplicació multicapa. El pods que constitueixen un servei estan definits per un selector d'etiquetes.

Kubernetes proporciona dos modes de descoberta de servei, usant variables d'entorn o DNS de Kubernetes. El servei de descoberta assigna una IP estable i un nom DNS al servei i balanceja el cabal de dades (amb un algorisme round-robin) a les connexions de xarxa d'aquesta adreça IP, entre els pods relatius al selector (fins i tot en cas de fallada, ja que llavors els pods canvien de màquina).[7] Per defecte, un servei és disponible dins d’un clúster (ex: els pods de backend es poden agrupar en un servei, amb peticions de pods de càrrega frontend equilibrats cap al backend), però també pot ser disponible des de fora d’un clúster (per exemple, perquè els clients puguin veure pods de frontend).[13]

Arquitectura[modifica]

El disseny de Kubernetes es basa en el model mestre/esclau. Podem distingir els components de Kubernetes entre els que gestionen un node individual i els que són d'un pla de control.

Pla de control Kubernetes[modifica]

El mestre de Kubernetes és la unitat de control principal del clúster, gestionant la seva càrrega de treball i dirigint les comunicacions arreu del sistema. El pla de control de Kubernetes consisteix en diversos components, cadascun dintre del seu procés, que poden córrer tant a un node master simple com en múltiples mestres, suportant clústers d'alta disponibilitat. Els components d'un pla de control són:

  • etcd : és una unitat d'emmagatzemament de dades de tipus clau/valor, distribuïda, persistent i lleugera. Prioritza la consistència damunt la disponibilitat. Les decisions preses pel servidor d'API de Kubernetes es recolzen en aquest dispositiu. Per exemple, si etcd determina que hi ha d'haver tres instàncies corrent i el servidor detecta que només n'hi ha dues, Kubernetes planificarà el desplegament de la unitat que falta.
  • servidor d'API : és un element clau, serveix l'API sobre HTTP amb REST i JSON, proveint la interfície interna i externa de Kubernetes. El servidor d'API gestiona i valida les peticions i actualitza l'estat dels objectes de l'API a l'etcd, permetent així als clients configurar la càrrega de treball i els contenidors als nodes.
  • planificador : és un component adicional que selecciona el node on correrà un pod no planificat, en base a la disponibilitat de recursos.
  • gestor del controlador : procés dintre el qual s'executen els controladors principals de Kubernetes, com ara DaemonSet o Replication Controller. Els controladors es comuniquen amb el servidor d'API per crear, posar al dia i eliminar els recursos que gestiona (pods, serveis d'endpoint, etc).[14]

Node kubernetes[modifica]

El node, també anomenat worker o minion, és una màquina on s'hi despleguen contenidors. Cada node del clúster ha d'executar un programa de contenidorització (com ara Docker), així com els elements esmentats a sota, per la comunicació amb el primari amb l'objectiu de definir la configuració de xarxa d'aquests contenidors.

  • kubelet : el responsable de l'execució de cada node (garanteix que tots estan en bon estat). Els arrenca i atura segons el pla de control [5][15]
  • kube-proxy : implementació d'un proxy de xarxa i un repartidor de càrrega, gestiona els servei d'abstracció com ara altres operacions de xarxa.[5] És responsable d'efectuar l'enrutament del trànsit de dades cap al contenidor apropiat, en base a la IP i el número de port de la petició entrant
  • cAdvisor : agent que monitoritza i obté les dades de consum dels recursos i rendiment, com el processador, la memòria o l'ús de disc i xarxa dels contenidors de cada node

Referències[modifica]

  1. «Early Stage Startup Heptio Aims to Make Kubernetes Friendly» (en anglès), 18-11-2016. [Consulta: 23 maig 2020].
  2. «As Kubernetes Hits 1.0, Google Donates Technology To Newly Formed Cloud Native Computing Foundation» (en anglès). TechCrunch, 21-07-2015. [Consulta: 23 maig 2020].
  3. «Why Red Hat Chose Kubernetes for OpenShift» (en anglès), 07-11-2016. [Consulta: 23 maig 2020].
  4. «Launching Kubernetes with Rancher». [Consulta: 23 maig 2020].
  5. 5,0 5,1 5,2 5,3 5,4 5,5 «An Introduction to Kubernetes» (en anglès), 02-05-2018. [Consulta: 23 maig 2020].
  6. «What is a Pod?» (en anglès). kubernetes.io. [Consulta: 23 maig 2020].
  7. 7,0 7,1 «Kubernetes 101 – Networking» (en anglès), 11-02-2015. [Consulta: 23 maig 2020].
  8. «Kubernetes for developers» (en anglès), 21-05-2015. [Consulta: 23 maig 2020].
  9. «Transformez votre Architecture applicative avec Kubernetes» (en francès). [Consulta: 23 maig 2020].
  10. «Containerizing Docker on Kubernetes !!» (en anglès), 16-09-2015. [Consulta: 23 maig 2020].
  11. 11,0 11,1 «Overview of a Replication Controller» (en anglès). [Consulta: 23 maig 2020].
  12. «Overview of a Replication Controller» (en anglès). [Consulta: 23 maig 2020].
  13. «Kubernetes 101 – External access into the cluster» (en anglès), 19-02-2015. [Consulta: 23 maig 2020].
  14. «Kubernetes from the ground up: the API server» (en anglès), 06-09-2015. [Consulta: 23 maig 2020].
  15. «What even is a kubelet?» (en anglès), 27-08-2015. [Consulta: 23 maig 2020].