Wyszukiwanie w witrynie

Jak zainstalować klaster Kubernetes na CentOS 8


Proces instalacji Klastra Kubernetes w CentOS 8 jest prawie podobny do procesu w CentOS 7 (który możesz przejść tutaj), ale proces tutaj ma kilka zmian. Zmiany te dotyczą głównie instalacji Dockera.

Począwszy od CentOS 8 (i rozszerzenia RHEL 8), doker został teraz natywnie zastąpiony przez podman i buildah, które są narzędziami firmy Redhat. W rzeczywistości pakiet docker został teraz usunięty z domyślnego repozytorium pakietów.

Dzięki temu posunięciu zespół Redhat ma na celu uproszczenie procesu tworzenia i używania kontenerów bez konieczności posiadania specjalnych uprawnień, przy jednoczesnym zachowaniu kompatybilności z obrazami dokerów i obsłudze ich bez konieczności stosowania demona. Podman obiecuje zapewnić większą elastyczność podczas pracy w środowiskach Kubernetes, ale jury pozostaje bez oceny.

W tym artykule omówimy proces instalacji Kubernetes na platformie CentOS 8 działającej na platformie Docker-CE (Społeczność wydanie). W późniejszym artykule przeprowadzimy również podobną instalację, używając podmana do naszych kontenerów.

Warunki wstępne

  1. Trzy serwery z systemem CentOS 8 – 1 węzeł główny i 2 węzły robocze.
  2. Zaleca się, aby węzły miały co najmniej 2 procesory z 2 GB pamięci RAM lub więcej na maszynę. Nie jest to rygorystyczny wymóg, ale w dużej mierze zależy od potrzeb aplikacji, którą zamierzasz uruchomić.
  3. Łączność z Internetem na wszystkich węzłach. Będziemy pobierać z repozytorium pakiety Kubernetes i docker. Podobnie musisz się upewnić, że menedżer pakietów DNF jest zainstalowany domyślnie i może zdalnie pobierać pakiety.
  4. Wszystkie węzły powinny także mieć możliwość łączenia się ze sobą w sieci prywatnej lub publicznej, w zależności od dostępności.
  5. Będziesz także potrzebować dostępu do konta z uprawnieniami sudo lub root. W tym samouczku będę korzystać z konta root.

Ostrożność

Większość węzłów ma zazwyczaj unikalne adresy MAC, jednak w niektórych wyjątkowych przypadkach niektóre maszyny wirtualne mogą mieć identyczne adresy MAC. Dlatego zaleca się sprawdzenie, czy Product_UUID i adres MAC nie są identyczne w żadnym z węzłów.

Kubernetes używa tych wartości do jednoznacznej identyfikacji węzłów w klastrze. Jeśli te wartości nie są unikalne dla każdego węzła, proces instalacji może się nie powieść.

Aby sprawdzić adres MAC interfejsu sieciowego i porównać go.

ip link

Aby sprawdzić product_uuid i porównać, uruchom następujące polecenie.

cat /sys/class/dmi/id/product_uuid 

Architektura logiczna

Nasza instalacja została zaprojektowana tak, aby węzeł główny kontrolował węzły robocze. Pod koniec tej instalacji nasza logiczna architektura będzie wyglądać mniej więcej tak.

Węzeł główny – ta maszyna zazwyczaj pełni rolę płaszczyzny kontrolnej i obsługuje bazę danych klastra oraz serwer API (z którym komunikuje się interfejs CLI kubectl).

Nasz 3-węzłowy Klaster Kubernetes będzie wyglądał mniej więcej tak:

Instalacja klastra Kubernetes na Master-Node

Aby Kubernetes działał, potrzebujesz silnika konteneryzacji. Jak wspomniano, będziemy używać Docker-CE.

Następujące instytucje będą wykonywane na CentOS 8 Master-Node.

Krok 1: Przygotuj nazwę hosta, zaporę sieciową i SELinux

Na swoim CentOS 8 Master-Node ustaw nazwę hosta systemu i zaktualizuj DNS w pliku /etc/hosts.

hostnamectl set-hostname master-node
cat <<EOF>> /etc/hosts
192.168.0.47 master-node
192.168.0.48 node-1 worker-node-1
192.168.0.49 node-2 worker-node-2
EOF

Następnie pinguj swoje worker-node-1 i worker-node-2, aby sprawdzić, czy zaktualizowany plik hosta działa poprawnie, używając polecenia ping.

ping 192.168.0.48
ping 192.168.0.49

Następnie wyłącz Selinux, ponieważ jest to wymagane, aby umożliwić kontenerom dostęp do systemu plików hosta, który jest potrzebny sieciom podów i innym usługom.

setenforce 0

Ustawienie setenforce na 0 skutecznie ustawia SELinux w tryb permisywny, co skutecznie wyłącza SELinux do następnego ponownego uruchomienia. Aby całkowicie go wyłączyć, użyj poniższego polecenia i uruchom ponownie komputer.

sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
reboot

Kubernetes wykorzystuje różne porty do komunikacji i dostępu, a porty te muszą być dostępne dla Kubernetes i nie ograniczane przez zaporę ogniową.

Skonfiguruj reguły zapory na portach.

firewall-cmd --permanent --add-port=6443/tcp
firewall-cmd --permanent --add-port=2379-2380/tcp
firewall-cmd --permanent --add-port=10250/tcp
firewall-cmd --permanent --add-port=10251/tcp
firewall-cmd --permanent --add-port=10252/tcp
firewall-cmd --permanent --add-port=10255/tcp
firewall-cmd --reload
modprobe br_netfilter
echo '1' > /proc/sys/net/bridge/bridge-nf-call-iptables

Krok 2: Zainstaluj Docker-CE na CentOS 8

Najpierw musisz dodać repozytorium Docker, ponieważ nie znajduje się ono już na domyślnej liście pakietów, używając następującego polecenia dnf config-manager.

dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo

Zainstaluj także pakiet containerd.io, który jest dostępny jako demon zarządzający pełnym cyklem życia kontenera w systemie hosta, od przesyłania i przechowywania obrazów po uruchamianie i nadzór kontenera, przechowywanie niskiego poziomu, przyłącza sieciowe i nie tylko .

dnf install https://download.docker.com/linux/centos/7/x86_64/stable/Packages/containerd.io-1.2.6-3.3.el7.x86_64.rpm

Teraz zainstaluj najnowszą wersję pakietu docker-ce.

dnf install docker-ce

Możesz teraz włączyć i uruchomić usługę dokowania.

systemctl enable docker
systemctl start docker

Krok 3: Zainstaluj Kubernetes (Kubeadm) na CentOS 8

Następnie musisz ręcznie dodać repozytoria Kubernetes, ponieważ nie są one domyślnie instalowane w CentOS 8.

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

Kubeadm pomaga w uruchomieniu minimalnego wykonalnego klastra Kubernetes, który jest zgodny z najlepszymi praktykami. Dzięki kubeadm Twój klaster powinien przejść testy zgodności Kubernetes.

Kubeadm obsługuje także inne funkcje cyklu życia klastra, takie jak uaktualnienia, obniżenie wersji i zarządzanie tokenami ładowania początkowego. Kubeadm jest także przyjazny dla integracji z innymi narzędziami do orkiestracji, takimi jak Ansible i Terraform.

Gdy repozytorium pakietu jest już gotowe, możesz przystąpić do instalacji pakietu kubeadm.

dnf install kubeadm -y 

Po pomyślnym zakończeniu instalacji włącz i uruchom usługę.

systemctl enable kubelet
systemctl start kubelet

Krok 4: Utwórz Master płaszczyzny kontrolnej za pomocą kubeadm

Master Kubernetes, który działa jako płaszczyzna sterująca dla klastra, uruchamia kilka krytycznych usług niezbędnych dla klastra. W związku z tym proces inicjalizacji wykona serię kontroli wstępnych, aby upewnić się, że maszyna jest gotowa do uruchomienia Kubernetes. Te wstępne kontrole ujawniają ostrzeżenia i kończą działanie w przypadku błędów. kubeadm init następnie pobiera i instaluje komponenty płaszczyzny sterującej klastra.

Teraz nadszedł czas na inicjalizację wzorca Kubernetes, ale wcześniej musisz wyłączyć zamianę, aby uruchomić polecenie „kubeadm init”.

swapoff -a

Inicjowanie mastera Kubernetes to całkowicie zautomatyzowany proces kontrolowany przez polecenie „kubeadm init”, jak pokazano.

kubeadm init

Następnie skopiuj następujące polecenie i zapisz je gdzieś, ponieważ później musieliśmy uruchomić to polecenie na węzłach roboczych.

kubeadm join 192.168.0.47:6443 --token nu06lu.xrsux0ss0ixtnms5  \ --discovery-token-ca-cert-hash ha256:f996ea35r4353d342fdea2997a1cf8caeddafd6d4360d606dbc82314683478hjmf7

Wskazówka: czasami powyższe polecenie może zgłosić błędy dotyczące przekazanych argumentów, więc aby uniknąć błędów, musisz usunąć znak '\' a twoje ostatnie polecenie będzie wyglądać tak.

kubeadm join 192.168.0.47:6443 --token nu06lu.xrsux0ss0ixtnms5 –discovery token-ca-cert-hash sha256:f996ea35r4353d342fdea2997a1cf8caeddafd6d4360d606dbc82314683478hjmf7

Po pomyślnym zainicjowaniu Kubernetes musisz umożliwić użytkownikowi rozpoczęcie korzystania z klastra. W naszym scenariuszu będziemy używać użytkownika root. Klaster można także uruchomić przy użyciu użytkownika sudo, jak pokazano.

Aby użyć root, uruchom:

mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config

Aby użyć użytkownika obsługującego sudo, uruchom:

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

Teraz potwierdź, że polecenie kubectl jest aktywowane.

kubectl get nodes

W tym momencie zobaczysz, że status węzła głównego to „NieGotowy”. Dzieje się tak, ponieważ nie wdrożyliśmy jeszcze sieci pod w klastrze.

Sieć pod to sieć nakładkowa klastra wdrożona na bieżącej sieci węzłów. Został zaprojektowany tak, aby umożliwić łączność między kapsułami.

Krok 5: Skonfiguruj sieć kapsuł

Wdrażanie klastra sieciowego jest procesem bardzo elastycznym, zależnym od Twoich potrzeb i dostępnych jest wiele opcji. Ponieważ chcemy, aby nasza instalacja była jak najprostsza, użyjemy wtyczki Weavenet, która nie wymaga żadnej konfiguracji ani dodatkowego kodu i zapewnia jeden adres IP na pod, co jest dla nas idealne. Jeśli chcesz zobaczyć więcej opcji, sprawdź tutaj.

Polecenia te będą ważne przy konfiguracji sieci kapsuły.

export kubever=$(kubectl version | base64 | tr -d '\n')
kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$kubever"

Teraz, jeśli sprawdzisz status swojego węzła głównego, powinien on być „Gotowy”.

kubectl get nodes

Następnie dodajemy do klastra węzły robocze.

Dodawanie węzłów roboczych do klastra Kubernetes

Poniższe instrukcje zostaną wykonane na każdym węźle roboczym podczas dołączania do klastra Kubernetes.

Krok 1: Przygotuj nazwę hosta, zaporę sieciową i SELinux

Najpierw ustaw nazwę hosta w worker-node-1 i worker-node-2, a następnie dodaj wpisy hosta do pliku /etc/hosts plik.

hostnamectl set-hostname 'node-1'
cat <<EOF>> /etc/hosts
192.168.0.47 master-node
192.168.0.48 node-1 worker-node-1
192.168.0.49 node-2 worker-node-2
EOF

Następnie wykonaj polecenie ping do węzła głównego z węzłów roboczych, aby potwierdzić, że zaktualizowany plik hosta działa prawidłowo, używając polecenia ping.

192.168.0.47

Następnie wyłącz SElinux i zaktualizuj reguły zapory sieciowej.

setenforce 0
sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
firewall-cmd --permanent --add-port=6783/tcp
firewall-cmd --permanent --add-port=10250/tcp
firewall-cmd --permanent --add-port=10255/tcp
firewall-cmd --permanent --add-port=30000-32767/tcp
firewall-cmd --reload
echo '1' > /proc/sys/net/bridge/bridge-nf-call-iptables

Krok 2: Skonfiguruj Docker-CE i Kubernetes Repo

Najpierw dodaj repozytorium Dockera za pomocą menedżera konfiguracji DNF.

dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo

Następnie dodaj pakiet containerd.io.

dnf install https://download.docker.com/linux/centos/7/x86_64/stable/Packages/containerd.io-1.2.6-3.3.el7.x86_64.rpm

Po zainstalowaniu tych dwóch pakietów zainstaluj najnowszą wersję docker-ce.

dnf install docker-ce

Włącz i uruchom usługę dokowania.

systemctl enable docker
systemctl start docker

Będziesz musiał ręcznie dodać repozytoria Kubernetes, ponieważ nie są one preinstalowane w CentOS 8.

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

Krok 3: Zainstaluj Kubeadm na CentOS 8

Gdy repozytorium pakietu jest już gotowe, możesz przystąpić do instalacji kubeadm.

dnf install kubeadm -y 

Uruchom i włącz usługę.

systemctl enable kubelet
systemctl start kubelet

Krok 4: Dołącz węzeł roboczy do klastra Kubernetes

Aby dołączyć do klastra, potrzebujemy teraz tokena wygenerowanego przez kubeadm init. Możesz skopiować i wkleić go do węzła-1 i węzła-2, jeśli gdzieś go skopiowałeś.

kubeadm join 192.168.0.47:6443 --token nu06lu.xrsux0ss0ixtnms5  --discovery-token-ca-cert-hash sha256:f996ea35r4353d342fdea2997a1cf8caeddafd6d4360d606dbc82314683478hjmf78

Zgodnie z sugestią w ostatniej linii, wróć do swojego węzła głównego i sprawdź, czy procesy robocze węzeł-1 i węzeł roboczy-2 dołączyły do klaster za pomocą następującego polecenia.

kubectl get nodes

Jeśli wszystkie kroki przebiegną pomyślnie, w węźle głównym powinieneś zobaczyć węzeł-1 i węzeł-2 w stanie gotowości. W tym momencie pomyślnie wdrożyłeś klaster Kubernetes w CentOS 8.

Zalecana lektura: Jak wdrożyć Nginx w klastrze Kubernetes

Niektóre ograniczenia

Klaster, który tutaj utworzyliśmy, ma pojedynczy węzeł główny i dlatego w przypadku awarii węzła głównego klaster może utracić dane i konieczne może być jego utworzenie od nowa.

Z tego powodu polecam konfigurację o wysokiej dostępności.