GNU/Linux >> Znalost Linux >  >> Linux

Jak nastavit Kubernetes(k8s) Cluster v HA s Kubeadm

Když nastavíme Kubernetes (k8s) clusteru on-premises pro produkční prostředí, pak se doporučuje nasadit jej s vysokou dostupností. Zde vysoká dostupnost znamená instalaci řídicí nebo řídicí roviny Kubernetes v HA. V tomto článku ukážu, jak nastavit cluster Kubernetes(k8s) v HA (High Availability) pomocí nástroje kubeadm.

Pro demonstraci jsem použil pět systémů CentOS 7 s následujícími detaily:

  • k8s-master-1 – Minimální CentOS 7 – 192.168.1.40 – 2 GB RAM, 2vCPU, 40 GB disk
  • k8s-master-2 – Minimální CentOS 7 – 192.168.1.41 – 2 GB RAM, 2vCPU, 40 GB disk
  • k8s-master-3 – Minimální CentOS 7 – 192.168.1.42 – 2 GB RAM, 2vCPU, 40 GB disk
  • k8s-worker-1 – Minimální CentOS 7 – 192.168.1.43 – 2 GB RAM, 2vCPU, 40 GB disk
  • k8s-worker-2 – Minimální CentOS 7 – 192.168.1.44 – 2 GB RAM, 2vCPU, 40 GB disk

Poznámka:cluster etcd lze vytvořit i mimo hlavní uzly, ale k tomu potřebujeme další hardware, takže instaluji etcd do svých hlavních uzlů.

Minimální požadavky pro nastavení clusteru Highly K8s

  • Nainstalujte Kubeadm , kubelet a kubectl na všech hlavních a pracovních uzlech
  • Síťová konektivita mezi hlavními a pracovními uzly
  • Internetové připojení na všech uzlech
  • Přihlašovací údaje uživatele nebo oprávnění sudo ve všech uzlech

Pojďme se vrhnout na kroky instalace a konfigurace

Krok 1) Nastavte název hostitele a přidejte položky do souboru /etc/hosts

Spusťte příkaz hostnamectl pro nastavení názvu hostitele na každém uzlu, příklad je uveden pro uzel k8s-master-1,

$ hostnamectl set-hostname "k8s-master-1"$ exec bash

Podobně spusťte výše uvedený příkaz na zbývajících uzlech a nastavte jejich příslušný název hostitele. Jakmile je název hostitele nastaven na všech hlavních a pracovních uzlech, přidejte následující položky do /etc/hosts soubor na všech uzlech.

192.168.1.40   k8s-master-1192.168.1.41   k8s-master-2192.168.1.42   k8s-master-3192.168.1.43    k8s-worker-1192.128.165. k8s-188.5. 

Použil jsem jednu další položku „192.168.1.45   vip-k8s-master“ v hostitelském souboru, protože tuto IP adresu a název hostitele budu používat při konfiguraci haproxy a keepalved na všech hlavních uzlech. Tato IP adresa bude použita jako kube-apiserver load balancer ip. Veškerý požadavek kube-apiserer přijde na tuto IP a poté bude požadavek distribuován mezi skutečné backendové servery kube-apiser.

Krok 2) Nainstalujte a nakonfigurujte Keepalive a HAProxy na všech uzlech hlavní / řídicí roviny

Nainstalujte keepalived a haproxy na každý hlavní uzel pomocí následujícího příkazu yum,

$ sudo yum nainstalovat haproxy keepalived -y

Nejprve nakonfigurujte Keepalived na k8s-master-1, vytvořte skript check_apiserver.sh s následujícím obsahem,

[[email protected] ~]$ sudo vi /etc/keepalived/check_apiserver.sh#!/bin/shAPISERVER_VIP=192.168.1.45APISERVER_DEST_PORT=6443errorExit() {    echo "*** $*" 1>2 }curl --silent --max-time 2 --insecure https://localhost:${APISERVER_DEST_PORT}/ -o /dev/null || errorExit "Chyba GET https://localhost:${APISERVER_DEST_PORT}/"if ip addr | grep -q ${APISERVER_VIP}; potom    curl --silent --max-time 2 --insecure https://${APISERVER_VIP}:${APISERVER_DEST_PORT}/ -o /dev/null || errorExit "Chyba GET https://${APISERVER_VIP}:${APISERVER_DEST_PORT}/"fi

uložte a ukončete soubor.

Nastavte oprávnění ke spustitelnému souboru

$ sudo chmod +x /etc/keepalived/check_apiserver.sh

Vezměte zálohu souboru keepalived.conf a poté soubor zkraťte.

[[e-mail chráněný] ~]$ sudo cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf-org[[e-mail chráněný] ~]$ sudo sh -c '> /etc/keepalived/ keepalived.conf'

Nyní vložte následující obsah do souboru /etc/keepalived/keepalived.conf

[[e-mail chráněný] ~]$ sudo vi /etc/keepalived/keepalived.conf! /etc/keepalived/keepalived.conf! Konfigurační soubor pro KeePalidGlobal_defs {router_id lvs_devel} vrrp_script check_apiserver {skript "/etc/keepalived/check_apiserver.sh" Interval 3 Hmotnost pád 10 RISE 2} Vrrp_instance VI_1 {State Master Interface Enp0s3 chráněno ##D321! }    virtual_ipaddress {        192.168.1.45/24    }    track_script {        check_apiserver    }}

Uložte a zavřete soubor.

Poznámka: Pro uzly master-2 &3 je třeba změnit pouze dva parametry tohoto souboru. Stát se stane SLAVE pro master 2 a 3 bude priorita 254 a 253.

Nakonfigurujte HAProxy na uzlu k8s-master-1, upravte jeho konfigurační soubor a přidejte následující obsah:

[[email protected] ~]$ sudo cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg-org

Odeberte všechny řádky za výchozí sekcí a přidejte následující řádky

[[email protected] ~]$ sudo vi /etc/haproxy/haproxy.cfg#---------------------------- -----------------------------------------# frontend apiserver, který proxy servery masters# -------------------------------------------------- -------------------frontend apiserver    bind *:8443    režim tcp    možnost tcplog    default_backend apiserver#------------------ -------------------------------------------------- -# kruhové vyvažování pro apiserver#------------------------------------------ ----------------------------backend apiserer    možnost httpchk GET /healthz    http-check očekávaný stav 200    režim tcp    možnost ssl-hello-chk    zůstatek     kruhová obsluha server k8s-master-1 192.168.1.40:6443 kontrola        server k8s-master-2 192.168.1.41:6443 kontrola        server k8s-master-3 192.168.1.42:6443 kontrola

Uložte a ukončete soubor

Nyní zkopírujte tyto tři soubory (check_apiserver.sh, keepalived.conf a haproxy.cfg) z k8s-master-1 do k8s-master-2 &3

Spusťte následující smyčku for a scp tyto soubory na master 2 a 3

[[e-mail chráněný] ~]$ pro f v k8s-master-2 k8s-master-3; do scp /etc/keepalived/check_apiserver.sh /etc/keepalived/keepalived.conf [e-mail chráněný]$f:/etc/keepalived; scp /etc/haproxy/haproxy.cfg [e-mail chráněný]$f:/etc/haproxy; hotovo

Poznámka: Nezapomeňte změnit dva parametry v souboru keepalived.conf, který jsme probrali výše pro k8s-master-2 &3

V případě, že firewall běží na hlavních uzlech, přidejte následující pravidla brány firewall na všechny tři hlavní uzly

$ sudo firewall-cmd --add-rich-rule='rule protocol value="vrrp" accept' --permanent$ sudo firewall-cmd --permanent --add-port=8443/tcp$ sudo firewall- cmd --reload

Nyní Konečně spusťte a povolte službu keepalived a haproxy na všech třech hlavních uzlech pomocí následujících příkazů:

$ sudo systemctl povolit keepalived --now$ sudo systemctl povolit haproxy --now

Jakmile jsou tyto služby úspěšně spuštěny, ověřte, zda je na uzlu k8s-master-1 povolena VIP (virtuální IP), protože jsme v konfiguračním souboru keepalived označili uzel k8s-master-1 jako MASTER.

Perfektní, výše uvedený výstup potvrzuje, že VIP bylo povoleno na k8s-master-1.

Krok 3) Zakažte Swap, nastavte SELinux jako permisivní a pravidla brány firewall pro hlavní a pracovní uzly

Zakažte Swap Space na všech uzlech včetně pracovních uzlů. Spusťte následující příkazy

$ sudo swapoff -a $ sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab

Nastavte SELinux jako Permisivní na všech hlavních a pracovních uzlech a spusťte následující příkazy

$ sudo setenforce 0$ sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config

Pravidla brány firewall pro hlavní uzly:

V případě, že firewall běží na hlavních uzlech, povolte ve firewallu následující porty,

Spusťte následující příkaz firewall-cmd na všech hlavních uzlech

$ sudo firewall-cmd --permanent --add-port=6443/tcp$ sudo firewall-cmd --permanent --add-port=2379-2380/tcp$ sudo firewall-cmd --permanent --add -port=10250/tcp$ sudo firewall-cmd --permanent --add-port=10251/tcp$ sudo firewall-cmd --permanent --add-port=10252/tcp$ sudo firewall-cmd --permanent -- add-port=179/tcp$ sudo firewall-cmd --permanent --add-port=4789/udp$ sudo firewall-cmd --reload$ sudo modprobe br_netfilter$ sudo sh -c "echo '1'> /proc/ sys/net/bridge/bridge-nf-call-iptables"$ sudo sh -c "echo '1'> /proc/sys/net/ipv4/ip_forward"

Pravidla brány firewall pro pracovní uzly:

V případě, že firewall běží na pracovních uzlech, povolte následující porty ve bráně firewall na všech pracovních uzlech

Spusťte následující příkazy na všech pracovních uzlech,

$ sudo firewall-cmd --permanent --add-port=10250/tcp$ sudo firewall-cmd --permanent --add-port=30000-32767/tcp                                                                                                -port=179/tcp$ sudo firewall-cmd --permanent --add-port=4789/udp$ sudo firewall-cmd --reload$ sudo modprobe br_netfilter$ sudo sh -c "echo '1'> /proc/sys /net/bridge/bridge-nf-call-iptables"$ sudo sh -c "echo '1'> /proc/sys/net/ipv4/ip_forward"

Krok 4) Nainstalujte dokovací stanici Container Run Time (CRI) na hlavní a pracovní uzly

Nainstalujte Docker (Container Run Time) na všechny hlavní uzly a pracovní uzly, spusťte následující příkaz,

$ sudo yum install -y yum-utils$ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo$ sudo yum install docker-ce -y

Spusťte následující příkaz systemctl pro spuštění a povolení služby docker (Tento příkaz spusťte také na všech hlavních a pracovních uzlech)

$ sudo systemctl povolit docker --now

Nyní v dalším kroku nainstalujme kubeadm , kubelet a kubectl

Krok 5) Nainstalujte Kubeadm, kubelet a kubectl

Nainstalujte kubeadm, kubelet a kubectl na všechny hlavní uzly i pracovní uzly. Před instalací těchto balíčků musíme nejprve nakonfigurovat úložiště Kubernetes, spustit následující příkaz na každém hlavním a pracovním uzlu,

kočka < 

Nyní spusťte níže příkaz yum a nainstalujte tyto balíčky,

$ sudo yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes

Spusťte následující příkaz systemctl a povolte službu kubelet na všech uzlech (hlavní a pracovní uzly)

$ sudo systemctl povolit kubelet --now

Krok 6) Inicializujte Kubernetes Cluster z prvního hlavního uzlu

Nyní přejděte na první hlavní uzel / řídicí rovinu a zadejte následující příkaz

[[email protected] ~]$ sudo kubeadm init --control-plane-endpoint "vip-k8s-master:8443" --upload-certs

Ve výše uvedeném příkazu –control-plane-endpoint nastavte název dns a port pro nástroj pro vyrovnávání zatížení (kube-apiserver), v mém případě je název dns „vip-k8s-master“ a port je „8443“, kromě tohoto „–upload-certs ’ bude automaticky sdílet certifikáty mezi hlavními uzly,

Výstup příkazu kubeadm by byl něco jako níže:

Skvělé, výše uvedený výstup potvrzuje, že cluster Kubernetes byl úspěšně inicializován. Ve výstupu jsme také dostali příkazy pro ostatní hlavní a pracovní uzly, aby se připojily ke clusteru.

Poznámka: Doporučujeme zkopírovat tento výstup do textového souboru pro budoucí použití.

Spusťte následující příkazy, abyste umožnili místnímu uživateli používat příkaz kubectl k interakci s clusterem,

[[chráněno e-mailem] ~]$ mkdir -p $HOME/.kube[[chráněno e-mailem] ~]$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config[[chráněno e-mailem ] ~]$ sudo chown $(id -u):$(id -g) $HOME/.kube/config[[e-mail chráněný] ~]$

Nyní nasadíme síť pod (CNI – Container Network Interface), v mém případě nasadím calico addon jako síť podů, spustíme následující příkaz kubectl

[[email protected] ~]$ kubectl apply -f https://docs.projectcalico.org/v3.14/manifests/calico.yaml

Jakmile je síť pod úspěšně nasazena, přidejte zbývající dva hlavní uzly do clusteru. Stačí zkopírovat příkaz pro hlavní uzel pro připojení ke clusteru z výstupu a vložit jej na k8s-master-2 a k8s-master-3, příklad je uveden níže

[Pre> [Ochránce e-mailů] ~] $ sudo kubeadm se připojte k VIP-K8S-Master:8443-TOKEN TUN848.2HLZ8UO37JGY5ZQT-DISCOVERY-TOKEN-CA-CERT-CERT-HASH SHA256:D035F143D4BOLON klíč a0b31bb346e8d819558f8204d940782e497892ec9d3d74f08d1c0376dc3d3ef4

Výstup by byl:

Stejný příkaz spusťte také na k8s-master-3,

[Pre> [Ochránce e-mailů] ~] $ sudo kubeadm se připojte k VIP-K8S-Master:8443-TOKEN TUN848.2HLZ8UO37JGY5ZQT-DISCOVERY-TOKEN-CA-CERT-CERT-HASH SHA256:D035F143D4BOLON klíč a0b31bb346e8d819558f8204d940782e497892ec9d3d74f08d1c0376dc3d3ef4

Výstup by byl:

Výše uvedený výstup potvrzuje, že k8s-master-3 se také úspěšně připojil ke clusteru. Ověřte stav uzlů z příkazu kubectl, přejděte k uzlu master-1 a spusťte níže uvedený příkaz,

[[email protected] ~]$ kubectl get nodesNAME            STAV   ROLE    VĚK     VERSIONk8s-master-1   Připraveno    master   31 m  -   v1.18.6k8s-master-2 4 1 m. 8 m. 8 16 m 3 1 1 8 m 3  [[email protected] ~]$

Perfektní, všechny naše tři uzly hlavní nebo řídicí roviny jsou připraveny a připojí se ke clusteru.

Krok 7) Připojte uzly Worker ke clusteru Kubernetes

Chcete-li připojit pracovní uzly ke clusteru, zkopírujte příkaz pro pracovní uzel z výstupu a vložte jej do obou pracovních uzlů, příklad je uveden níže:

[PRE> [OSOBEJTE E-mail] ~] $ sudo kubeadm Připojte se k VIP-K8S-MASTER:8443-TOKEN TUN848.2HLZ8UO37JGY5ZQT-DISCOVERY-TOKEN-CA-CERTY-CERTHERTHONTICKONITO kubeadm join vip-k8s-master:8443 --token tun848.2hlz8uo37jgy5zqt --discovery-token-ca-cert-hash sha256:d035f143d4bea38d54a3d827729954ab2061d9b>0204b3bec50

Výstup by byl něco jako níže:

Nyní přejděte do uzlu k8s-master-1 a spusťte pod příkazem kubectl, abyste získali stavové pracovní uzly,

[[email protected] ~]$ kubectl get nodesNAME            STAV   ROLE    VĚK     VERSIONk8s-master-1   Připraveno    master   43 m  -   v1.18,6 k8s-master-2 1 -. 1   2 m v 1  8 m 1 1 6 1 1 6   . k8s-worker-1   Připraveno       6m11s   v1.18.6k8s-worker-2   Připraveno       5m22s   v1.18.6[[e-mail chráněno] ~]$

Výše uvedený výstup potvrzuje, že oba pracovníci se také připojili ke clusteru a jsou ve stavu připravenosti.

Spusťte níže uvedený příkaz a ověřte stav infra modulů, které jsou nasazeny ve jmenném prostoru systému kube.

[[email protected] ~]$ kubectl get pods -n kube-system

Krok 8) Otestujte vysoce dostupný cluster Kubernetes

Zkusme se připojit ke clusteru ze vzdáleného počítače (systém CentOS) pomocí názvu DNS a portu nástroje pro vyrovnávání zatížení. Na vzdáleném počítači musíme nejprve nainstalovat balíček kubectl. Spusťte příkaz níže a nastavte úložiště kubernetes.

kočka < 

Nyní přidejte následující záznam do souboru /etc/host,

192.168.1.45   vip-k8s-master

Vytvořte adresář kube a zkopírujte soubor /etc/kubernetes/admin.conf z uzlu k8s-master-1 do $HOME/.kube/config,

$ mkdir -p $HOME/.kube$ scp [e-mail chráněný]:/etc/kubernetes/admin.conf $HOME/.kube/config$ sudo chown $(id -u):$(id -g) $HOME/.kube/config

Nyní spusťte příkaz „kubectl get nodes“,

[[email protected] ~]$ kubectl get nodesNAME            STAV   ROLE    VĚK    VERSIONk8s-master-1   Připraveno    master   3h5m   v1.18.6k8s-master-2   8 6. 15 m 1    16 15 m master k8s-worker-1   Připraveno       148m   v1.18.6k8s-worker-2   Připraveno       147m   v1.18.6[[e-mail chráněno] ~]$

Pojďme vytvořit nasazení s názvem nginx-lab s obrázkem „nginx “ a poté toto nasazení vystavte jako službu typu „NodePort

[[chráněno e-mailem] ~]$ kubectl vytvořit nasazení nginx-lab --image=nginxdeployment.apps/nginx-lab vytvořeno[[chráněno e-mailem] ~]$[[chráněno e-mailem] ~]$ kubectl získat deployments.apps nginx-labName Ready-to-to-date dostupné agenginx-lab 1/1 1 1 59s [[e-mail chráněno] ~] $ kubectl Get Podsname Restarts agenginx-lab-5DF4577d49-rzv9q 1/1 spuštění 0 68Stest-844B6566C-PXPKH 1/1     Běh   3          154 m[[email protected] ~]$

Zkusme změnit měřítko replik od 1 do 4, spusťte následující příkaz

[[chráněno e-mailem] ~]$ škálování nasazení kubectl nginx-lab --replicas=4deployment.apps/nginx-lab škálováno[[chráněno e-mailem] ~]$[[chráněno e-mailem] ~]$ kubectl získat deployments.apps nginx-labNAME        PŘIPRAVENO   AKTUÁLNÍ   DOSTUPNÉ   AGEnginx-lab   4/4     4            4            3 m10 s[[email chráněno] ~]$

Nyní vystavte nasazení jako službu, spusťte

[[chráněno e-mailem] ~]$ kubectl vystavit nasazení nginx-lab --name=nginx-lab --type=NodePort --port=80 --target-port=80service/nginx-lab vystaveno[[e-mail chráněno ] ~]$

Získejte podrobnosti o portu a pokuste se získat přístup k webovému serveru nginx pomocí curl,

[[email protected] ~]$ kubectl get svc nginx-labNAME        TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGEnginx-lab    

Pro přístup k webovému serveru nginx můžeme použít jakoukoli IP adresu hlavního nebo pracovního uzlu a port jako „31766“

[[e-mail chráněný] ~]$ curl http://192.168.1.44:31766

Výstup by byl něco jako níže:

Perfektní, to potvrzuje, že jsme úspěšně nasadili vysoce dostupný cluster Kubernetes s kubeadm na serverech CentOS 7. Neváhejte se podělit o své cenné zpětné vazby a komentáře.

Přečtěte si také :Jak nastavit NGINX Ingress Controller v Kubernetes


Linux
  1. Jak nastavit Kubernetes Cluster pomocí Rancher

  2. Nastavte cluster Kubernetes pomocí Rancher

  3. Nastavte Kubernetes Cluster na Ubuntu 20.04 pomocí kubeadm

  1. Jak nainstalovat Kubernetes (k8s) Cluster na RHEL 8

  2. Jak nainstalovat Kubernetes(k8s) s Minikube na CentOS 8

  3. Jak nastavit Kubernetes Cluster na Google Cloud Platform (GCP)

  1. Jak nastavit NGINX Ingress Controller v Kubernetes

  2. Jak nastavit soukromý registr dockerů v Kubernetes (k8s)

  3. Jak nastavit cluster Apache Tomcat se 3 uzly na Ubuntu