Inštalácia Kubernetes klastru na Ubuntu pomocou kubeadm
V tomto návode vás prevediem krokmi na inštaláciu a nastavenie funkčného 3-uzlového Kubernetes klastru na Ubuntu Linux. Kubernetes je open-source systém na orchestráciu kontajnerov, ktorý sa používa na automatizáciu nasadzovania, správy a škálovania kontajnerových aplikácií.
V tomto článku podrobne zdieľame proces:
- Príprava uzlov Kubernetes
- Nastavenie úložísk
- Inštalácia prostredia pre kontajnery
- Inštalácia komponentov Kubernetes
- Spúšťanie vášho klastra
- inštalácia sieťového pluginu pre Kubernetes
- Pridávanie nových pracovných uzlov do klastra
Poďme začať!
Konečný príručka k desktopu Ubuntu
Ovládnite Ubuntu ako profesionál – od krásnej úpravy plochy až po výkonnú automatizáciu v termináli. Ideálne pre vývojárov, správcov systémov a pokročilých používateľov, ktorí chcú mať úplnú kontrolu nad svojím pracovným prostredím.
Krok 1: Diagram systémov
Toto nastavenie je založené na nasledujúcom diagrame:
Nakonfigurujme názvy hostiteľov systému, aby sme mohli pokračovať k ďalším krokom:
Na hlavnom uzle:
Nastavte názov hosťa nasledovne:
sudo hostnamectl set-hostname k8s-master.example.comNa pracovnom uzle 01:
Nastavte názov hostiteľa pomocou nástroja príkazového riadku hostnamectl.
sudo hostnamectl set-hostname k8s-node-01.example.comNa pracovnom uzle 02:
Nastavte tiež názov hostiteľa pre pracovný uzol Kubernetes 02.
sudo hostnamectl set-hostname k8s-node-02.example.comKeď je na každom hostiteľovi nastavený správny názov hostiteľa, vyplňte na každom uzle hodnoty, ktoré boli nastavené.
$ sudo vim /etc/hosts
192.168.2.2 k8s-master.example.com k8s-master
192.168.2.3 k8s-node-01.example.com k8s-node-01
192.168.2.4 k8s-node-02.example.com k8s-node-02Odhláste sa a znova prihláste, aby sa použilo nové nakonfigurované meno hostiteľa.
exit||logoutKrok 2: Vytvorte administrátorského používateľa
Pred vykonaním akýchkoľvek konfigurácií špecifických pre Kubernetes sa uistime, že sú splnené všetky závislosti. Tu vykonáme aktualizáciu systému a vytvoríme používateľa Kubernetes.
Aktualizujte systémové balíky na najnovšiu verziu na všetkých uzloch:
sudo apt update && sudo apt upgrade -y
[ -e /var/run/reboot-required ] && sudo rebootPridať používateľa na správu klastra Kubernetes:
sudo useradd -s /bin/bash -m k8s-admin
sudo passwd k8s-admin
sudo usermod -aG sudo k8s-admin
echo "k8s-admin ALL=(ALL) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/k8s-adminAk uprednostňujete zadávanie hesla sudo pri spúšťaní príkazov sudo ako používateľ k8s-admin, potom posledný riadok môžete ignorovať. Môžete otestovať, či sa pri sudo nezobrazí výzva na zadanie hesla:
$ su - k8s-admin
k8s-admin@k8s-master:~$ sudo su -
root@k8s-master:~# exitVšetko vyzerá dobre, poďme pokračovať inštaláciou Docker enginu.
Krok 3: Nainštalujte Containerd
Kubernetes vyžaduje engine pre beh kontajnerov na spúšťanie kontajnerov. V tomto článku použijeme Containerd ako engine kontajnerov.
Uistite sa, že Docker nie je nainštalovaný. Ak je, odinštalujte ho.
sudo apt remove docker docker-engine docker.ioNainštalujte závislosti:
sudo apt update
sudo apt install apt-transport-https ca-certificates curl software-properties-commonImportujte GPG kľúč repozitára Docker:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/docker-archive-keyring.gpg
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"Nainštalujte Docker engine.
sudo apt update && sudo apt install containerd.ioSlužba sa spúšťa automaticky.
$ systemctl status containerd.service
● containerd.service - containerd container runtime
Loaded: loaded (/lib/systemd/system/containerd.service; enabled; vendor preset: enabled)
Active: active (running) since Sun 2024-07-14 21:22:30 UTC; 34min ago
Docs: https://containerd.io
Process: 4265 ExecStartPre=/sbin/modprobe overlay (code=exited, status=0/SUCCESS)
Main PID: 4270 (containerd)
Tasks: 8
CGroup: /system.slice/containerd.service
└─4270 /usr/bin/containerd
Môžete si tiež skontrolovať nainštalovanú verziu:
containerd --versionKrok 4: Inštalácia komponentov Kubernetes
Nainštalujte závislé nástroje.
sudo apt install apt-transport-https ca-certificates curl gpg -yNastavte verziu Kubernetes, ktorú chcete nainštalovať.
k8s_ver=1.30Stiahnite si verejný podpisový kľúč pre repozitáre balíkov Kubernetes
curl -fsSL https://pkgs.k8s.io/core:/stable:/v${k8s_ver}/deb/Release.key | \
sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/k8s.gpgPridajte oficiálne APT úložisko Kubernetes.
echo "deb https://pkgs.k8s.io/core:/stable:/v${k8s_ver}/deb/ /" | sudo tee /etc/apt/sources.list.d/kubernetes.listAktualizujte index balíkov apt:
sudo apt updateInštalovať komponenty Kubernetes
Nainštalujte kubectl, kubelet, kubernetes-cni a kubeadm, komponenty hlavného uzla Kubernetes:
sudo apt install kubectl kubelet kubeadm kubernetes-cniPotvrďte, že všetky binárne súbory balíkov sú prítomné v súborovom systéme.
$ which kubelet
/usr/bin/kubelet
$ which kubeadm
/usr/bin/kubeadmAk je swap zapnutý, vypnite ho.
sudo swapoff -a
sudo sed -i.bak -r 's/(.+ swap .+)/#\1/' /etc/fstabNačítajte požadované moduly.
sudo tee /etc/modules-load.d/containerd.conf <<EOF
overlay
br_netfilter
EOFNa načítanie počas spustenia spustite:
sudo modprobe overlay
sudo modprobe br_netfilterTiež nastavte konfigurácie sysctl.
sudo tee /etc/sysctl.d/kubernetes.conf<<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOFNačítajte konfigurácie.
sudo sysctl --systemKonfigurujte containerd a reštartujte službu
sudo mkdir -p /etc/containerd
sudo containerd config default|sudo tee /etc/containerd/config.toml
sudo systemctl restart containerdPovoliť službu kubelet
sudo systemctl enable kubeletKrok 5: Spustenie k8s riadiacej roviny
Všetky príkazy, ktoré budú vykonané v tejto sekcii, sú určené na spustenie na hlavnom uzle. Neprehadzujte žiadne z príkazov na pracovných uzloch Kubernetes. Komponenty Master Kubernetes poskytujú riadiacu rovinu klastra – API Server, Scheduler, Controller Manager. Robia globálne rozhodnutia o klastri, napríklad plánovanie a detekciu a reakciu na udalosti klastra.
Overte, či containerd funguje, stiahnutím základných obrazov Kubernetes.
$ sudo kubeadm config images pull
[config/images] Pulled registry.k8s.io/kube-apiserver:v1.30.2
[config/images] Pulled registry.k8s.io/kube-controller-manager:v1.30.2
[config/images] Pulled registry.k8s.io/kube-scheduler:v1.30.2
[config/images] Pulled registry.k8s.io/kube-proxy:v1.30.2
[config/images] Pulled registry.k8s.io/coredns/coredns:v1.11.1
[config/images] Pulled registry.k8s.io/pause:3.9
[config/images] Pulled registry.k8s.io/etcd:3.5.12-0Ak máte niekoľko CRI zásuviek, použite --cri-socket na výber jednej:
# Containerd
sudo kubeadm config images pull --cri-socket unix:///run/containerd/containerd.sock
# For CRI-O
sudo kubeadm config images pull --cri-socket unix:///var/run/crio/crio.sockBootstrap (jediný uzol riadiacej roviny) – bez zdieľaného koncového bodu
Ak chcete nastaviť cluster bez použitia DNS endpointu, spustite:
sudo sysctl -p
sudo kubeadm init \
--pod-network-cidr=172.24.0.0/16 \
--cri-socket unix:///run/containerd/containerd.sockBootstrap s zdieľaným koncovým bodom (DNS názov pre API riadiacej roviny)
Toto je ideálne pre viacero uzlov riadiacej roviny.
Nastavte DNS názov koncového bodu clusteru alebo pridajte záznam do súboru /etc/hosts.
$ sudo vim /etc/hosts
172.29.20.5 k8s-cluster.computingforgeeks.comVytvoriť klaster:
sudo sysctl -p
sudo kubeadm init \
--pod-network-cidr=172.24.0.0/16 \
--upload-certs \
--control-plane-endpoint=k8s-cluster.computingforgeeks.comKde :
- k8s-cluster.computingforgeeks.com smeruje na IP adresu LB pre vaše uzly riadiacej roviny k8s.
Ak pôjde všetko dobre, mali by ste dostať úspešnú správu s pokynmi, čo robiť ďalej:
---
Your Kubernetes master has initialized successfully!
To start using your cluster, you need to run the following as a regular user:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
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/
You can now join any number of machines by running the following on each node
as root:
kubeadm join 192.168.2.2:6443 --token 9y4vc8.h7jdjle1xdovrd0z --discovery-token-ca-cert-hash sha256:cff9d1444a56b24b4a8839ff3330ab7177065c90753ef3e4e614566695db273cKonfigurujte prístup pre používateľa k8s-admin na hlavným serveri
Prepnite na k8s-admin a skopírujte konfiguračný súbor Kubernetes s informáciami o klastri.
sudo su - k8s-admin
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/configOverte nasadenie kontrolou informácií o klastri.
$ kubectl cluster-info
Kubernetes control plane is running at https://192.168.2.2:6443
CoreDNS is running at https://192.168.2.2:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.Krok 6: Inštalácia CNI pluginu
V tomto návode budeme používať Calico. Môžete si vybrať akýkoľvek iný podporovaný sieťový plugin.
Stiahnite si súbory operátora a vlastných zdrojov. Pre najnovšiu verziu si pozrite stránku s verziami.
Získajte najnovšie vydanie:
VERSION=$(curl --silent "https://api.github.com/repos/projectcalico/calico/releases/latest" | grep '"tag_name"' | sed -E 's/.*"([^"]+)".*/\1/')Stiahnite inštalačné zdroje.
curl -O https://raw.githubusercontent.com/projectcalico/calico/${VERSION}/manifests/tigera-operator.yaml
curl -O https://raw.githubusercontent.com/projectcalico/calico/${VERSION}/manifests/custom-resources.yaml Najprv nainštalujte operátora na váš klaster.
k8s-admin@k8s-master:~$ kubectl create -f tigera-operator.yaml
namespace/tigera-operator created
customresourcedefinition.apiextensions.k8s.io/bgpconfigurations.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/bgpfilters.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/bgppeers.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/blockaffinities.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/caliconodestatuses.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/clusterinformations.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/felixconfigurations.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/globalnetworkpolicies.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/globalnetworksets.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/hostendpoints.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/ipamblocks.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/ipamconfigs.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/ipamhandles.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/ippools.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/ipreservations.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/kubecontrollersconfigurations.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/networkpolicies.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/networksets.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/apiservers.operator.tigera.io created
customresourcedefinition.apiextensions.k8s.io/imagesets.operator.tigera.io created
customresourcedefinition.apiextensions.k8s.io/installations.operator.tigera.io created
customresourcedefinition.apiextensions.k8s.io/tigerastatuses.operator.tigera.io created
serviceaccount/tigera-operator created
clusterrole.rbac.authorization.k8s.io/tigera-operator created
clusterrolebinding.rbac.authorization.k8s.io/tigera-operator created
deployment.apps/tigera-operator createdAktualizujme aj Calico IP pool.
sed -ie 's/192.168.0.0/172.24.0.0/g' custom-resources.yamlPotom použite konfigurácie manifestu.
k8s-admin@k8s-master:~$ kubectl create -f custom-resources.yaml
installation.operator.tigera.io/default created
apiserver.operator.tigera.io/default createdPočkajte, kým bude Calico Pod v stave spustenia.
k8s-admin@k8s-master:~$ kubectl get pods --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
calico-apiserver calico-apiserver-5476c484c4-rmmts 1/1 Running 0 37s
calico-apiserver calico-apiserver-5476c484c4-z9phf 1/1 Running 0 37s
calico-system calico-kube-controllers-6945f87bd4-2xwx4 1/1 Running 0 80s
calico-system calico-node-tkwtv 1/1 Running 0 80s
calico-system calico-typha-65f575c9fc-xx8m8 1/1 Running 0 81s
calico-system csi-node-driver-kngdn 2/2 Running 0 80s
kube-system coredns-5dd5756b68-77x77 1/1 Running 0 11m
kube-system coredns-5dd5756b68-plpd6 1/1 Running 0 11m
kube-system etcd-k8s-master.example.com 1/1 Running 0 11m
kube-system kube-apiserver-k8s-master.example.com 1/1 Running 0 11m
kube-system kube-controller-manager-k8s-master.example.com 1/1 Running 0 11m
kube-system kube-proxy-bxq4x 1/1 Running 0 11m
kube-system kube-scheduler-k8s-master.example.com 1/1 Running 0 11m
tigera-operator tigera-operator-94d7f7696-xls25 1/1 Running 0 3m20sUzol by mal byť teraz pripravený.
k8s-admin@k8s-master:~$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
k8s-master.example.com Ready control-plane 20m v1.30.2Krok 7: Nastavenie pracovných uzlov
Keď je Kubernetes klaster inicializovaný a hlavným uzlom je online, začnite konfiguráciu pracovných uzlov. Uzol je pracovný stroj v Kubernetes, môže byť virtuálnym strojom alebo fyzickým počítačom. Každý uzol je spravovaný hlavným uzlom a má služby potrebné na spustenie podov – docker, kubelet, kube-proxy.
1) Uistite sa, že je nainštalovaný runtime Containerd (pokryté)
Použite kroky uvedené v tomto článku na inštaláciu containerd
2) Pridajte repozitár Kubernetes (prebrané)
Uistite sa, že repozitár pre balíky Kubernetes je pridaný do systému.
3) Nainštalujte komponenty Kubernetes (Krok 4)
Keď pridáte repozitár Kubernetes, nainštalujte komponenty pomocou:
sudo apt install kubelet kubeadm kubectl kubernetes-cni4) Pripojte uzol ku klastru:
Použite príkaz join uvedený po inicializácii Kubernetes clustra. Príkazy môžete zobraziť pomocou:
kubeadm token create --print-join-commandPo dokončení skontrolujte stav uzlov na masteri:
k8s-admin@k8s-master:~$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
k8s-master Ready master 35m v1.30.2
k8s-node-01 Ready <none> 2m v1.30.2
k8s-node-02 Ready <none> 1m v1.30.2Krok 8: Overenie nastavenia Kubernetes
Vytvorte testovací názvový priestor:
$ kubectl create namespace test
namespace/test createdNasadiť testovaciu aplikáciu
kubectl create deployment hello-node --image=registry.k8s.io/e2e-test-images/agnhost:2.39 -- /agnhost netexec --http-port=8080Zobraziť existujúce nasadenia:
$ kubectl get deployments
NAME READY UP-TO-DATE AVAILABLE AGE
hello-node 1/1 1 1 1mZobraziť bežiace pody
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
hello-node-5f76cf6ccf-br9b5 1/1 Running 0 1mNa vyčistenie zdrojov spustite:
kubectl delete deployment hello-nodeKrok 9: Nakonfigurujte dokončovanie kubectl
Povoľte automatické dopĺňanie príkazov kubectl v shelle. Kubectl podporuje automatické dopĺňanie, čo môže ušetriť veľa písania! Na povolenie automatického dopĺňania pre aktuálnu reláciu spustite:
source <(kubectl completion bash)Ak chcete pridať automatické dopĺňanie kubectl do svojho profilu, aby sa v budúcich shelloch načítavalo automaticky, spustite:
echo "source <(kubectl completion bash)" >> ~/.bashrcAk používate zsh, upravte súbor ~/.zshrc a pridajte nasledujúci kód na povolenie automatického dopĺňania kubectl:
if [ $commands[kubectl] ]; then
source <(kubectl completion zsh)
fiAlebo pri používaní Oh-My-Zsh upravte súbor ~/.zshrc a aktualizujte riadok plugins= tak, aby obsahoval plugin kubectl.
source <(kubectl completion zsh)Rovnako relevantný je príkaz Top pre metriky kontajnerov
Materiály na tréning ovládania Kubernetes:
- Najlepšie knihy na štúdium Kubernetes
Záver
Úspešne sme nasadili 3-uzlový Kubernetes cluster na serveroch s Ubuntu LTS. Naše ďalšie návody budú pokrývať Kubernetes HA, monitorovanie Kubernetes, ako nakonfigurovať externé úložisko a ďalšie zaujímavé veci. Sledujte nás!
