GNU/Linux >> Linux Esercitazione >  >> Linux

Guida completa per principianti alla distribuzione del cluster Kubernetes su CentOS (e altri Linux)

Spero che tu conosca i termini di base di Kubernetes come nodo, servizio, cluster perché non spiegherò queste cose qui.

Questo è un tutorial passo passo per mostrare come distribuire un cluster Kubernetes pronto per la produzione.

Pronta la produzione? Sì, gli esempi utilizzano un dominio di esempio, quindi se possiedi un dominio, puoi configurarlo su un'infrastruttura pubblica. Puoi anche usarlo per i test locali. Dipende davvero da te.

Ho usato CentOS Linux negli esempi, ma dovresti essere in grado di utilizzare qualsiasi altra distribuzione Linux. Fatta eccezione per i comandi di installazione, il resto dei passaggi dovrebbe essere applicabile a tutti.

Userò questo semplice cluster di un nodo master/di controllo e due nodi di lavoro:

Il tutorial è diviso in due parti principali.

La prima parte è fondamentalmente un prerequisito e si occupa di preparare le tue macchine facendo le seguenti cose:

  • Configura correttamente i nomi host su tutti gli host
  • Disattiva lo scambio su tutti i nodi
  • Aggiungi regole firewall
  • Configura tabelle IP
  • Disabilita SELinux

La seconda parte è l'effettiva distribuzione del cluster Kubernetes e consiste nei seguenti passaggi:

  • Configura il repository Kubernetes
  • Installa kubelet, kubeadm, kubectl e docker
  • Abilita e avvia il servizio kubelet e docker
  • Abilita completamenti bash
  • Crea cluster con kubeadm
  • Imposta rete Pod
  • Unisciti ai nodi di lavoro
  • Testa il cluster creando un test pod

Parte 1:preparazione dei sistemi per la distribuzione del cluster Kubernetes

Hai bisogno di 3 server in esecuzione su macchine virtuali o bare metal o una piattaforma cloud come Linode, DigitalOcean o Azure.

Ho 3 macchine virtuali CentOS in esecuzione con i seguenti dettagli:

  • Nodo principale Kubernetes - 172.42.42.230 kmaster-centos7.example.com/kmaster-centos7
  • Nodo di lavoro Kubernetes 1 - 172.42.42.231 kworker-centos71.example.com/kworker-centos71
  • Nodo di lavoro Kubernetes 2 - 172.42.42.232 kworker-centos72.example.com/kworker-centos72

Controlla gli indirizzi IP delle tue macchine e modificalo di conseguenza.

Passaggio 1. Configura correttamente i nomi host su tutti i sistemi

Puoi aggiungere l'IP e le informazioni sul sottodominio corrispondenti modificando i record DNS del tuo dominio.

Se non hai accesso al DNS, aggiorna il file /etc/hosts sui nodi master e worker con le seguenti informazioni:

[[email protected] ~]# cat /etc/hosts
127.0.0.1       kmaster-centos7.example.com     kmaster-centos7
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
172.42.42.230 kmaster-centos7.example.com   kmaster-centos7
172.42.42.231 kworker-centos71.example.com  kworker-centos71
172.42.42.232 kworker-centos72.example.com  kworker-centos72
[[email protected] ~]#

Esegui il ping dei nodi di lavoro per verificare che le modifiche al file host funzionino correttamente.

Passaggio 2. Disattiva lo scambio (per motivi di prestazioni)

Lo scheduler di Kubernetes determina il miglior nodo disponibile su cui distribuire i pod appena creati. Se lo scambio di memoria è consentito su un sistema host, ciò può causare problemi di prestazioni e stabilità all'interno di Kubernetes.

Per questo motivo, Kubernetes richiede di disabilitare lo scambio su tutti i nodi:

swapoff -a

Passaggio 3. Aggiungi le regole del firewall

I nodi, i contenitori e i pod devono essere in grado di comunicare nel cluster per svolgere le proprie funzioni. Firewalld è abilitato in CentOS per impostazione predefinita, quindi sarebbe saggio aprire le porte richieste.

Sul nodo master, hai bisogno di queste porte:

  • 6443:Server API Kubernetes:utilizzato da tutti
  • 2379–2380:API client server etcd:utilizzata da kube-apiserver, etcd
  • 10250:API Kubelet:utilizzata da Self, Control plane
  • 10251 :kube-scheduler :usato da sé
  • 10252:kube-controller-manager:utilizzato da sé

Sui nodi di lavoro, sono necessarie queste porte:

  • 10250:API Kubelet:utilizzata da Self, Control plane
  • 30000–32767:Servizi NodePort:utilizzati da tutti

Il comando firewall-cmd apre la porta 6443 in questo modo:

firewall-cmd --permanent --add-port=6443/tcp

Sul master e sui nodi di lavoro, usa il comando precedente per aprire le porte richieste che sono state menzionate in questa sezione.

Per l'intervallo di porte, puoi sostituire il numero di porta con un intervallo come firewall-cmd --permanent --add-port=2379-2380/tcp .

Dopo aver aggiunto le nuove regole del firewall su ogni macchina, ricarica il firewall:

firewall-cmd --reload

Passaggio 4. Configura iptables

Sui nodi master e di lavoro, assicurati che il br_netfilter il modulo del kernel è caricato. Questo può essere fatto eseguendo lsmod | grep br_netfilter . Per caricarlo esplicitamente chiama sudo modprobe br_netfilter .

Imposta net.bridge.bridge-nf-call-iptables a '1' nel tuo file di configurazione sysctl. Ciò garantisce che i pacchetti vengano elaborati correttamente dalle tabelle IP durante il filtraggio e il port forwarding.

[[email protected] ~]# cat <<EOF > /etc/sysctl.d/k8s.conf
> net.bridge.bridge-nf-call-ip6tables = 1
> net.bridge.bridge-nf-call-iptables = 1
> EOF

Esegui questo comando in modo che le modifiche abbiano effetto:

sysctl --system

Passaggio 5. Disabilita SELinux (per Red Hat e CentOS)

I contenitori sottostanti sarebbero necessari per accedere al filesystem host. CentOS viene fornito con SELinux (Linux avanzato per la sicurezza) abilitato in modalità di applicazione. Questo potrebbe bloccare l'accesso al filesystem host.

Puoi disabilitare SELinux o impostarlo in modalità permissiva, che disabilita efficacemente le sue funzioni di sicurezza.

[[email protected] ~]# setenforce 0
[[email protected] ~]# sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
[[email protected] ~]#

Parte 2:distribuzione del cluster Kubernetes

Ora che hai configurato le impostazioni corrette sui tuoi nodi master e di lavoro, è il momento di avviare la distribuzione del cluster.

Passaggio 1. Configura il repository Kubernetes

I pacchetti Kubernetes non sono disponibili dai repository CentOS 7 ufficiali. Questo passaggio deve essere eseguito sul nodo master e su ogni nodo di lavoro.

Inserisci quanto segue e verificalo una volta aggiunto il contenuto.

[[email protected] ~]# cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
EOF

Aggiorna e verifica che il repository Kubernetes sia aggiunto all'elenco dei repository:

[[email protected] ~]# yum update -y
[[email protected] ~]# yum repolist | grep -i kubernetes
!kubernetes                         Kubernetes                               570

Passaggio 2. Installa kubelet, kubeadm, kubectl e Docker

kubelet, kubeadm, kubectl sono necessari tre pacchetti di base insieme a container runtime (che è la finestra mobile qui) per utilizzare Kubernetes.

Installa questi pacchetti su ogni nodo:

yum install -y kubelet kubeadm kubectl docker

Passaggio 3. Abilita e avvia i servizi kubelet e docker

Ora che hai installato i pacchetti richiesti, abilita (in modo che si avvii automaticamente ad ogni avvio) kubelet e docker su ogni nodo.

Abilita kubelet su ogni nodo:

[[email protected] ~]# systemctl enable kubelet
Created symlink from /etc/systemd/system/multi-user.target.wants/kubelet.service to /usr/lib/systemd/system/kubelet.service.

Abilita la finestra mobile su ogni nodo:

[[email protected] ~]# systemctl enable docker.service
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.

Dovresti anche avviare questi servizi in modo che possano essere utilizzati immediatamente:


[[email protected] ~]# systemctl start kubelet
[[email protected] ~]# systemctl start docker.service

Passaggio 4. Abilita il completamento di bash (per una vita più facile con Kubernetes)

Abilita i completamenti bash su tutti i nodi in modo da non dover digitare manualmente tutti i comandi per intero. La scheda lo farebbe per te.

[[email protected] ~]# echo "source <(kubectl completion bash)" >> ~/.bashrc
[[email protected] ~]# echo "source <(kubeadm completion bash)" >> ~/.bashrc
[[email protected] ~]# echo "source <(docker completion bash)" >> ~/.bashrc

Passaggio 5. Crea un cluster con kubeadm

Inizializza un cluster eseguendo il comando seguente:

kubeadm init --apiserver-advertise-address=172.42.42.230 --pod-network-cidr=10.244.0.0/16

Nota: È sempre bene impostare --apiserver-advertise-address in particolare durante l'avvio del cluster Kubernetes utilizzando kubeadm. L'indirizzo IP su cui il server API pubblicizzerà è in ascolto. In caso contrario, verrà utilizzata l'interfaccia di rete predefinita.

Lo stesso con --pod-network-cidr. Specificare l'intervallo di indirizzi IP per la rete pod. Se impostato, il piano di controllo allocherà automaticamente i CIDR per ogni nodo.

Per ulteriori opzioni, fare riferimento a questo link.

Alla fine dell'output del comando kube-init, puoi vedere i passaggi per eseguire il cluster:

...
You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  https://kubernetes.io/docs/concepts/cluster-administration/addons/
  
Then you can join any number of worker nodes by running the following on each as root:
kubeadm join 172.42.42.230:6443 --token 22m8k4.kajx812tg74199x3 \
    --discovery-token-ca-cert-hash sha256:03baa45e2b2bb74afddc5241da8e84d16856f57b151e450bc9d52e6b35ad8d22
```

**Manage cluster as regular user:
**In the above kube-init command output you can clearly see that to start using your cluster, you need to run the following commands as a regular user:

```bash
[[email protected] ~]# mkdir -p $HOME/.kube
[[email protected] ~]# cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[[email protected] ~]# chown $(id -u):$(id -g) $HOME/.kube/config
[[email protected] ~]#

Dovresti eseguire questi comandi uno per uno per avviare il cluster Kubernetes:

[[email protected] ~]# mkdir -p $HOME/.kube
[[email protected] ~]# cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[[email protected] ~]# chown $(id -u):$(id -g) $HOME/.kube/config

Passaggio 6. Imposta la rete del pod

La rete pod è la rete overlay tra i nodi di lavoro. Con la rete pod, i container su nodi diversi comunicano tra loro.

Sono disponibili diverse opzioni di rete Kubernetes. Utilizzare il comando seguente per installare il componente aggiuntivo di rete flannel pod:

[[email protected] ~]# kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
podsecuritypolicy.policy/psp.flannel.unprivileged created
Warning: rbac.authorization.k8s.io/v1beta1 ClusterRole is deprecated in v1.17+, unavailable in v1.22+; use rbac.authorization.k8s.io/v1 ClusterRole
clusterrole.rbac.authorization.k8s.io/flannel created
Warning: rbac.authorization.k8s.io/v1beta1 ClusterRoleBinding is deprecated in v1.17+, unavailable in v1.22+; use rbac.authorization.k8s.io/v1 ClusterRoleBinding
clusterrolebinding.rbac.authorization.k8s.io/flannel created
serviceaccount/flannel created
configmap/kube-flannel-cfg created
daemonset.apps/kube-flannel-ds created
[[email protected] ~]#

Controlla lo stato del cluster e verifica che il nodo master (piano di controllo) sia in stato pronto.

[[email protected] ~]# kubectl get nodes
NAME                          STATUS   ROLES    AGE   VERSION
kmaster-centos7.example.com   Ready    master   2m    v1.19.2

Controlla anche tutti i pod in esecuzione in tutti gli spazi dei nomi.

kubectl get pods --all-namespaces

Passaggio 7. Unisci i nodi di lavoro al cluster

Fare riferimento all'output ottenuto nel passaggio 5 e copiare i comandi consigliati. Eseguilo su ogni nodo di lavoro per connetterlo al cluster:

kubeadm join 172.42.42.230:6443 --token 22m8k4.kajx812tg74199x3 \
>     --discovery-token-ca-cert-hash sha256:03baa45e2b2bb74afddc5241da8e84d16856f57b151e450bc9d52e6b35ad8d22

Controlla di nuovo lo stato del cluster per vedere che tutti i nodi di lavoro sono entrati correttamente nel cluster e sono pronti per servire i carichi di lavoro.

[[email protected] ~]# kubectl get nodes -o wide
NAME                           STATUS   ROLES    AGE     VERSION   INTERNAL-IP     EXTERNAL-IP   OS-IMAGE                KERNEL-VERSION                CONTAINER-RUNTIME
kmaster-centos7.example.com    Ready    master   9m17s   v1.19.2   172.42.42.230   <none>        CentOS Linux 7 (Core)   3.10.0-1127.19.1.el7.x86_64   docker://1.13.1
kworker-centos71.example.com   Ready    <none>   7m10s   v1.19.2   172.42.42.231   <none>        CentOS Linux 7 (Core)   3.10.0-1127.19.1.el7.x86_64   docker://1.13.1
kworker-centos72.example.com   Ready    <none>   7m8s    v1.19.2   172.42.42.232   <none>        CentOS Linux 7 (Core)   3.10.0-1127.19.1.el7.x86_64   docker://1.13.1

Verifica tutti i pod in esecuzione in tutti gli spazi dei nomi:

kubectl get pods -o wide --all-namespaces

Passaggio 8. Testa il cluster creando un test pod

Ora che hai tutto a posto, è il momento di testare il cluster. Crea un contenitore:

[[email protected] ~]# kubectl run mypod1 --image=httpd --namespace=default --port=80 --labels app=fronend
pod/mypod1 created

Ora verifica lo stato del pod:

[[email protected] ~]# kubectl get pods  -o wide
NAME     READY   STATUS    RESTARTS   AGE   IP           NODE                           NOMINATED NODE   READINESS GATES
mypod1   1/1     Running   0          29s   10.244.1.2   kworker-centos71.example.com   <none>           <none>
[[email protected] ~]#

Ora hai un cluster Kubernetes completamente funzionante attivo e funzionante su CentOS!

Spero che il tutorial ti piaccia. Se hai domande o suggerimenti, lascia un commento e sarò felice di aiutarti.

E diventa un membro di Linux Handbook per godere di contenuti esclusivi riservati ai membri.


Linux
  1. Una guida per principianti ai permessi di Linux

  2. Guida completa per l'utilizzo dei pacchetti Snap in Ubuntu e altre distribuzioni Linux

  3. Cos'è Kubernetes? Guida completa

  4. Una guida per principianti al firewalld in Linux

  5. La guida completa per principianti a LVM in Linux

Come installare e utilizzare Curl su distribuzioni Linux:una guida per principianti

Guida per principianti ai Syslog in Linux

Una guida completa per installare Tomcat su Linux

Comandi della directory Linux:una guida completa

Come configurare il cluster Linux con 2 nodi su RedHat e CentOS

Come installare e utilizzare FFmpeg su distribuzioni Linux | Guida per principianti