GNU/Linux >> Znalost Linux >  >> Linux

Vytvoření jediného clusteru Kubernetes řídicí roviny pomocí kubeadm

Úvod

Kubernetes je klastr a orchestrování motor pro kontejnery Docker. Jinými slovy Kubernetes je open source software nebo nástroj, který se používá k orchestraci a správě kontejnerů Docker v prostředí clusteru. Kubernetes je také známý jako k8s a byl vyvinut společností Google a darován „Cloud Native Computing Foundation“

Cíl

Toto nastavení clusteru kubernetes bude mít 1 hlavní uzel s CentOS 7 a 2 pracovní uzly také známý jako přisluhovači sWindows 2k19 Servers operační systém.

Nainstalujeme a nakonfigurujeme cluster kubernetes na virtuálních počítačích datového centra pro správu kontejnerů Docker. Tento cluster obsahuje 1 hlavní (Linux) a 2 pracovní uzly (Windows), hlavní bude řídit plány a nasazení modulů na pracovních uzlech.

Diagram Kubernetes Architecture

Některá důležitá Terminologie Kubernetes potřebujete vědět před zahájením konfigurace

ETCD (uzel clusteru) :Kubernetes používá „etcd“ jako úložiště databází klíč–hodnota. Ukládá konfiguraci clusteru Kubernetes v „etcd“ .

kube-controller-manager: Správce řadiče Kubernetes je démon, který vkládá základní řídicí smyčky dodávané s Kubernetes. V Kubernetes je řadič řídicí smyčka, která sleduje sdílený stav clusteru prostřednictvím „apiserveru“ a provádí změny ve snaze posunout aktuální stav k požadovanému stavu. Příklady řadičů, které se dnes dodávají s Kubernetes, jsou řadič replikace, řadič koncových bodů, řadič jmenného prostoru a řadič servisních účtů

kube-apiserver :Server Kubernetes API ověřuje a konfiguruje data pro objekty API, které zahrnují moduly, služby, řadiče replikace a další. API Server obsluhuje operace REST a poskytuje frontend sdílenému stavu clusteru, jehož prostřednictvím všechny ostatní komponenty interagují.

kube-scheduler: Plánovač Kubernetes je funkce bohatá na zásady, s ohledem na topologii, specifická pro pracovní zátěž, která významně ovlivňuje dostupnost, výkon a kapacitu. Plánovač musí vzít v úvahu individuální a kolektivní požadavky na zdroje, požadavky na kvalitu služeb, omezení hardwaru/softwaru/zásad, specifikace afinity a antiafinity, umístění dat, interference mezi pracovní zátěží, termíny atd.

kubelet :„kubelet“ je primární „agent uzlu “, který běží na každém uzlu. Může zaregistrovat uzel na apiserveru pomocí jednoho z:název hostitele; příznak pro přepsání názvu hostitele; nebo specifická logika pro poskytovatele cloudu.

kube-proxy :Síťový proxy server Kubernetes běží na každém uzlu. To odráží služby definované v Kubernetes API na každém uzlu a může provádět jednoduché přesměrování TCP, UDP a SCTP streamů nebo kruhové předávání TCP, UDP a SCTP přes sadu backendů.

Popis nastavení clusteru Kubernetes

V nastavení Kubernetes máme 1 hlavní (CentOS 7) a 2 pracovní (Win 2k19) uzly. Z hlavního uzlu můžeme cluster a jeho uzly spravovat pomocí ‘kubeadm ‘a ‘kubectl ‘příkaz.

Kubernetes lze nainstalovat a nasadit pomocí následujících metod:

  • Minikube (je to cluster kubernetes s jedním uzlem)
  • Kops (nastavení kubernetes s více uzly do AWS)
  • Kubeadm (multiuzlový klastr v našich vlastních prostorách)

V tomto článku nainstalujeme nejnovější verzi Kubernetes 1.16 na CentOS 7 / RHEL 7 s nástrojem kubeadm. V tomto nastavení bereme 1 server CentOS 7 a 2 servery Windows 2k19 s minimální instalací. Jeden server bude fungovat jako hlavní uzel a zbývající dva servery budou podřízené nebo pracovní uzly

Na hlavní uzel budou nainstalovány následující součásti

  • Server API – Poskytuje kubernetes API pomocí Jason / Yaml přes http, stavy objektů API jsou uloženy v etcd
  • Plánovač – Jedná se o program na hlavním uzlu, který provádí úkoly plánování, jako je spouštění kontejnerů v pracovních uzlech na základě dostupnosti zdrojů
  • Správce kontroléru – Hlavním úkolem správce kontroléru je monitorovat replikační kontroléry a vytvářet moduly pro udržení požadovaného stavu.
  • etcd – Jedná se o databázi párů klíčových hodnot. Ukládá konfigurační data clusteru a stavu clusteru.
  • Nástroj Kubectl – Je to nástroj příkazového řádku, který se připojuje k serveru API na portu 6443. Používají ho správci k vytváření modulů, služeb atd.

Na pracovních uzlech budou nainstalovány následující součásti

  • Kubelet – Je to agent, který běží na každém pracovním uzlu, připojuje se k Dockeru a stará se o vytváření, spouštění a mazání kontejnerů.
  • Kube-Proxy – Směruje provoz do příslušných kontejnerů na základě IP adresy a čísla portu příchozího požadavku. Jinými slovy můžeme říci, že se používá pro překlad portů.
  • Pod – Pod lze definovat jako vícevrstvou nebo skupinu kontejnerů, které jsou nasazeny na jednom pracovním uzlu nebo hostiteli Docker.

Kroky instalace Kubernetes 1.16 na CentOS 7

Krok 1: Nastavte název hostitele, deaktivujte SELinux a nastavte firewall, v našem případě firewall a SELinux je ve vypnutém stavu a název hostitele je nastaven jako kube-master. A ujistěte se, že všechny uzly jsou

Krok 2 :Konfigurace úložiště Kubernetes

Balíčky Kubernetes nejsou dostupné ve výchozích úložištích CentOS 7 a RHEL 7. Ke konfiguraci úložišť balíčků použijte níže uvedené adresy URL.

Krok 3: Nainstalujte Kubeadm a Docker pomocí níže uvedeného příkazu

# yum install kubeadm docker -y

Poté spusťte a povolte kubectl a dokovací stanice pomocí níže uvedených příkazů.

# systemctl restart docker && systemctl enable docker
# systemctl restart kubelet && systemctl enable kubelet

Krok 4 :Inicializujte Kubernetes Master pomocí ‘kubeadm init’

Výstup výše uvedeného příkazu by byl něco jako níže

Jak můžeme vidět na výstupu, kubernetes master byl úspěšně inicializován. Chcete-li použít cluster jako uživatel root, spusťte níže uvedené příkazy.

Krok 5 :Nasazení sítě pod do clusteru

Zkuste spustit níže uvedené příkazy, abyste získali stav clusteru a podů.

kubectl get nodes
kubectl get pods –all-namespaces

Aby byl stav clusteru připraven a stav kube-dns spuštěn, nasaďte síť pod tak, aby kontejnery různých hostitelů spolu komunikovaly. Síť POD je překryvná síť mezi pracovními uzly.

Spusťte příkaz beneath pro nasazení sítě.

Nyní spusťte následující příkazy k ověření stavu. Jak vidíme, hlavní uzel je nyní ve stavu připravenosti, nyní do tohoto clusteru kubernetes přidáme pracovní uzly.

Výběr a konfigurace síťového řešení clusteru Kubernetes

Jakmile nastavíte hlavní uzel Kubernetes, jste připraveni vybrat síťové řešení. Existuje několik způsobů, jak zajistit směrování podsítě virtuálního klastru napříč uzly. Vyberte si jednu z následujících možností pro Kubernetes ve Windows ještě dnes:

  • K nastavení překryvné sítě za vás použijte plugin CNI, jako je Flannel.
  • K naprogramování tras za vás použijte plugin CNI, jako je Flannel (používá síťový režim l2bridge).
  • Nakonfigurujte inteligentní přepínač top-of-rack (ToR) pro směrování podsítě.

Flannel v režimu vxlan

Flannel v režimu vxlan lze použít k nastavení konfigurovatelné virtuální překryvné sítě, která používá tunelování VXLAN pro směrování paketů mezi uzly.

Příprava Kubernetes master pro Flannel

Na hlavním serveru Kubernetes v našem clusteru se doporučuje určitá menší příprava. Při použití Flannel se doporučuje povolit přemostění provozu IPv4 do řetězců iptables. To lze provést pomocí následujícího příkazu:

# sudo sysctl net.bridge.bridge-nf-call-iptables=1

Stáhnout a nakonfigurovat Flannel

Stáhněte si nejnovější manifest Flannel pomocí níže uvedeného příkazu:

wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

Existují dvě sekce, které byste měli upravit, abyste povolili síťový backend vxlan:

  1. V net-conf.json části vašeho kube-flannel.yml , dvakrát zkontrolujte:
    • Podsíť clusteru (např. „10.244.0.0/16“) je nastavena podle potřeby.
    • VNI 4096 je nastaveno v backendu
    • Port 4789 je nastaven v backendu
  2. V cni-conf.json části vašeho kube-flannel.yml , změňte název sítě na „vxlan0“ .

Po provedení výše uvedených kroků váš net-conf.json by měl vypadat následovně:

Váš cni-conf.json by měl vypadat následovně:

Spustit Flannel a ověřit

Spusťte Flannel pomocí příkazu

# kubectl apply -f kube-flannel.yml

Dále, protože Flannel pody jsou založené na Linuxu, aplikujte naši opravu Linux NodeSelector na kube-flannel-ds DaemonSet tak, aby cílil pouze na Linux pomocí níže uvedených příkazů ke stažení a nastavení 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

Po několika minutách byste měli vidět všechny moduly jako spuštěné, pokud byla nasazena síť Flannel modulů.

Připojování pracovních uzlů Windows ke clusteru kubernetes

Jakmile nastavíte hlavní uzel Kubernetes a vyberete požadované síťové řešení, jste připraveni se připojit k uzlům Windows Server a vytvořit cluster. To vyžaduje určitou přípravu na uzlech Windows před připojením.

Příprava uzlu Windows

Instalovat Docker (vyžaduje restart)

Kubernetes používá Docker jako svůj kontejnerový engine, takže jej musíme nainstalovat. Můžete se řídit oficiálními pokyny pro Dokumenty, pokyny pro Docker nebo zkusit níže uvedené kroky:

Install-Module -Name DockerMsftProvider -Repository PSGallery -Force
Install-Package -Name Docker -ProviderName DockerMsftProvider
Restart-Computer –Force

Pokud jste za proxy, musí být definovány následující proměnné prostředí PowerShell:

[Environment]::SetEnvironmentVariable(“HTTP_PROXY”, “http://proxy.example.com:80/”, [EnvironmentVariableTarget]::Machine)

[Environment]::SetEnvironmentVariable(“HTTPS_PROXY”, “http://proxy.example.com:443/”, [EnvironmentVariableTarget]::Machine)

Pokud se po restartu zobrazí následující chyba:

Poté ručně spusťte službu docker:

Ukotvitelný panel Start-Service

Příprava adresáře Kubernetes pro Windows

Vytvořte adresář „Kubernetes pro Windows“ pro ukládání binárních souborů Kubernetes a také jakýchkoli skriptů nasazení a konfiguračních souborů.

mkdir c:\k

Zkopírujte certifikát Kubernetes

Zkopírujte soubor certifikátu Kubernetes ($HOME/.kube/config ) z hlavního na tento nový C:\k adresář.

Stáhnout binární soubory Kubernetes

Abyste mohli spustit Kubernetes, musíte si nejprve stáhnout kubectl , kubelet , a kube-proxy dvojhvězdy. Můžete si je stáhnout z odkazů v CHANGELOG.md soubor nejnovějších verzí.

  • Například zde jsou binární soubory uzlů v1.14.
  • Použijte nástroj jako Expand-Archive k rozbalení archivu a umístění binárních souborů do C:\k\ .

(Volitelné) Nastavení kubectl v systému Windows

Pokud chcete ovládat cluster z Windows, můžete tak učinit pomocí kubectl příkaz. Nejprve vytvořte kubectl dostupné mimo C:\k\ adresář, upravte PATH proměnná prostředí:

$env:Path += ";C:\k"

Pokud chcete, aby byla tato změna trvalá, upravte proměnnou v cíli počítače:

[Environment]::SetEnvironmentVariable("Path", $env:Path + ";C:\k", [EnvironmentVariableTarget]::Machine)

Dále ověříme, zda je certifikát clusteru platný. Chcete-li nastavit umístění, kam kubectl hledá konfigurační soubor, můžete předat --kubeconfig nebo upravte KUBECONFIG proměnná prostředí. Například pokud je konfigurace umístěna v C:\k\config :

$env:KUBECONFIG="C:\k\config"

Chcete-li, aby toto nastavení bylo trvalé pro rozsah aktuálního uživatele:

[Environment]::SetEnvironmentVariable("KUBECONFIG", "C:\k\config", [EnvironmentVariableTarget]::User)

Nakonec, abyste zkontrolovali, zda byla konfigurace správně objevena, můžete použít:

kubectl config view

Pokud se zobrazuje chyba připojení

Unable to connect to the server: dial tcp [::1]:8080: connectex: No connection could be made because the target machine actively refused it.

Měli byste znovu zkontrolovat umístění kubeconfig nebo jej zkusit zkopírovat znovu.

Pokud nevidíte žádné chyby, uzel je nyní připraven připojit se ke clusteru.

Připojování k uzlu Windows

V závislosti na zvoleném síťovém řešení můžete:

  1. Připojte uzly Windows Server ke clusteru Flannel (vxlan nebo hostitel-gw) (používáme toto řešení)
  2. Připojte uzly Windows Server ke clusteru pomocí přepínače ToR

Připojení ke klastru Flanel

V tomto úložišti Microsoftu je sbírka skriptů nasazení Flannel, která vám pomůže připojit tento uzel ke clusteru.

Stáhněte si skript Flannel start.ps1, jehož obsah by měl být extrahován do 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

Za předpokladu, že jste si připravili uzel Windows a c:\k adresář vypadá níže, jste připraveni se připojit k uzlu.

Připojit se k uzlu Windows

Pro zjednodušení procesu připojení k uzlu Windows stačí ke spuštění kubelet spustit jediný skript Windows , kube-proxy , flanneld a připojte se k uzlu.

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>

Po spuštění byste měli být schopni:

  • Zobrazte spojené uzly Windows pomocí uzlů kubectl get
  • Zobrazte 3 otevřená okna powershell, jedno pro kubelet, jedno pro flaneld a další pro kube-proxy
  • Podívejte se na procesy hostitelského agenta pro flaneld, kubelet a kube-proxy běžící na uzlu


Linux
  1. Nastavte cluster Kubernetes pomocí Rancher

  2. Nastavte Kubernetes Cluster na Ubuntu 20.04 pomocí kubeadm

  3. grastate.dat se seqno -1 na zdravém clusteru. Proč?

  1. Jak nastavit Kubernetes Cluster pomocí Rancher

  2. Jak vypustit uzel v Kubernetes

  3. kubectl použít vs vytvořit:Který z nich použít k vytváření zdrojů v prostředí Kubernetes Cluster Environment?

  1. Jak nastavit Kubernetes(k8s) Cluster v HA s Kubeadm

  2. Jak nastavit cluster OpenShift s jedním uzlem na RHEL 8

  3. Základní součásti clusteru Kubernetes