CRI-O jako zamiennik Dockera jako środowisko uruchomieniowe dla Kubernetes: konfiguracja na CentOS 8

Cześć! Nazywam się Sergey, jestem DevOps w Surf. Dział DevOps w Surf ma na celu nie tylko nawiązywanie interakcji pomiędzy specjalistami i integrowanie procesów pracy, ale także aktywne badanie i wdrażanie aktualnych technologii zarówno w infrastrukturze własnej, jak i w infrastrukturze klienta.

Poniżej opowiem trochę o zmianach w stosie technologii dla kontenerów, które napotkaliśmy podczas badania dystrybucji 8 CentOS i o tym, co jest STWÓRZ TO i jak szybko skonfigurować środowisko wykonywalne dla Kubernetes.

CRI-O jako zamiennik Dockera jako środowisko uruchomieniowe dla Kubernetes: konfiguracja na CentOS 8

Dlaczego Docker nie jest zawarty w CentOS 8?

Po zainstalowaniu najnowszych głównych wydań RHEL 8 lub 8 CentOS nie można nie zauważyć: te dystrybucje i oficjalne repozytoria nie mają tej aplikacji Doker, które ideologicznie i funkcjonalnie zastępują opakowania Podman, Buduj (domyślnie obecny w dystrybucji) i STWÓRZ TO. Wynika to z praktycznego wdrożenia standardów opracowanych między innymi przez firmę Red Hat w ramach projektu Open Container Initiative (OCI).

Celem OCI, będącego częścią The Linux Foundation, jest stworzenie otwartych standardów branżowych dla formatów kontenerów i środowisk wykonawczych, które rozwiązują kilka problemów jednocześnie. Po pierwsze, nie zaprzeczały filozofii Linuksa (przykładowo w części, że każdy program powinien wykonywać jedną akcję, a Doker jest rodzajem kombajnu typu „wszystko w jednym”). Po drugie, mogłyby wyeliminować wszystkie istniejące braki w oprogramowaniu Doker. Po trzecie, byłyby w pełni kompatybilne z wymaganiami biznesowymi wiodących platform komercyjnych do wdrażania, zarządzania i obsługi aplikacji kontenerowych (na przykład Red Hat OpenShift).

Ograniczenia Doker a zalety nowego oprogramowania zostały już szczegółowo opisane w ten artykuł, a szczegółowy opis całego stosu oprogramowania oferowanego w ramach projektu OCI i jego cech architektonicznych można znaleźć w oficjalnej dokumentacji i artykułach samego Red Hata (nieźle artykuł na blogu Red Hat) i na stronach trzecich Opinie.

Należy zwrócić uwagę, jaką funkcjonalność mają komponenty proponowanego stosu:

  • Podman — bezpośrednia interakcja z kontenerami i przechowywaniem obrazów poprzez proces runC;
  • Buduj — montaż i wgranie obrazów do rejestru;
  • STWÓRZ TO — środowisko wykonywalne dla systemów orkiestracji kontenerów (na przykład Kubernetes).

Myślę, że aby zrozumieć ogólny schemat interakcji pomiędzy elementami stosu wskazane jest podanie tutaj schematu połączeń Kubernetes c biegC i biblioteki niskiego poziomu STWÓRZ TO:

CRI-O jako zamiennik Dockera jako środowisko uruchomieniowe dla Kubernetes: konfiguracja na CentOS 8

STWÓRZ TO и Kubernetes trzymaj się tego samego cyklu wydawniczego i wsparcia (matryca kompatybilności jest bardzo prosta: wersje główne Kubernetes и STWÓRZ TO pokrywają się), a to, biorąc pod uwagę skupienie się na pełnym i kompleksowym przetestowaniu działania tego stosu przez programistów, daje nam prawo oczekiwać maksymalnej osiągalnej stabilności działania w każdych scenariuszach użytkowania (tutaj korzystna jest także względna lekkość STWÓRZ TO w porównaniu do Doker ze względu na celowe ograniczenie funkcjonalności).

Podczas instalacji Kubernetes „właściwy sposób” (oczywiście według OCI) przy użyciu STWÓRZ TO na 8 CentOS Natrafiliśmy na drobne trudności, które jednak udało nam się pokonać. Chętnie podzielę się z Tobą instrukcją instalacji i konfiguracji, co łącznie zajmie około 10 minut.

Jak wdrożyć Kubernetes na CentOS 8 przy użyciu frameworka CRI-O

Warunki wstępne: obecność co najmniej jednego hosta (2 rdzenie, 4 GB RAM, co najmniej 15 GB pamięci) z zainstalowanym 8 CentOS (zalecany jest profil instalacyjny „Serwer”), a także wpisy dla niego w lokalnym DNS (w ostateczności można obejść się wpisem w /etc/hosts). I nie zapomnij wyłącz zamianę.

Wszystkie operacje na hoście wykonujemy jako użytkownik root, należy zachować ostrożność.

  1. W pierwszym kroku skonfigurujemy system operacyjny, zainstalujemy i skonfigurujemy wstępne zależności dla CRI-O.
    • Zaktualizujmy system operacyjny:
      dnf -y update
      

    • Następnie musisz skonfigurować zaporę sieciową i SELinux. Tutaj wszystko zależy od środowiska w jakim będzie pracował nasz host lub hosty. Możesz skonfigurować zaporę sieciową zgodnie z zaleceniami z dokumentacjalub, jeśli korzystasz z zaufanej sieci lub korzystasz z zapory innej firmy, zmień strefę domyślną na zaufaną lub wyłącz zaporę:
      firewall-cmd --set-default-zone trusted
      
      firewall-cmd --reload

      Aby wyłączyć zaporę sieciową, możesz użyć następującego polecenia:

      systemctl disable --now firewalld
      

      SELinux należy wyłączyć lub przełączyć w tryb „zezwalający”:

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

    • Załaduj niezbędne moduły i pakiety jądra, skonfiguruj automatyczne ładowanie modułu „br_netfilter” przy uruchomieniu systemu:
      modprobe overlay
      
      modprobe br_netfilter
      
      echo "br_netfilter" >> /etc/modules-load.d/br_netfilter.conf
      
      dnf -y install iproute-tc
      

    • Aby aktywować przekazywanie pakietów i prawidłowe przetwarzanie ruchu, dokonamy odpowiednich ustawień:
      cat > /etc/sysctl.d/99-kubernetes-cri.conf <<EOF
      net.bridge.bridge-nf-call-iptables = 1
      net.ipv4.ip_forward = 1
      net.bridge.bridge-nf-call-ip6tables = 1
      EOF
      

      zastosuj wprowadzone ustawienia:

      sysctl --system

    • ustaw wymaganą wersję STWÓRZ TO (wersja główna STWÓRZ TO, jak już wspomniano, pasuje do wymaganej wersji Kubernetes), od najnowszej stabilnej wersji Kubernetes obecnie 1.18:
      export REQUIRED_VERSION=1.18
      

      dodaj niezbędne repozytoria:

      dnf -y install 'dnf-command(copr)'
      
      dnf -y copr enable rhcontainerbot/container-selinux
      
      curl -L -o /etc/yum.repos.d/devel:kubic:libcontainers:stable.repo https://download.opensuse.org/repositories/devel:kubic:libcontainers:stable/CentOS_8/devel:kubic:libcontainers:stable.repo
      
      curl -L -o /etc/yum.repos.d/devel:kubic:libcontainers:stable:cri-o:$REQUIRED_VERSION.repo https://download.opensuse.org/repositories/devel:kubic:libcontainers:stable:cri-o:$REQUIRED_VERSION/CentOS_8/devel:kubic:libcontainers:stable:cri-o:$REQUIRED_VERSION.repo

    • teraz możemy zainstalować STWÓRZ TO:
      dnf -y install cri-o
      

      Zwróć uwagę na pierwszy niuans, który napotykamy podczas procesu instalacji: musisz edytować konfigurację STWÓRZ TO przed uruchomieniem usługi, ponieważ wymagany komponent conmon ma inną lokalizację niż określona:

      sed -i 's//usr/libexec/crio/conmon//usr/bin/conmon/' /etc/crio/crio.conf

      Teraz możesz aktywować i uruchomić demona STWÓRZ TO:

      systemctl enable --now crio
      

      Możesz sprawdzić status demona:

      systemctl status crio
      

  2. Instalacja i aktywacja Kubernetes.
    • Dodajmy wymagane repozytorium:
      cat <<EOF > /etc/yum.repos.d/kubernetes.repo
      [kubernetes]
      name=Kubernetes
      baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-$basearch
      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
      exclude=kubelet kubeadm kubectl
      EOF
      

      Teraz możemy zainstalować Kubernetes (wersja 1.18, jak wspomniano powyżej):

      dnf install -y kubelet-1.18* kubeadm-1.18* kubectl-1.18* --disableexcludes=kubernetes

    • Drugi ważny niuans: ponieważ nie używamy demona Doker, ale używamy demona STWÓRZ TO, przed uruchomieniem i inicjalizacją Kubernetes musisz dokonać odpowiednich ustawień w pliku konfiguracyjnym /var/lib/kubelet/config.yaml, po uprzednim utworzeniu żądanego katalogu:
      mkdir /var/lib/kubelet
      
      cat <<EOF > /var/lib/kubelet/config.yaml
      apiVersion: kubelet.config.k8s.io/v1beta1
      kind: KubeletConfiguration
      cgroupDriver: systemd
      EOF

    • Trzeci ważny punkt, który napotykamy podczas instalacji: pomimo tego, że wskazaliśmy używany sterownik cgrupai jego konfiguracja poprzez przekazane argumenty kubelet jest nieaktualny (jak wyraźnie stwierdzono w dokumentacji), musimy dodać argumenty do pliku, w przeciwnym razie nasz klaster nie zostanie zainicjowany:
      cat /dev/null > /etc/sysconfig/kubelet
      
      cat <<EOF > /etc/sysconfig/kubelet
      KUBELET_EXTRA_ARGS=--container-runtime=remote --cgroup-driver=systemd --container-runtime-endpoint='unix:///var/run/crio/crio.sock'
      EOF

    • Teraz możemy aktywować demona kubelet:
      sudo systemctl enable --now kubelet
      

      Dostosować sterowanie samolotem lub pracownik węzłów w ciągu kilku minut, możesz użyć z tym skryptem.

  3. Czas zainicjować nasz klaster.
    • Aby zainicjować klaster, uruchom komendę:
      kubeadm init --pod-network-cidr=10.244.0.0/16
      

      Pamiętaj, aby zapisać polecenie dołączenia do klastra „kubeadm Join…”, o którego użycie zostaniesz poproszony na końcu wyniku lub przynajmniej określone tokeny.

    • Zainstalujmy wtyczkę (CNI) dla sieci Pod. Polecam używać Perkal. Być może bardziej popularne Flanela ma problemy ze zgodnością z nftables, tak i tak Perkal - jedyne wdrożenie CNI zalecane i w pełni przetestowane w projekcie Kubernetes:
      kubectl --kubeconfig /etc/kubernetes/admin.conf apply -f https://docs.projectcalico.org/v3.15/manifests/calico.yaml 

    • Aby podłączyć węzeł roboczy do naszego klastra należy go skonfigurować zgodnie z instrukcją 1 i 2 lub użyć scenariusz, następnie uruchom komendę z wyjścia „kubeadm init...”, które zapisaliśmy w poprzednim kroku:
      kubeadm join $CONTROL_PLANE_ADDRESS:6443 --token $TOKEN 
          --discovery-token-ca-cert-hash $TOKEN_HASH

    • Sprawdźmy, czy nasz klaster został zainicjowany i zaczął działać:
      kubectl --kubeconfig=/etc/kubernetes/admin.conf get pods -A
      

    Gotowy! Możesz już hostować ładunki w swoim klastrze K8s.

Co nas czeka dalej

Mam nadzieję, że powyższe instrukcje pomogły Ci zaoszczędzić trochę czasu i nerwów.
Wynik procesów zachodzących w branży często zależy od tego, jak zostaną one zaakceptowane przez większość użytkowników końcowych i twórców innego oprogramowania w odpowiedniej niszy. Nie jest jeszcze do końca jasne, do czego za kilka lat doprowadzą inicjatywy OCI, ale z przyjemnością będziemy to obserwować. Już teraz możesz podzielić się swoją opinią w komentarzach.

Bądźcie czujni!

Artykuł ten pojawił się dzięki następującym źródłom:



Źródło: www.habr.com

Dodaj komentarz