Im Folgenden werde ich ein wenig über die Änderungen im technologischen Stack für Container sprechen, die wir beim Studium der CentOS 8- Distribution kennengelernt haben, und was CRI-O ist und wie man schnell eine ausführbare Umgebung für Kubernetes damit einrichtet .
Warum Docker in der Standard-CentOS 8-Distribution fehlt
Nach der Installation der neuesten Hauptversionen von RHEL 8 oder CentOS 8 kann man nicht übersehen : Diesen Distributionen und offiziellen Repositorys fehlt die Docker- Anwendung , die die Podman- , Buildah-Pakete (in der Standarddistribution vorhanden) und CRI-O ideologisch und funktional ersetzt . Dies ist auf die praktische Umsetzung von Standards zurückzuführen, die unter anderem von Red Hat im Rahmen der Open Container Initiative (OCI) entwickelt wurden.
Das Ziel von OCI, das Teil der Linux Foundation ist, ist die Schaffung offener Industriestandards für Containerformate und Laufzeiten, die sich mehreren Herausforderungen stellen. Erstens widersprachen sie nicht der Linux-Philosophie (zum Beispiel in dem Teil, dass jedes Programm eine Aktion ausführen sollte und Docker eine Art All-in-One-Harvester ist). Zweitens könnten wir alle vorhandenen Fehler in der Docker- Software beseitigen . Drittens würden sie die Geschäftsanforderungen führender kommerzieller Plattformen für die Bereitstellung, Verwaltung und Bereitstellung von Containeranwendungen (z. B. Red Hat OpenShift) vollständig erfüllen.
Nachteile von DockerDie Vorteile der neuen Software wurden bereits in diesem Artikel ausführlich beschrieben. Eine ausführliche Beschreibung des gesamten im OCI-Projekt angebotenen Software-Stacks und seiner Architekturmerkmale finden Sie in der offiziellen Dokumentation und in den Artikeln von Red Hat selbst (ein guter Artikel im Red Hat-Blog). und in Bewertungen von Drittanbietern .
Es ist wichtig zu beachten, welche Funktionen die Komponenten des vorgeschlagenen Stapels haben:
- Podman - direkte Interaktion mit Containern und Bildspeicherung über den runC-Prozess;
- Buildah - Erstellen und Laden von Bildern in die Registrierung;
- CRI-O ist ein ausführbares Framework für Container-Orchestrierungssysteme (wie Kubernetes).
Ich denke, um das allgemeine Schema der Interaktion zwischen den Komponenten des Stapels zu verstehen, ist es ratsam, hier das Kommunikationsdiagramm von Kubernetes mit runC- und Low-Level-Bibliotheken unter Verwendung von CRI-O darzustellen :
CRI-O und Kubernetes halten sich an denselben Release- und Support-Zyklus (die Kompatibilitätsmatrix ist sehr einfach: Hauptversionen Kubernetes und CRI-O sind gleich), und dies gibt uns unter Berücksichtigung des Fokus auf die vollständige und umfassende Prüfung der Arbeit dieses Stapels durch Entwickler das Recht, in jedem Anwendungsfall die maximal erreichbare Stabilität bei der Arbeit zu erwarten (hier ist auch die relative Leichtigkeit von CRI-O im Vergleich vorteilhaft vonDocker aufgrund einer absichtlichen Einschränkung der Funktionalität).
Bei der "richtigen" Installation von Kubernetes (laut OCI natürlich) mit CRI-O unter CentOS 8 stießen wir auf kleine Schwierigkeiten, die jedoch erfolgreich überwunden wurden. Gerne teile ich Ihnen die Installations- und Konfigurationsanweisungen mit, die zusammen höchstens 10 Minuten dauern.
So stellen Sie Kubernetes unter CentOS 8 mit CRI-O bereit
Voraussetzungen: Mindestens ein Host (2 Kerne, 4 GB RAM, mindestens 15 GB Laufwerk) mit installiertem CentOS 8 (das Installationsprofil "Server" wird empfohlen) sowie ein Eintrag im lokalen DNS (als letzter Ausweg können Sie dies tun) in / etc / hosts). Und vergessen Sie nicht, den Tausch zu deaktivieren .
Wir führen alle Operationen auf dem Host als Root-Benutzer aus. Seien Sie vorsichtig.
- Im ersten Schritt konfigurieren wir das Betriebssystem, installieren und konfigurieren die vorläufigen Abhängigkeiten für CRI-O.
- Lassen Sie uns das Betriebssystem aktualisieren:
dnf -y update
- SELinux. , . , , , :
firewall-cmd --set-default-zone trusted firewall-cmd --reload
:
systemctl disable --now firewalld
SELinux «permissive»:
setenforce 0 sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
- , «br_netfilter» :
modprobe overlay modprobe br_netfilter echo "br_netfilter" >> /etc/modules-load.d/br_netfilter.conf dnf -y install iproute-tc
- :
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
:
sysctl --system
- CRI-O ( CRI-O, , Kubernetes), Kubernetes 1.18:
export REQUIRED_VERSION=1.18
:
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
- CRI-O:
dnf -y install cri-o
, : CRI-O , conmon :
sed -i 's/\/usr\/libexec\/crio\/conmon/\/usr\/bin\/conmon/' /etc/crio/crio.conf
CRI-O:
systemctl enable --now crio
:
systemctl status crio
- Lassen Sie uns das Betriebssystem aktualisieren:
- Kubernetes.
- :
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
Kubernetes ( 1.18, ):
dnf install -y kubelet-1.18* kubeadm-1.18* kubectl-1.18* --disableexcludes=kubernetes
- : Docker, CRI-O, Kubernetes /var/lib/kubelet/config.yaml, :
mkdir /var/lib/kubelet cat <<EOF > /var/lib/kubelet/config.yaml apiVersion: kubelet.config.k8s.io/v1beta1 kind: KubeletConfiguration cgroupDriver: systemd EOF
- , : , cgroup, kubelet ( ), , :
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
- :
- .
- :
kubeadm init --pod-network-cidr=10.244.0.0/16
«kubeadm join ...», , , , .
- (CNI) Pod network. Calico. , Flannel nftables, Calico — CNI, Kubernetes:
kubectl --kubeconfig /etc/kubernetes/admin.conf apply -f https://docs.projectcalico.org/v3.15/manifests/calico.yaml
- worker 1 2, , «kubeadm init ...», :
kubeadm join $CONTROL_PLANE_ADDRESS:6443 --token $TOKEN \ --discovery-token-ca-cert-hash $TOKEN_HASH
- , :
kubectl --kubeconfig=/etc/kubernetes/admin.conf get pods -A
! K8s . - :
Ich hoffe, die obigen Anweisungen haben Ihnen Zeit und Ärger erspart.
Das Ergebnis der Prozesse in der Branche hängt häufig davon ab, wie sie von der Mehrheit der Endbenutzer und Entwickler anderer Software in der entsprechenden Nische akzeptiert werden. Es ist noch nicht klar, wohin die OCI-Initiativen in einigen Jahren führen werden, aber wir werden gerne folgen. Sie können Ihre Meinung jetzt in den Kommentaren teilen.
Bleib dran!
Dieser Artikel stammt aus folgenden Quellen:
- Abschnitt über Containerlaufzeiten in der Kubernetes-Dokumentation
- CRI-O Projektseite
- Red Hat-Blog-Beiträge: dieser , dieser und mehr