Kubernetes için çalışma zamanı ortamı olarak Docker'ın yerine geçen CRI-O: CentOS 8'de kurulum

Merhaba! Adım Sergey, Surf'te DevOps'um. Surf'teki DevOps departmanı, yalnızca uzmanlar arasında etkileşim kurarak iş süreçlerini entegre etmeyi değil, aynı zamanda hem kendi altyapısında hem de müşterinin altyapısında güncel teknolojileri aktif olarak araştırıp uygulamayı hedefliyor.

Aşağıda dağıtımı incelerken karşılaştığımız konteynerler için teknoloji yığınındaki değişikliklerden biraz bahsedeceğim. 8 CentOS ve nedir CRI-O ve yürütülebilir bir ortamın hızlı bir şekilde nasıl kurulacağını Kubernetes.

Kubernetes için çalışma zamanı ortamı olarak Docker'ın yerine geçen CRI-O: CentOS 8'de kurulum

Docker neden CentOS 8'e dahil değil?

En son ana sürümleri yükledikten sonra RHEL 8 veya 8 CentOS kimse yardım edemez ama fark edemez: bu dağıtımlar ve resmi depolar uygulamayı içermiyor liman işçisiideolojik ve işlevsel olarak paketlerin yerini alan podman, Buildah (dağıtımda varsayılan olarak bulunur) ve CRI-O. Bunun nedeni, diğer şeylerin yanı sıra, Açık Konteyner Girişimi (OCI) projesinin bir parçası olarak Red Hat tarafından geliştirilen standartların pratikte uygulanmasıdır.

Linux Vakfı'nın bir parçası olan OCI'nin hedefi, aynı anda birçok sorunu çözen konteyner formatları ve çalışma zamanları için açık endüstri standartları oluşturmaktır. Öncelikle Linux'un felsefesine aykırı değillerdi (örneğin her programın bir eylemi gerçekleştirmesi gerektiği kısmında ve liman işçisi bir tür hepsi bir arada kombinasyondur). İkincisi, yazılımdaki mevcut tüm eksiklikleri ortadan kaldırabilirler. liman işçisi. Üçüncüsü, konteynerli uygulamaların (örneğin Red Hat OpenShift) konuşlandırılması, yönetilmesi ve sunulmasına yönelik önde gelen ticari platformların iş gereksinimleriyle tamamen uyumlu olacaklar.

Dezavantajları: liman işçisi ve yeni yazılımın avantajları daha önce ayrıntılı olarak anlatılmıştı. Bu makaledeve OCI projesi kapsamında sunulan tüm yazılım yığınının ve mimari özelliklerinin ayrıntılı bir açıklaması resmi belgelerde ve Red Hat'in kendi makalelerinde bulunabilir (fena değil) makale Red Hat blogunda) ve üçüncü taraflarda yorumlar.

Önerilen yığının bileşenlerinin hangi işlevselliğe sahip olduğuna dikkat etmek önemlidir:

  • podman — runC süreci aracılığıyla konteynerler ve görüntü depolamayla doğrudan etkileşim;
  • Buildah - görüntülerin kayıt defterine montajı ve yüklenmesi;
  • CRI-O — konteyner düzenleme sistemleri için yürütülebilir bir ortam (örneğin, Kubernetes).

Yığının bileşenleri arasındaki genel etkileşim şemasını anlamak için burada bir bağlantı şeması sağlamanın tavsiye edildiğini düşünüyorum. Kubernetes c koşC ve düşük seviyeli kütüphaneler kullanarak CRI-O:

Kubernetes için çalışma zamanı ortamı olarak Docker'ın yerine geçen CRI-O: CentOS 8'de kurulum

CRI-O и Kubernetes aynı sürüm ve destek döngüsüne bağlı kalın (uyumluluk matrisi çok basittir: ana sürümler Kubernetes и CRI-O çakışıyor) ve bu, bu yığının çalışmasının geliştiriciler tarafından eksiksiz ve kapsamlı bir şekilde test edilmesine odaklanılması dikkate alındığında, bize herhangi bir kullanım senaryosu altında operasyonda elde edilebilecek maksimum stabiliteyi bekleme hakkını verir (burada göreceli hafiflik de faydalıdır) CRI-O ile karşılaştırıldığında liman işçisi işlevselliğin kasıtlı olarak sınırlandırılması nedeniyle).

Yüklediğinizde Kubernetes kullanarak "doğru yol" yolunu (elbette OCI'ye göre) kullanarak CRI-O üzerinde 8 CentOS Bazı küçük zorluklarla karşılaştık ama bunları başarıyla aştık. Toplamda 10 dakika kadar sürecek olan kurulum ve konfigürasyon talimatlarını sizlerle paylaşmaktan mutluluk duyacağım.

CRI-O çerçevesini kullanarak Kubernetes'i CentOS 8'e nasıl dağıtabilirim?

Önkoşullar: yüklü en az bir ana bilgisayarın (2 çekirdek, 4 GB RAM, en az 15 GB depolama) varlığı 8 CentOS ("Sunucu" kurulum profili önerilir) ve bunun için yerel DNS'deki girişler (son çare olarak /etc/hosts dosyasına bir giriş yaparak geçebilirsiniz). Ve unutma takası devre dışı bırak.

Host üzerindeki tüm işlemleri root kullanıcı olarak gerçekleştiriyoruz, dikkatli olun.

  1. İlk adımda işletim sistemini yapılandıracağız, CRI-O için ön bağımlılıkları kurup yapılandıracağız.
    • İşletim sistemini güncelleyelim:
      dnf -y update
      

    • Daha sonra güvenlik duvarını ve SELinux'u yapılandırmanız gerekir. Burada her şey, sunucumuzun veya sunucularımızın çalışacağı ortama bağlıdır. Aşağıdaki önerilere göre bir güvenlik duvarı kurabilirsiniz: belgelemeveya güvenilen bir ağ üzerindeyseniz veya üçüncü taraf bir güvenlik duvarı kullanıyorsanız, varsayılan bölgeyi güvenilir olarak değiştirin veya güvenlik duvarını kapatın:
      firewall-cmd --set-default-zone trusted
      
      firewall-cmd --reload

      Güvenlik duvarını kapatmak için aşağıdaki komutu kullanabilirsiniz:

      systemctl disable --now firewalld
      

      SELinux'un kapatılması veya "izin verilen" moda geçirilmesi gerekiyor:

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

    • Gerekli çekirdek modüllerini ve paketlerini yükleyin, sistem başlangıcında “br_netfilter” modülünün otomatik yüklenmesini yapılandırın:
      modprobe overlay
      
      modprobe br_netfilter
      
      echo "br_netfilter" >> /etc/modules-load.d/br_netfilter.conf
      
      dnf -y install iproute-tc
      

    • Paket iletmeyi etkinleştirmek ve trafik işlemeyi düzeltmek için uygun ayarları yapacağız:
      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
      

      yapılan ayarları uygulayın:

      sysctl --system

    • gerekli sürümü ayarlayın CRI-O (ana sürüm CRI-Odaha önce de belirtildiği gibi gerekli sürümle eşleşin Kubernetes), en son kararlı sürümden bu yana Kubernetes şu anda 1.18:
      export REQUIRED_VERSION=1.18
      

      gerekli depoları ekleyin:

      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

    • şimdi kurulumu yapabiliriz CRI-O:
      dnf -y install cri-o
      

      Kurulum sürecinde karşılaştığımız ilk nüansa dikkat edin: konfigürasyonu düzenlemeniz gerekiyor CRI-O Gerekli ortak bileşen belirtilenden farklı bir konuma sahip olduğundan hizmeti başlatmadan önce:

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

      Artık arka plan programını etkinleştirip başlatabilirsiniz CRI-O:

      systemctl enable --now crio
      

      Daemon durumunu kontrol edebilirsiniz:

      systemctl status crio
      

  2. Kurulum ve aktivasyon Kubernetes.
    • Gerekli repository'yi ekleyelim:
      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
      

      Artık kurulumu yapabiliriz Kubernetes (yukarıda belirtildiği gibi sürüm 1.18):

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

    • İkinci önemli nüans: arka plan programı kullanmadığımız için liman işçisi, ancak biz arka plan programını kullanıyoruz CRI-O, başlatma ve başlatmadan önce Kubernetes İstediğiniz dizini oluşturduktan sonra /var/lib/kubelet/config.yaml yapılandırma dosyasında uygun ayarları yapmanız gerekir:
      mkdir /var/lib/kubelet
      
      cat <<EOF > /var/lib/kubelet/config.yaml
      apiVersion: kubelet.config.k8s.io/v1beta1
      kind: KubeletConfiguration
      cgroupDriver: systemd
      EOF

    • Kurulum sırasında karşılaştığımız üçüncü önemli nokta: Kullanılan sürücüyü belirtmemize rağmen grupve iletilen bağımsız değişkenler aracılığıyla yapılandırılması kübelet güncel değilse (belgelerde açıkça belirtildiği gibi), dosyaya argümanlar eklememiz gerekir, aksi takdirde kümemiz başlatılmayacaktır:
      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

    • Artık daemon'u aktif hale getirebiliriz. kübelet:
      sudo systemctl enable --now kubelet
      

      özelleştirmek için kontrol Paneli veya işçi düğümleri birkaç dakika içinde kullanabilirsiniz bu komut dosyasıyla.

  3. Kümemizi başlatmanın zamanı geldi.
    • Kümeyi başlatmak için şu komutu çalıştırın:
      kubeadm init --pod-network-cidr=10.244.0.0/16
      

      Çıktı sonunda kullanmanız istenen “kubeadm join…” kümesine katılma komutunu veya en azından belirtilen tokenları mutlaka yazın.

    • Pod ağı için eklentiyi (CNI) yükleyelim. kullanmanı tavsiye ederim patiska. Muhtemelen daha popüler flanel ile uyumluluk sorunları var nftablesve patiska - proje tarafından önerilen ve tamamen test edilen tek CNI uygulaması Kubernetes:
      kubectl --kubeconfig /etc/kubernetes/admin.conf apply -f https://docs.projectcalico.org/v3.15/manifests/calico.yaml 

    • Bir çalışan düğümü kümemize bağlamak için onu 1. ve 2. talimatlara göre yapılandırmanız veya kullanmanız gerekir. senaryo, ardından önceki adımda yazdığımız “kubeadm init...” çıktısından komutu çalıştırın:
      kubeadm join $CONTROL_PLANE_ADDRESS:6443 --token $TOKEN 
          --discovery-token-ca-cert-hash $TOKEN_HASH

    • Kümemizin başlatıldığını ve çalışmaya başladığını kontrol edelim:
      kubectl --kubeconfig=/etc/kubernetes/admin.conf get pods -A
      

    Hazır! Verileri zaten K8s kümenizde barındırabilirsiniz.

Önümüzde bizi neler bekliyor

Umarım yukarıdaki talimatlar zamandan ve sinirlerden tasarruf etmenize yardımcı olmuştur.
Sektörde meydana gelen süreçlerin sonucu genellikle bunların son kullanıcıların büyük bir kısmı ve ilgili alandaki diğer yazılım geliştiricileri tarafından nasıl kabul edildiğine bağlıdır. OCI girişimlerinin birkaç yıl içinde nelere yol açacağı henüz tam olarak belli değil ama keyifle izleyeceğiz. Hemen yorumlarda düşüncelerinizi paylaşabilirsiniz.

Bizi izlemeye devam edin!

Bu makale aşağıdaki kaynaklar sayesinde ortaya çıktı:

  • Container çalışma zamanları hakkındaki bölüm Kubernet belgeleri
  • Sayfa İnternetteki CRI-O projesi
  • Red Hat blog makaleleri: bu, bu Ve bircok digerleri



Kaynak: habr.com

Yorum ekle