Introduzione
Kubernetes è un cluster e orchestrazione motore per container Docker. In altre parole, Kubernetes è un software o uno strumento open source utilizzato per orchestrare e gestire i container Docker in un ambiente cluster. Kubernetes è anche noto come k8s ed è stato sviluppato da Google e donato a "Cloud Native Computing Foundation"
Obiettivo
Questa configurazione del cluster kubernetes avrà 1 nodo master con CentOS 7 e 2 nodi di lavoro noto anche come minion avere Server Windows 2k19 sistema operativo.
Installeremo e configureremo il cluster kubernetes sulle VM del datacenter per gestire i container Docker. Questo cluster include 1 master (Linux) e 2 nodi di lavoro (Windows), il master controllerà le pianificazioni e le distribuzioni dei pod sui nodi di lavoro.
Diagramma dell'architettura Kubernetes
Alcuni importanti Terminologia Kubernetes è necessario sapere prima di iniziare la configurazione
ETCD (Nodo cluster) :Kubernetes usa “etcd” come archivio di database di valori-chiave. Memorizza la configurazione del cluster Kubernetes in "etcd" .
kube-controller-manager: Il controller controller Kubernetes è un demone che incorpora i loop di controllo principali forniti con Kubernetes. In Kubernetes, un controller è un circuito di controllo che controlla lo stato condiviso del cluster tramite "apiserver" e apporta modifiche tentando di spostare lo stato corrente verso lo stato desiderato. Esempi di controller forniti con Kubernetes oggi sono il controller di replica, il controller degli endpoint, il controller dello spazio dei nomi e il controller degli account di servizio
kube-apiserver :il server API Kubernetes convalida e configura i dati per gli oggetti API che includono pod, servizi, controller di replica e altri. Il server API esegue le operazioni REST e fornisce il frontend allo stato condiviso del cluster attraverso il quale interagiscono tutti gli altri componenti.
kube-scheduler: Lo scheduler di Kubernetes è una funzione ricca di policy, sensibile alla topologia e specifica del carico di lavoro che ha un impatto significativo su disponibilità, prestazioni e capacità. Lo scheduler deve tenere in considerazione i requisiti di risorse individuali e collettivi, i requisiti di qualità del servizio, i vincoli hardware/software/politici, le specifiche di affinità e anti-affinità, la località dei dati, l'interferenza tra i carichi di lavoro, le scadenze e così via.
kubelet :Il "kubelet" è il principale "agente nodo ” che viene eseguito su ciascun nodo. Può registrare il nodo con l'apiserver usando uno tra:il nome host; un flag per sovrascrivere il nome host; o una logica specifica per un provider cloud.
kube-proxy :il proxy di rete Kubernetes viene eseguito su ciascun nodo. Ciò riflette i servizi definiti nell'API Kubernetes su ciascun nodo e può eseguire un semplice inoltro di flussi TCP, UDP e SCTP o un inoltro round robin TCP, UDP e SCTP su una serie di back-end.
Descrizione della configurazione del cluster Kubernetes
Nella configurazione di Kubernetes abbiamo 1 nodo master (CentOS 7) e 2 nodi di lavoro (Win 2k19). Dal nodo master possiamo gestire il cluster e i suoi nodi usando 'kubeadm 'e 'kubectl 'comando.
Kubernetes può essere installato e distribuito utilizzando i seguenti metodi:
- Minikube (è un cluster kubernetes a nodo singolo)
- Kops (configurazione di kubernetes multinodo in AWS)
- Kubedm (cluster multinodo nelle nostre sedi)
In questo articolo installeremo l'ultima versione di Kubernetes 1.16 su CentOS 7 / RHEL 7 con l'utilità kubeadm. In questa configurazione prendiamo 1 server CentOS 7 e 2 server Windows 2k19 con un'installazione minima. Un server fungerà da nodo master e altri due server saranno nodi minion o nodi di lavoro
Sul nodo principale verranno installati i seguenti componenti
- Server API – Fornisce l'API kubernetes utilizzando Jason / Yaml su http, gli stati degli oggetti API sono archiviati in etcd
- Programmatore – È un programma sul nodo master che esegue le attività di pianificazione come l'avvio di container nei nodi di lavoro in base alla disponibilità delle risorse
- Responsabile del trattamento – Il compito principale del gestore controller è monitorare i controller di replica e creare pod per mantenere lo stato desiderato.
- ecc – È un database di coppie di valori chiave. Memorizza i dati di configurazione del cluster e dello stato del cluster.
- Utilità Kubectl – È un'utilità della riga di comando che si connette al server API sulla porta 6443. Viene utilizzata dagli amministratori per creare pod, servizi ecc.
Sui nodi di lavoro verranno installati i seguenti componenti
- Kubelet – È un agent che gira su ogni nodo di lavoro, si collega a Docker e si occupa di creare, avviare, eliminare i container.
- Proxy Kube – Instrada il traffico verso contenitori appropriati in base all'indirizzo IP e al numero di porta della richiesta in entrata. In altre parole possiamo dire che è usato per la traduzione delle porte.
- Gallo – Il pod può essere definito come un multilivello o un gruppo di contenitori distribuiti su un singolo nodo di lavoro o host Docker.
Passaggi di installazione di Kubernetes 1.16 su CentOS 7
Passaggio 1: Imposta il nome host, disabilita SELinux e imposta il firewall, nel nostro caso il firewall e SELinux è disabilitato e il nome host è impostato come kube-master. E assicurati che tutti i nodi siano
Passaggio 2 :Configura il repository Kubernetes
I pacchetti Kubernetes non sono disponibili nei repository CentOS 7 e RHEL 7 predefiniti. Usa gli URL di seguito per configurare i repository dei pacchetti.
Passaggio 3: Installa Kubeadm e Docker usando il comando seguente
# yum install kubeadm docker -y
Quindi avvia e attiva kubectl e docker servizio utilizzando i comandi seguenti.
# systemctl restart docker && systemctl enable docker
# systemctl restart kubelet && systemctl enable kubelet
Fase 4 :Inizializza Kubernetes Master con 'kubeadm init'
L'output del comando sopra sarebbe qualcosa come sotto
Come possiamo vedere nell'output, kubernetes master è stato inizializzato correttamente. Esegui i comandi seguenti per utilizzare il cluster come utente root.
Passaggio 5 :distribuisci la rete pod al cluster
Prova a eseguire i comandi seguenti per ottenere lo stato del cluster e dei pod.
kubectl get nodes
kubectl get pods –all-namespaces
Per rendere pronto lo stato del cluster e lo stato di kube-dns in esecuzione, distribuire la rete pod in modo che i contenitori di host diversi comunicassero tra loro. La rete POD è la rete overlay tra i nodi di lavoro.
Esegui il comando sotto per distribuire la rete.
Ora esegui i seguenti comandi per verificare lo stato. Come possiamo vedere, il nodo master è ora pronto, ora aggiungeremo nodi di lavoro a questo cluster kubernetes.
Selezione e configurazione della soluzione di rete del cluster Kubernetes
Dopo aver configurato un nodo master Kubernetes, sei pronto per scegliere una soluzione di rete. Esistono diversi modi per rendere la subnet del cluster virtuale instradabile tra i nodi. Scegli una delle seguenti opzioni per Kubernetes su Windows oggi:
- Utilizza un plug-in CNI come Flannel per configurare una rete overlay per te.
- Utilizza un plug-in CNI come Flannel per programmare i percorsi per te (utilizza la modalità di rete l2bridge).
- Configura uno switch smart top-of-rack (ToR) per instradare la sottorete.
Flannel in modalità vxlan
Flannel in modalità vxlan può essere utilizzato per configurare una rete overlay virtuale configurabile che utilizza il tunneling VXLAN per instradare i pacchetti tra i nodi.
Prepara Kubernetes master per Flannel
Si consiglia una piccola preparazione sul master Kubernetes nel nostro cluster. Si consiglia di abilitare il traffico IPv4 con bridge verso le catene iptables quando si utilizza Flannel. Questo può essere fatto usando il seguente comando:
# sudo sysctl net.bridge.bridge-nf-call-iptables=1
Scarica e configura Flannel
Scarica il manifest Flannel più recente utilizzando il comando seguente:
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
Ci sono due sezioni che dovresti modificare per abilitare il backend di rete vxlan:
- Nel net-conf.json sezione del tuo kube-flannel.yml , ricontrolla:
- La sottorete del cluster (ad es. "10.244.0.0/16") è impostata come desiderato.
- VNI 4096 è impostato nel backend
- La porta 4789 è impostata nel backend
- Nel cni-conf.json sezione del tuo kube-flannel.yml , cambia il nome della rete in “vxlan0” .
Dopo aver applicato i passaggi precedenti, il tuo net-conf.json dovrebbe apparire come segue:
Il tuo cni-conf.json
dovrebbe apparire come segue:
Avvia Flannel e convalida
Avvia Flannel usando il comando
# kubectl apply -f kube-flannel.yml
Quindi, poiché i pod Flannel sono basati su Linux, applica la nostra patch Linux NodeSelector a kube-flannel-ds
DaemonSet per indirizzare solo Linux utilizzando i comandi seguenti per scaricare e impostare NodeSelector
# wget https://github.com/microsoft/SDN/blob/master/Kubernetes/flannel/l2bridge/manifests/node-selector-patch.yml
# kubectl patch ds/kube-flannel-ds-amd64 --patch "$(cat node-selector-patch.yml)" -n=kube-system
Dopo alcuni minuti, dovresti vedere tutti i pod in esecuzione se la rete di pod Flannel è stata distribuita.
Unire i nodi di lavoro Windows al cluster kubernetes
Dopo aver configurato un nodo master Kubernetes e aver selezionato la soluzione di rete desiderata, sei pronto per unirti ai nodi di Windows Server per formare un cluster. Ciò richiede una certa preparazione sui nodi Windows prima di entrare.
Preparazione di un nodo Windows
Installa Docker (richiede il riavvio)
Kubernetes utilizza Docker come motore contenitore, quindi è necessario installarlo. Puoi seguire le istruzioni ufficiali di Documenti, le istruzioni Docker o provare i passaggi seguenti:
Install-Module -Name DockerMsftProvider -Repository PSGallery -Force
Install-Package -Name Docker -ProviderName DockerMsftProvider
Restart-Computer –Force
Se sei dietro un proxy, devi definire le seguenti variabili di ambiente di PowerShell:
[Environment]::SetEnvironmentVariable(“HTTP_PROXY”, “http://proxy.example.com:80/”, [EnvironmentVariableTarget]::Machine)
[Environment]::SetEnvironmentVariable(“HTTPS_PROXY”, “http://proxy.example.com:443/”, [EnvironmentVariableTarget]::Machine)
Se dopo il riavvio viene visualizzato il seguente errore:
Quindi avvia manualmente il servizio Docker:
Docker Start-Service
Prepara Kubernetes per la directory di Windows
Crea una directory "Kubernetes per Windows" per archiviare i binari di Kubernetes, nonché eventuali script di distribuzione e file di configurazione.
mkdir c:\k
Copia il certificato Kubernetes
Copia il file del certificato Kubernetes ($HOME/.kube/config
) dal master a questo nuovo C:\k
directory.
Scarica i binari Kubernetes
Per poter eseguire Kubernetes, devi prima scaricare il kubectl
, kubelet
, e kube-proxy
binari. Puoi scaricarli dai link nel CHANGELOG.md
file delle ultime versioni.
- Per esempio, ecco i binari del nodo v1.14.
- Utilizza uno strumento come Expand-Archive per estrarre l'archivio e inserire i binari in
C:\k\
.
(Facoltativo) Imposta kubectl su Windows
Se desideri controllare il cluster da Windows, puoi farlo utilizzando il kubectl
comando. Innanzitutto, per creare kubectl
disponibile al di fuori del C:\k\
directory, modificare il PATH
variabile d'ambiente:
$env:Path += ";C:\k"
Se desideri rendere permanente questa modifica, modifica la variabile in target macchina:
[Environment]::SetEnvironmentVariable("Path", $env:Path + ";C:\k", [EnvironmentVariableTarget]::Machine)
Successivamente, verificheremo che il certificato del cluster sia valido. Per impostare la posizione in cui kubectl
cerca il file di configurazione, puoi passare il --kubeconfig
parametro o modificare il KUBECONFIG
variabile d'ambiente. Ad esempio, se la configurazione si trova in C:\k\config
:
$env:KUBECONFIG="C:\k\config"
Per rendere permanente questa impostazione per l'ambito dell'utente corrente:
[Environment]::SetEnvironmentVariable("KUBECONFIG", "C:\k\config", [EnvironmentVariableTarget]::User)
Infine, per verificare se la configurazione è stata rilevata correttamente, puoi utilizzare:
kubectl config view
Se ricevi un errore di connessione
Unable to connect to the server: dial tcp [::1]:8080: connectex: No connection could be made because the target machine actively refused it.
Dovresti ricontrollare la posizione di kubeconfig o provare a copiarlo di nuovo.
Se non vedi errori, il nodo è pronto per entrare nel cluster.
Unisciti al nodo Windows
A seconda della soluzione di rete che hai scelto, puoi:
- Unisci i nodi di Windows Server a un cluster Flannel (vxlan o host-gw) (stiamo utilizzando questa soluzione)
- Unisci i nodi di Windows Server a un cluster con uno switch ToR
Unisciti a un cluster di flanella
C'è una raccolta di script di distribuzione Flannel su questo repository Microsoft che ti aiuta a unire questo nodo al cluster.
Scarica lo script Flannel start.ps1, il cui contenuto dovrebbe essere estratto in C:\k
:
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
wget https://raw.githubusercontent.com/Microsoft/SDN/master/Kubernetes/flannel/start.ps1 -o c:\k\start.ps1
Supponendo che tu abbia preparato il tuo nodo Windows e il tuo c:\k
la directory appare come di seguito, sei pronto per unirti al nodo.
Unisciti al nodo Windows
Per semplificare il processo di unione a un nodo Windows, devi solo eseguire un singolo script Windows per avviare kubelet
, kube-proxy
, flanneld
e unisciti al nodo.
cd c:\k
.\start.ps1 -ManagementIP <Windows Node IP> -NetworkMode <network mode> -ClusterCIDR <Cluster CIDR> -ServiceCIDR <Service CIDR> -KubeDnsServiceIP <Kube-dns Service IP> -LogDir <Log directory>
Dopo averlo eseguito dovresti essere in grado di:
- Visualizza i nodi Windows uniti utilizzando kubectl get node
- Vedi 3 finestre di PowerShell aperte, una per kubelet, una per flanneld e un'altra per kube-proxy
- Guarda i processi host-agent per flanneld, kubelet e kube-proxy in esecuzione sul nodo