Lezioni apprese durante lo sviluppo di un operator Kubernetes
Sergio Marcelino è un Full Stack Software Engineer in Entando e lavora sull’architettura di nuova generazione, cloud native, Kubernetes e a microservizi di Entando. In questo blog post Sergio condivide alcune lezioni apprese e suggerimenti su come iniziare con Kubernetes e gli operator in un ambiente di sviluppo.
Circa un mese fa, ho iniziato a lavorare su un progetto Kubernetes in Entando e, durante la pianificazione, è stato subito chiaro che avremmo avuto bisogno di un operator Kubernetes.
Uno dei miei colleghi ha dato il via al progetto e ho avuto il compito di orchestrare i container con Keycloak (un software per gestire le attività di autenticazione e sicurezza). Abbiamo deciso di consentire all'operator di creare un'istanza Keycloak su richiesta, quindi è stato necessario utilizzarlo per creare un client per il container con ruoli e permessi, infine fornire le credenziali out of the box al container in modo che potesse utilizzarlo per autenticare gli utenti.
Quindi la mia prima sfida è stata capire come creare tutto questo nell'operator k8s, ho iniziato a sviluppare la creazione dell'istanza Keycloak. Prima di tutto ho dovuto installare un cluster Kubernetes sulla mia macchina, ho scelto Minikube.
I problemi con Minikube
Ho una macchina con 16 GB di RAM e 250 GB SSD m.2 che è 10 volte più veloce di un normale SSD. Non ho mai avuto problemi con la memoria fino a quando non ho iniziato a lavorare con Kubernetes e per me è stato strano, perché, anche se ho 16 GB di RAM, l'SSD è così veloce che nella maggior parte delle volte uso swap e non ho mai notato la differenza. Ma mentre cercavo di creare le distribuzioni, il cluster ha iniziato improvvisamente ad avere problemi.

Dopo una serie di ricerche ho capito che Kubernetes su MacOS non funziona in modo nativo, usa VirtualBox e la memoria della mia macchina non era in uso. Per impostazione predefinita utilizza solo 1 GB, quindi è necessario creare il cluster passando la memoria che si desidera utilizzare. Per prima cosa è necessario cancellare il cluster precedente per applicare le modifiche.

Comandi Importanti
Ecco alcuni comandi importanti.

Come un pod può connettersi a un altro?
Quindi ho dovuto creare un pod MySQL e dopo creare il pod Keycloak che si collega al database. Fondamentalmente sarà necessario creare un servizio che esponga la porta e quindi utilizzare il nome del servizio come indirizzo.

Il mio pod Keycloak stava ricevendo un segnale KILL
Avendo installato con successo MySQL, ho creato il Keycloak che si collega al database ma non ho potuto avviare l'istanza Keycloak perché il pod stava ricevendo un segnale KILL e non avevo idea del perché.
Dopo alcune ricerche ho trovato che un ragazzo con un problema simile perché la sua macchina non aveva abbastanza memoria disponibile, quindi ho sospettato che ci sarebbero state alcune risorse limitative su Kubernetes (era anche legato al problema del minikube). È necessario quindi mettere la distribuzione.

Conclusioni e risultati
Pensando ai primi passi in Kubernetes, è un pò difficile memorizzare tutti quei comandi, quindi penso che sia importante creare una nota con la lista di tutti i comandi e quando utilizzarli.
Alcuni errori e comportamenti sono difficili da leggere e capire, ho dovuto cercare su Google per trovare le risposte sul perché un pod non è in grado di connettersi a un altro pod e altri aspetti del genere, sebbene la documentazione di Kubernetes sia estremamente completa.
Una cosa che dovrebbe essere chiara nei documenti è il Minikube VirtualBox per allocare le risorse, inizialmente pensavo che il mio computer non avesse abbastanza memoria per gestirlo.