È uscita una nuova versione di Kubernetes, quindi eccoci con un altro articolo di Kubernetes. Con Kubernetes 1.5, kubeadm è ancora in versione alfa e non è consigliabile utilizzarlo in produzione poiché non supporta ancora il servizio di bilanciamento del carico. Installeremo un noto negozio di calze online come demo e utilizzeremo nodeport per esporre il servizio.
Installazione di Kubernetes 1.5 su tutti i nodi
Aggiungiamo il repository kubernetes per CentOS:
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetesbaseurl=http://yum.kubernetes.io/repos/kubernetes-el7-x86_64enabled=1gpgcheck=0repo_gpgcheck=0EOF
Dopo aver aggiunto il repository, dobbiamo disattivare SElinux perché non funziona molto bene con kubernetes. Per disattivarlo momentaneamente, digita
setenforce 0
Per farlo persistere dopo il riavvio, usa nano per modificare il file di configurazione di SElinux in questo modo:
nano /etc/selinux/config
e assicurati che la linea SELINUX sia impostata su permissiva o disabilitata:
SELINUX=disabled
Salva il file e possiamo continuare con l'installazione dei pacchetti richiesti.
yum install docker kubelet kubeadm kubectl kubernetes-cni
Per abilitare l'avvio automatico della finestra mobile all'avvio, esegui questo comando:
systemctl enable docker
E per avviarlo ora, esegui quanto segue.
systemctl start docker
Quindi facciamo lo stesso per kubelet
systemctl enable kubelet
systemctl start kubelet
Configurazione del cluster
La prima cosa che dobbiamo fare è decidere il padrone del nostro nuovo cluster. Se tutti i nodi sono impostati come mostrato sopra, quindi eseguiamo il nostro nodo master designato il seguente comando.
kubeadm init
Nota che non puoi eseguire questo comando due volte, dovrai smontare il cluster prima di eseguirlo la seconda volta. L'output sarà simile a questo:
[root@centos-01 kubernetes]# kubeadm init
[kubeadm] WARNING: kubeadm is in alpha, please do not use it for production clusters.
[preflight] Running pre-flight checks
[preflight] WARNING: firewalld is active, please ensure ports [6443 9898 10250] are open or your cluster may not function correctly
[init] Using Kubernetes version: v1.5.1
[tokens] Generated token: "9a6b48.b4011ffeeb237381"
[certificates] Generated Certificate Authority key and certificate.
[certificates] Generated API Server key and certificate
[certificates] Generated Service Account signing keys
[certificates] Created keys and certificates in "/etc/kubernetes/pki"
[kubeconfig] Wrote KubeConfig file to disk: "/etc/kubernetes/kubelet.conf"
[kubeconfig] Wrote KubeConfig file to disk: "/etc/kubernetes/admin.conf"
[apiclient] Created API client, waiting for the control plane to become ready
[apiclient] All control plane components are healthy after 105.821991 seconds
[apiclient] Waiting for at least one node to register and become ready
[apiclient] First node is ready after 4.505809 seconds
[apiclient] Creating a test deployment
[apiclient] Test deployment succeeded
[token-discovery] Created the kube-discovery deployment, waiting for it to become ready
[token-discovery] kube-discovery is ready after 68.003359 seconds
[addons] Created essential addon: kube-proxy
[addons] Created essential addon: kube-dns
Your Kubernetes master has initialized successfully!
You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
http://kubernetes.io/docs/admin/addons/
You can now join any number of machines by running the following on each node:
kubeadm join --token=9a6b48.b4011ffeeb237381 45.55.128.42
Installazione della rete pod e aggiunta di nodi a un cluster
Nella parte precedente, abbiamo inizializzato il cluster master e abbiamo ottenuto nell'ultima riga il comando con un token che useremo per aggiungere nodi. Ma prima di farlo, dobbiamo installare la rete pod.
kubectl apply -f https://git.io/weave-kube
Esistono molti modi per avere una rete di pod, ma sopra uno è forse il più semplice. Utilizza Container Network Interface o CNI, che è lo standard proposto per i container di rete su Linux.
Successivamente possiamo aggiungere nodi al cluster eseguendo questo comando su tutti i nodi
kubeadm join --token=bb6fc2.be0345f5b02a32a0 45.55.128.42
Il token è stato disinfettato, quindi non è possibile aggiungere nodi al mio cluster. Successivamente consente ai pod di essere eseguiti sul master e non solo sui nodi.
kubectl taint nodes --all dedicated-
Dopodiché possiamo controllare i nodi per vedere se sono tutti online.
kubectl get nodes
Esempio di installazione di microservizi
C'è un semplice esempio di microservizi che useremo per testare il nostro cluster. È un negozio online di calze.
Per prima cosa aggiungeremo il negozio di calze dello spazio dei nomi
kubectl create namespace sock-shop
E poi creiamo il servizio
kubectl apply -n sock-shop -f "https://github.com/microservices-demo/microservices-demo/blob/master/deploy/kubernetes/complete-demo.yaml?raw=true"
Dopo questo dobbiamo aspettare un po' di tempo prima che i container vengano creati e poi possiamo provare a visitare il nuovo sito. Per visitarlo, dobbiamo conoscerne l'indirizzo. Esaminiamo il servizio
kubectl describe svc front-end -n sock-shop
Ti darà un output simile a questo
Name: front-end
Namespace: sock-shop
Labels: name=front-end
Selector: name=front-end
Type: NodePort
IP: 10.104.11.202
Port: <unset> 80/TCP
NodePort: <unset> 31500/TCP
Endpoints: 10.32.0.4:8079
Session Affinity: None
No events.
La linea in grassetto è evidenziata da me perché abbiamo bisogno del numero di porta utilizzato dal servizio. Dobbiamo combinare il numero di porta con l'indirizzo di uno dei nostri nodi e arriveremo al sito.
Conclusione
Quindi abbiamo impostato correttamente il cluster Kubernetes 1.5 con kubeadm su CentOS 7. Nel nostro caso si tratta di un cluster a tre nodi ma kubeadm consente di ridimensionare facilmente il cluster con l'aggiunta di nuovi nodi. Assicurati di mantenere privato il tuo token perché con un token e un IP pubblico, chiunque può aggiungere nodi al tuo cluster. Con ciò concludiamo questo articolo, grazie per la lettura e buona giornata.