Alla scoperta di Kubernetes con Play-with-k8s
Play with Kubernetes (aka Play-with-k8s) è un servizio molto utile per chi inizia a muovere i primi passi con il noto orchestratore di container, ma anche per fare dei test. Il tutto a costo zero.
Per chi volesse un'infarinatura sui concetti di base di Kubernetes è disponibile una piccola guida.
L'unico prerequisito è un account su Docker Hub, anche questo free.
Dopo aver effettuato il login si ha a disposizione un cluster in cui è possibile aggiungere fino ad un massimo di 5 nodi che possiamo distribuire tra master e worker.
L'unica limitazione è la breve durata della sessione, limitata a sole (si fa per dire) quattro ore.
Inoltre, in alcuni momenti di picco, il servizio potrebbe non essere disponibile.
All'avvio aggiungiamo il primo nodo che possiamo inizializzare come master eseguendo
kubeadm init --apiserver-advertise-address $(hostname -i)
Abilitiamo il networking con
kubectl apply -n kube-system -f \
"https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 |tr -d '\n')"
Siamo pronti ad aggiungere i nodi worker digitando in ciascuno di essi il comando riportato al termine della procedura di inizializzazione del master.
Nel nostro caso si tratta di
kubeadm join 192.168.0.8:6443 --token ow4hov.gpjxlhc9wythyzt6 \
--discovery-token-ca-cert-hash sha256:912be97afc61d37d506cacc8bdb9864d12690723e9a7a90ad6cdfca5f9438f2c
Dopo aver ripetuto l'operazione con gli altri nodi possiamo verificare lo stato del cluster digitando
kubectl get nodes
Proviamo a creare un deployment di prova eseguendo sul nodo master il comando
kubectl create deployment nginx --image=nginx
Verifichiamo che tutto sia corretto visualizzando la lista dei deployment
kubectl get deployments
Possiamo anche dare un'occhiata più da vicino con
kubectl describe deployment nginx
Il pod appena creato non è accessibile quindi creiamo un service di tipo NodePort indicando come porta la 80 esposta dal container nginx
kubectl create service nodeport nginx --tcp=80:80
Ricordiamo che i vari pod sono in esecuzione sui worker e che nel nostro caso abbiamo attiva una sola istanza.
Prima di tutto visualizziamo la lista dei servizi in modo da individuare la porta a cui è raggiungibile il container con
kubectl get services
Verifichiamo che tutto funzioni correttamente contattando il nodo 2 con indirizzo 192.168.0.7 e specificando la porta 31292 su cui è in esecuzione nginx
[node1 ~]$ curl 192.168.0.7:31292
Per ora è tutto. Abbiamo un cluster Kubernetes nuovo di zecca, a costo zero con cui potremo fare i nostri prossimi esperimenti a partire dai vari file di configurazione per deployment, service, ingress ecc.