kubernetes services

in Architetture Software, Informatica

Kubernetes – Services

Reading Time: 2 minutes

Spesso mi viene chiesto perchè è necessario utilizzare i services all’interno di un cluster Kubernetes. Semplificando, i services sono un insieme di pods che espongono le loro funzionalità agli utenti o ad altri servizi. Il traffico che viene inviato ad un servizio viene forwardato ad uno dei pods che fanno parte di quel servizio.

Per poter assegnare un pod ad un servizio è sufficiente utilizzando la label all’interno dello yaml file, oppure all’interno del comando di creazione del pods.

Perchè utilizzare i services?

La comunicazione Pod-to-Pod all’interno di un cluster kubernetes può avvenire utilizzando l’indirizzo ip associato a ciascun Pod. La gestione dei pods avviene tramite il cluster manager che potrebbe intervenire nella loro ricreazione/sostituzione, ad esempio lo scaling. I nuovi pods ottengono un nuovo indirizzo IP, e questo rilascio potrebbe interrompere la comunicazione con gli altri pods e eventuali servizi esterni.

Gli utenti esterni ed i pods utlizzano indirizzi IP permanenti per permettono di definirne gli accessi. In questo contesto, intervengono i services. I services consentono di implementare features di gestione avanzata come il loadbalancing, gli endpoints ed il service discovery. In pratica, l’utilizzo dei services consente di aggregare services per funzionalità, entrando in un ottica di microservices.

Nella definizione di una struttura di microservices devono essere rispettate le seguenti caratteristiche:

  • deve essere impostato un identificatore univoco per la rete, che deve rimanere lo stesso nell’ utiilzzo di operazioni schedulate
  • persistenza dei dati utilizzando storage (es. volume)
  • deployment ordinato e scaling ordinato
  • rolling update ordinato ed automatizzato

I pre-requisisti precedenti consentono di raggiungere un livello di persistenza dei dati, aggiungendo questo livello all’interno dei servizi.

Lo storage all’interno di un pods è volatile: ciò significa che quando il pods verrà restartato lo storage perderà il suo contenuto. I volumi in kubernetes consentono di definire un’area del filesystem e di utilizzarla per la memorizzazione dei dati. Il mount point di un volume può essere un punto qualsiasi del filesystem, ma un volume non può essere montato su piuù container.

Inoltre, i services sono l’oggetto in kubernetes che consente di esporre all’esterno del cluster i nostri servizi. Per poter esporre i servizi all’esterno è possibile utilizzare gli ingress (di cui ho parlato in questo link).