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
- Trzy serwery z systemem CentOS 8 – 1 węzeł główny i 2 węzły robocze.
- 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ć.
- Łą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.
- 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.
- 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.