OpenShift виртуалчлал: контейнер, KVM болон виртуал машинууд

OpenShift виртуалчлал (дээд урсгалын төсөл - Kubernetes: KubeVirt, үзнэ үү. энд и энд), nee Container-native Virtualization нь виртуал машинуудыг (VMs) Kubernetes-ийн үндсэн нэгж болгон ашиглах, удирдахад зориулагдсан OpenShift платформын функцээр танилцуулагдсан. Технологийн үндсэн ялгаатай байдлаас шалтгаалан ийм төрлийн ажил нь техникийн хувьд төвөгтэй байдаг. Энэ зорилгодоо хүрэхийн тулд бид олон жилийн турш бидэнтэй хамт байж, үр дүнтэй гэдгээ баталсан Red Hat Enterprise Linux болон KVM дээр суурилсан танил технологийг ашигласан.

OpenShift виртуалчлал: контейнер, KVM болон виртуал машинууд

Энэ нийтлэлд бид OpenShift виртуалчлалын техникийн талыг авч үзэх бөгөөд энэ нь VM болон контейнеруудыг нэг байгууллага болгон удирддаг нэг платформ дотор зэрэгцэн орших боломжийг олгодог.

Тооцооллын даалгавар

Контейнерууд процессуудыг тусгаарлах, нөөцийг удирдахын тулд нэрийн орон зай, бүлгүүд гэх мэт Linux цөмийн механизмуудыг ашигладаг. Процессууд нь ихэвчлэн Python, Java програмууд эсвэл гүйцэтгэх файлууд гэж ойлгогддог боловч үнэндээ bash, Emacs эсвэл vim гэх мэт ямар ч процесс байж болно.

Виртуал машин гэж юу вэ? Гипервизорын үүднээс энэ нь бас процесс юм. Гэхдээ програмын процесс биш, харин тодорхой VM-ийг гүйцэтгэх үүрэгтэй KVM процесс юм.

OpenShift виртуалчлал: контейнер, KVM болон виртуал машинууд

Контейнерын зураг нь KVM виртуал машинд шаардлагатай бүх хэрэгсэл, номын сан, файлуудыг агуулдаг. Хэрэв бид ажиллаж байгаа VM-ийн подыг шалгавал тэнд туслахууд болон qemu-kvm процессуудыг харах болно. Нэмж дурдахад, бид qemu-img, qemu-nbd, virsh зэрэг виртуал машинуудыг удирдах KVM хэрэгслүүдэд хандах боломжтой.

OpenShift виртуалчлал: контейнер, KVM болон виртуал машинууд

Виртуал машин нь pod учраас Кубернетес дэх подын бүх функцийг автоматаар өвлөн авдаг. VM pods нь ердийн подволкуудын нэгэн адил хуваарийн схем болон бохирдол, хүлцэл, ойр дотно байдал, эсрэг хандлага зэрэг шалгуурт хамаарна. Та мөн өндөр хүртээмжтэй байх гэх мэт давуу талыг авах болно. Гэсэн хэдий ч нэг чухал ялгаа бий: ердийн хонхорцог нь ердийн утгаараа хостоос хост руу шилждэггүй. Хэрэв зангилаа офлайн болвол түүн дээрх pod нь дуусгавар болж кластерын өөр зангилаа руу дахин хуваарилагдана. Виртуал машины хувьд бид шууд шилжих хөдөлгөөнийг харах болно гэж найдаж байна.

Энэ цоорхойг арилгахын тулд ажилчдын зангилаа хоорондын VM-ийн шууд шилжилтийг эхлүүлэх, хянах, удирдах үүрэгтэй амьд шилжих механизмыг тайлбарлах тусгай нөөцийн тодорхойлолтыг (CDR) үүсгэсэн.

apiVersion: kubevirt.io/v1alpha3
kind: VirtualMachineInstanceMigration
metadata:
  name: migration-job
spec:
  vmiName: fedora

Зангилаа идэвхгүй болсон үед шууд шилжих хөдөлгөөнийг нүүлгэх стратеги болгон тохируулсан виртуал машинуудад шилжих ажлууд автоматаар үүсгэгдэнэ. Ингэснээр та кластерийн зангилаа хооронд шилжих үед виртуал машинуудын үйлдлийг хянах боломжтой. Та Live Migration-ийг тохируулж, бусад бүх pods-ын нэгэн адил VM-г удирдах боломжтой.

Сүлжээ

Аливаа Kubernetes систем нь програм хангамжийн SDN сүлжээг ашиглан зангилаа ба хонгилын хоорондох холбоог хангадаг. OpenShift нь үл хамаарах зүйл биш бөгөөд 3-р хувилбараас эхлэн үүнд зориулж OpenShiftSDN-г ашигладаг. Нэмж дурдахад, OpenShift 4 нь Multus хэмээх өөр нэг шинэ функцтэй бөгөөд энэ нь олон сүлжээг ашиглах боломжтой болгож, тэдгээрт нэгэн зэрэг pods холбох боломжийг олгодог.

OpenShift виртуалчлал: контейнер, KVM болон виртуал машинууд

Multus-ийг ашигласнаар администратор нэмэлт CNI сүлжээг тодорхойлж болох бөгөөд дараа нь тусгай Cluster Network Operator-ээр кластер дээр байрлуулж, тохируулах болно. Дараа нь хонхорцог нь эдгээр сүлжээнүүдийн нэг буюу хэд хэдэн сүлжээнд, ихэвчлэн стандарт OpenShiftSDN болон нэмэлт интерфейстэй холбогддог. Хэрэв таны VM хэрэгтэй бол SR-IOV төхөөрөмжүүд, стандарт Linux Bridge, MACVLAN болон IPVLAN төхөөрөмжүүдийг ашиглаж болно. Доорх зураг нь eth1 интерфейс дээрх гүүрний сүлжээнд Multus CNI-г хэрхэн тохируулахыг харуулж байна:

apiVersion: operator.openshift.io/v1
kind: Network
metadata:
  name: cluster
spec:
  additionalNetworks:
  - name: multus1
rawCNIConfig: '{ "cniVersion": "0.3.1", "type": "bridge", "master": "eth1", "ipam":
   { "type": "static", "addresses": [ { "address": "191.168.1.1/24" } ] } }'
   type: Raw

OpenShift виртуалчлалын хувьд энэ нь VM-ийг SDN-ийг алгасаж гадаад сүлжээнд шууд холбож болно гэсэн үг юм. Энэ нь Red Hat Virtualization эсвэл VMware vSphere-ээс OpenShift руу шилжсэн виртуал машинуудад чухал ач холбогдолтой, учир нь хэрэв та хоёр дахь OSI давхаргад нэвтрэх эрхтэй бол сүлжээний тохиргоонд өөрчлөлт орохгүй. Энэ нь мөн VM нь SDN-ийг тойрч гарах сүлжээний хаягтай байж болно гэсэн үг юм. Тиймээс бид тусгай сүлжээний адаптеруудыг үр дүнтэй ашиглах, эсвэл сүлжээгээр дамжуулан хадгалах системд шууд холбогдох боломжтой ...

Та OpenShift виртуалчлалын виртуал машинуудыг хэрхэн үүсгэх, сүлжээнд холбох талаар илүү ихийг мэдэх боломжтой энд... Түүнээс гадна, nmstate оператор, OpenShift виртуалчлалын нэг хэсэг болгон байрлуулсан нь гипервизорын дор ашиглагддаг физик зангилаанууд дээр сүлжээний тохиргоог үүсгэх, удирдах өөр нэг танил аргыг санал болгож байна.

Хадгалалт

OpenShift виртуалчлалын хүрээнд виртуал машины дискүүдийг холбох, удирдах нь StorageClasses, PersistentVolumeClaims (PVC) болон PersistentVolume (PV) зэрэг Kubernetes концепцууд болон Kubernetes орчны стандарт хадгалах протоколуудыг ашиглан хийгддэг. Энэ нь Kubernetes-ийн администраторууд болон програмын багуудад чингэлэг болон виртуал машиныг удирдах нийтлэг, танил аргыг өгдөг. Виртуалчлалын орчны олон администраторуудын хувьд энэ ойлголт нь OpenStack болон бусад олон клоуд платформ дээр ашиглагддаг VM тохиргооны файлууд болон дискүүдийг салгах ижил зарчмыг ашигладаг тул танил сонсогдож магадгүй юм.

Гэсэн хэдий ч бид гипервизороос OpenShift руу шилжих үед өгөгдлийг хадгалах шаардлагатай байдаг тул VM-д зориулж шинэ диск үүсгэж болохгүй. Тийм ээ, бид шинэ VM байршуулсан ч үүнийг эхнээс нь үүсгэхээс илүү загвараар хийх нь үргэлж хурдан байдаг. Тиймээс бидэнд одоо байгаа дискүүдийг импортлох функц хэрэгтэй байна.

Энэ ажлыг хялбарчлахын тулд OpenShift виртуалчлал нь Containerized Data Importer (CDI) төслийг хэрэгжүүлдэг бөгөөд энэ нь олон эх сурвалжаас дискний дискний дүрсийг импортлохыг багасгаж, PVC оруулга үүсгэх хүртэл багасгадаг.

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: "fedora-disk0"
  labels:
    app: containerized-data-importer
  annotations:
    cdi.kubevirt.io/storage.import.endpoint: "http://10.0.0.1/images/Fedora-Cloud-Base-31-1.9.x86_64.qcow2"
spec:
  storageClassName: ocs-gold
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 20Gi

Энэ нь CDI-г идэвхжүүлж, доорх зурагт үзүүлсэн үйлдлүүдийн дарааллыг идэвхжүүлдэг.

OpenShift виртуалчлал: контейнер, KVM болон виртуал машинууд

CDI дууссаны дараа PVC нь ашиглахад бэлэн виртуал машины дискийг агуулж, стандарт OpenShift формат руу хөрвүүлэх болно...
OpenShift виртуалчлалтай ажиллахдаа чингэлэгт зориулсан байнгын хадгалах функцийг хэрэгжүүлдэг Ceph файлын систем дээр суурилсан Red Hat шийдэл болох OpenShift Container Storage (OCS) нь бас хэрэгтэй. Стандарт PVC хандалтын аргуудаас гадна RWO (блок) ба RWX (файл) - OCS нь түүхий блок төхөөрөмжид RWX-ийг өгдөг бөгөөд энэ нь гүйцэтгэлийн өндөр шаардлага бүхий програмуудад блок хандалтыг хуваалцахад маш их хэрэгтэй байдаг. Нэмж дурдахад OCS нь шинэ Object Bucket Claim стандартыг дэмждэг бөгөөд энэ нь програмуудад объектын өгөгдөл хадгалах газрыг шууд ашиглах боломжийг олгодог.

Контейнер дэх виртуал машинууд

Хэрэв та энэ нь хэрхэн ажилладагийг шалгахыг сонирхож байгаа бол OpenShift виртуалчлал нь OpenShift 3.11 ба түүнээс дээш хувилбаруудын нэг хэсэг болох Tech Preview хувилбарт аль хэдийн бэлэн болсон гэдгийг мэдэж аваарай. Одоо байгаа OpenShift захиалгын эзэмшигчид OpenShift виртуалчлалыг ямар ч нэмэлт алхамгүйгээр бүрэн үнэ төлбөргүй ашиглах боломжтой. Энэ нийтлэлийг оруулах үед OpenShift 4.4 болон OpenShift виртуалчлалын 2.3 нь одоо байгаа бөгөөд хэрэв та өмнөх хувилбаруудыг ашиглаж байгаа бол хамгийн сүүлийн үеийн боломжуудыг авахын тулд шинэчлэх хэрэгтэй. OpenShift виртуалчлалын бүрэн дэмжигдсэн хувилбарыг 2020 оны хоёрдугаар хагаст гаргах ёстой.

Дэлгэрэнгүй мэдээлэл авахыг хүсвэл холбогдоно уу OpenShift баримт бичиг суурилуулах зааварчилгаа, үүнд Multis-ийн тохиргооны хэсэг, энэ нь гадаад сүлжээг тохируулах талаар мэдээлэл өгдөг.

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх