Контейнерээс дамжуулагч руу: CRI-O нь одоо OpenShift Контейнер Платформ 4 дээр анхдагч болсон

Платформ Red Hat OpenShift контейнер платформ 4 бүтээлийг оновчтой болгох боломжийг танд олгоно контейнер байрлуулах хостуудҮүлэн үйлчилгээ үзүүлэгчдийн дэд бүтцэд, виртуалчлалын платформ дээр эсвэл нүцгэн металл системд орно. Жинхэнэ үүлэн дээр суурилсан платформыг бий болгохын тулд бид ашигласан бүх элементүүдэд хатуу хяналт тавьж, улмаар нарийн төвөгтэй автоматжуулалтын үйл явцын найдвартай байдлыг нэмэгдүүлэх шаардлагатай болсон.

Контейнерээс дамжуулагч руу: CRI-O нь одоо OpenShift Контейнер Платформ 4 дээр анхдагч болсон

Үүний ойлгомжтой шийдэл бол Red Hat Enterprise Linux CoreOS (Red Hat Enterprise Linux-ийн хувилбар) болон CRI-O-г стандарт болгон ашиглах явдал байсан бөгөөд эндээс...

Дарвуулт завины сэдэв нь Кубернетес болон контейнерийн ажлыг тайлбарлахдаа аналоги олоход маш сайн сэдэв тул CoreOS болон CRI-O-ийн шийддэг бизнесийн асуудлын талаар жишээн дээр ярихыг хичээцгээе. Брунелийн бэхэлгээний блок үйлдвэрлэх шинэ бүтээлүүд. 1803 онд Марк Брунел өсөн нэмэгдэж буй Британийн тэнгисийн цэргийн хэрэгцээнд зориулж 100 армийн блок үйлдвэрлэх даалгавар авсан. Армийн блок гэдэг нь далбаат онгоцонд олс бэхлэх зориулалттай бэхэлгээний нэг төрөл юм. 19-р зууны эхэн үе хүртэл эдгээр блокуудыг гараар хийдэг байсан ч Брунел үйлдвэрлэлийг автоматжуулж, машин багаж ашиглан стандартчилагдсан блокуудыг үйлдвэрлэж эхлэв. Энэ процессыг автоматжуулснаар үүссэн блокууд нь бараг ижил, эвдэрсэн тохиолдолд амархан сольж, их хэмжээгээр үйлдвэрлэх боломжтой гэсэн үг юм.

Брунел энэ ажлыг 20 өөр хөлөг онгоцны загвар (Кубернетес хувилбарууд) болон огт өөр далайн урсгал, салхитай таван өөр гаригт (үүл үйлчилгээ үзүүлэгч) хийх ёстой байсан бол төсөөлөөд үз дээ. Нэмж дурдахад, бүх хөлөг онгоцууд (OpenShift кластерууд) ямар гариг ​​дээр навигаци хийж байгаагаас үл хамааран ахмадуудын (кластеруудын ажиллагааг удирддаг операторуудын) үүднээс ижилхэн ажиллахыг шаарддаг. Далайн аналогийг үргэлжлүүлэхийн тулд хөлөг онгоцны ахмадууд хөлөг онгоцондоо ямар төрлийн бэхэлгээний блокуудыг (CRI-O) ашигладаг нь огт хамаагүй - тэдний хувьд хамгийн гол зүйл бол эдгээр блокууд нь бат бөх, найдвартай байх явдал юм.

OpenShift 4 нь үүлэн платформын хувьд бизнесийн маш төстэй сорилттой тулгардаг. Кластер үүсгэх үед, аль нэг зангилаанд алдаа гарсан тохиолдолд, эсвэл кластерыг масштаблах үед шинэ зангилаа үүсэх ёстой. Шинэ зангилаа үүсгэж, эхлүүлэх үед CRI-O зэрэг чухал хост бүрэлдэхүүн хэсгүүдийг зохих ёсоор тохируулах ёстой. Бусад үйлдвэрлэлийн нэгэн адил “түүхий эдийг” эхэнд нь нийлүүлэх ёстой. Усан онгоцны хувьд түүхий эд нь металл, мод юм. Гэсэн хэдий ч OpenShift 4 кластерт контейнер байршуулах хост үүсгэх тохиолдолд та тохиргооны файлууд болон API-аар хангагдсан серверүүдийг оруулах хэрэгтэй. OpenShift нь бүх амьдралын мөчлөгийн туршид шаардлагатай түвшний автоматжуулалтыг хангаж, эцсийн хэрэглэгчдэд шаардлагатай бүтээгдэхүүний дэмжлэгийг санал болгож, платформд оруулсан хөрөнгө оруулалтыг нөхөх болно.

OpenShift 4 нь үүлэн тооцооллын бүх томоохон үйлчилгээ үзүүлэгчид, виртуалчлалын платформууд, тэр ч байтугай нүцгэн металл системүүдэд зориулсан платформын амьдралын мөчлөгийн туршид (4.X хувилбаруудын хувьд) системийг хялбархан шинэчлэх боломжийг олгох үүднээс бүтээгдсэн. Үүнийг хийхийн тулд сольж болох элементүүдийн үндсэн дээр зангилаа үүсгэх ёстой. Кластерт Kubernetes-ийн шинэ хувилбар шаардлагатай үед CoreOS дээрх CRI-O-ийн холбогдох хувилбарыг хүлээн авдаг. CRI-O хувилбар нь шууд Kubernetes-тэй холбогддог тул энэ нь туршилт, алдааг олж засварлах эсвэл дэмжлэг үзүүлэх зорилгоор ямар ч өөрчлөлтийг ихээхэн хялбаршуулдаг. Үүнээс гадна энэ арга нь эцсийн хэрэглэгчид болон Red Hat-ийн зардлыг бууруулдаг.

Энэ нь Kubernetes кластеруудын талаар цоо шинэ сэтгэлгээний арга бөгөөд маш хэрэгтэй, сэтгэл хөдөлгөм шинэ боломжуудыг төлөвлөх үндэс суурийг тавьдаг. CRI-O (Container Runtime Interface - Open Container Initiative, товчилсон CRI-OCI) нь OpenShift-тэй ажиллахад шаардлагатай зангилаа үүсгэх хамгийн амжилттай сонголт болсон. CRI-O нь OpenShift хэрэглэгчдэд өмнө нь ашиглагдаж байсан Docker хөдөлгүүрийг солих болно хэмнэлттэй, тогтвортой, энгийн, уйтгартай – Тийм ээ, та зөв сонссон – Кубернетестэй ажиллахад зориулан бүтээсэн уйтгартай чингэлэг хөдөлгүүр.

Нээлттэй савны ертөнц

Дэлхий задгай чингэлэг рүү шилжих болсоор удаж байна. Кубернетес эсвэл доод түвшний аль нь ч бай, савны стандартыг боловсруулах бүх түвшинд инновацийн экосистемийг бий болгодог.

Энэ бүхэн "Нээлттэй контейнер" санаачилгыг бий болгосноор эхэлсэн 2015 оны зургадугаар сард. Ажлын энэ эхний үе шатанд савны техникийн үзүүлэлтүүд бий болсон зураг и ажиллах цагийн орчин. Энэ нь багаж хэрэгсэл нь нэг стандартыг ашиглах боломжтой болсон контейнерийн зургууд мөн тэдэнтэй ажиллах нэгдсэн хэлбэр. Тодорхойлолтыг дараа нь нэмсэн хуваарилалт, хэрэглэгчдэд хялбар хуваалцах боломжийг олгодог контейнерийн зургууд.

Дараа нь Кубернетес нийгэмлэг нь залгах боломжтой интерфейсийн нэгдсэн стандартыг боловсруулсан Контейнер ажиллуулах интерфэйс (CRI). Үүний ачаар Kubernetes-ийн хэрэглэгчид Docker-ээс гадна контейнертэй ажиллах янз бүрийн хөдөлгүүрүүдийг холбох боломжтой болсон.

Red Hat болон Google-ийн инженерүүд CRI протоколоор Kubelet-ийн хүсэлтийг хүлээн авч чадах чингэлэг хөдөлгүүртэй болох зах зээлийн хэрэгцээг олж харж, дээр дурдсан OCI техникийн үзүүлэлтүүдтэй нийцсэн контейнеруудыг нэвтрүүлсэн. Тэгэхээр OCID гарч ирэв. Гэхдээ уучлаарай, бид энэ материалыг CRI-O-д зориулна гэж хэлээгүй гэж үү? Үнэн хэрэгтээ энэ нь зөвхөн хувилбарын дагуу юм хувилбар 1.0 төслийн нэрийг CRI-O гэж өөрчилсөн.

Зураг: арван тав.

Контейнерээс дамжуулагч руу: CRI-O нь одоо OpenShift Контейнер Платформ 4 дээр анхдагч болсон

CRI-O болон CoreOS бүхий инноваци

OpenShift 4 платформ гарч ирснээр энэ нь өөрчлөгдсөн чингэлэг хөдөлгүүр, платформ дээр анхдагчаар ашиглагддаг бөгөөд Docker-ийг CRI-O-оор сольсон бөгөөд Кубернетестэй зэрэгцэн хөгжиж буй контейнер ажиллуулах зардал багатай, тогтвортой, энгийн бөгөөд уйтгартай орчинг санал болгож байна. Энэ нь кластерийн дэмжлэг болон тохиргоог ихээхэн хялбаршуулдаг. OpenShift 4-т чингэлэг хөдөлгүүр болон хостын тохиргоо, тэдгээрийн удирдлага автоматжуулсан болно.

Хүлээгээрэй, энэ яаж байна?

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

Kubernetes нь хэрэглэгчдэд хүссэн төлөвийг тодорхойлж, ашиглах замаар програмуудыг удирдах боломжийг үргэлж олгодог хянагчууд, бодит төлөв нь зорилтот төлөвтэй аль болох ойр байхыг баталгаажуулах. Энэ зорилтот төлөв ба бодит төрийн хандлага хөгжил, үйл ажиллагааны аль алиных нь үүднээс асар их боломжийг нээж өгдөг. Хөгжүүлэгчид шаардлагатай төлөвийг тодорхойлох боломжтой дамжуулаарай YAML эсвэл JSON файл хэлбэрээр оператор руу илгээж, дараа нь оператор үйлдвэрлэлийн орчинд шаардлагатай програмын жишээг үүсгэж болох бөгөөд энэ инстанцийн үйл ажиллагааны төлөв нь заасантай бүрэн нийцэх болно.

Платформ дээр Операторуудыг ашигласнаар OpenShift 4 нь RHEL CoreOS болон CRI-O-ийн удирдлагад энэхүү шинэ парадигмыг (тогтоосон ба бодит төлөвийн ойлголтыг ашиглан) авчирдаг. Үйлдлийн систем ба контейнер хөдөлгүүрийн хувилбаруудыг тохируулах, удирдах ажлыг автоматжуулсан болно. Машины тохиргооны оператор (MCO). MCO нь кластерийн администраторын ажлыг ихээхэн хялбарчилж, үндсэндээ суулгацын сүүлийн үе шатууд, түүнчлэн суулгацын дараах дараагийн үйлдлүүдийг (хоёр дахь өдрийн ажиллагаа) автоматжуулдаг. Энэ бүхэн нь OpenShift 4-ийг жинхэнэ үүл платформ болгодог. Бид энэ талаар хэсэг хугацааны дараа ярих болно.

Ажиллаж байгаа савнууд

Хэрэглэгчид CRI-O хөдөлгүүрийг OpenShift платформ дээр 3.7 хувилбараас хойш Tech Preview төлөвт, 3.9 хувилбараас эхлэн General Available төлөвт (одоогоор дэмжигдэж байна) ашиглах боломжтой болсон. Нэмж дурдахад Red Hat-ийг их хэмжээгээр ашигладаг Үйлдвэрлэлийн ачааллыг ажиллуулахад зориулсан CRI-O 3.10 хувилбараас хойш OpenShift Online дээр. Энэ бүхэн нь CRI-O дээр ажиллаж буй багт Кубернетесийн томоохон кластерууд дээр савыг бөөнөөр нь хөөргөх арвин туршлага хуримтлуулах боломжийг олгосон. Кубернетес CRI-O-г хэрхэн ашигладаг талаар үндсэн ойлголттой болохын тулд архитектур хэрхэн ажилладагийг харуулсан дараах зургийг харцгаая.

Цагаан будаа. 2. Кубернетес кластерт савнууд хэрхэн ажилладаг

Контейнерээс дамжуулагч руу: CRI-O нь одоо OpenShift Контейнер Платформ 4 дээр анхдагч болсон

CRI-O нь шинэ зангилаа эхлүүлэх болон OpenShift платформын шинэ хувилбаруудыг гаргах үед дээд түвшнийг бүхэлд нь синхрончлох замаар шинэ контейнер хост үүсгэх ажлыг хялбаршуулдаг. Платформыг бүхэлд нь шинэчлэх нь гүйлгээний шинэчлэлт/буцах боломжийг олгохоос гадна чингэлэгийн сүүлний цөм, чингэлэг хөдөлгүүр, зангилаа (Кубелец) болон Кубернетес Мастер зангилааны хоорондох хамаарал үүсэхээс сэргийлдэг. Бүх платформын бүрэлдэхүүн хэсгүүдийг хяналт, хувилбараар нь төвлөрсөн байдлаар удирдсанаар А төлөвөөс Б төлөв рүү үргэлж тодорхой зам байдаг. Энэ нь шинэчлэлтийн процессыг хялбарчилж, аюулгүй байдлыг сайжруулж, гүйцэтгэлийн тайланг сайжруулж, шинэ хувилбаруудыг шинэчлэх, суулгах зардлыг бууруулахад тусалдаг. .

Орлуулах элементүүдийн хүчийг харуулах

Өмнө дурьдсанчлан OpenShift 4 дээрх контейнерийн хост болон контейнерийн хөдөлгүүрийг удирдахын тулд Machine Config Operator-ийг ашиглах нь Kubernetes платформ дээр өмнө нь боломжгүй байсан автоматжуулалтын шинэ түвшний боломжийг олгодог. Шинэ боломжуудыг харуулахын тулд бид crio.conf файлд хэрхэн өөрчлөлт оруулахыг харуулах болно. Нэр томъёонд төөрөгдүүлэхгүйн тулд үр дүнд анхаарлаа төвлөрүүлэхийг хичээ.

Эхлээд контейнер ажиллах цагийн тохиргоо гэж нэрлэгддэг зүйлийг үүсгэцгээе - Container Runtime Config. Үүнийг CRI-O-ийн тохиргоог төлөөлдөг Kubernetes нөөц гэж бодоорой. Бодит байдал дээр энэ нь OpenShift кластерын нэг хэсэг болгон RHEL CoreOS машинд суулгасан аливаа тохиргоо болох MachineConfig нэртэй зүйлийн тусгай хувилбар юм.

ContainerRuntimeConfig гэж нэрлэгддэг энэхүү тусгай нөөцийг кластерын администраторуудад CRI-O-г тохируулахад хялбар болгох зорилгоор бүтээсэн. Энэ хэрэгсэл нь хангалттай хүчтэй тул зөвхөн MachineConfigPool тохиргооноос хамааран тодорхой цэгүүдэд ашиглах боломжтой. Үүнийг ижил зорилготой машинуудын бүлэг гэж төсөөлөөд үз дээ.

Сүүлийн хоёр мөрийг /etc/crio/crio.conf файлд өөрчлөх гэж буйг анхаарна уу. Эдгээр хоёр мөр нь crio.conf файл дахь мөрүүдтэй маш төстэй бөгөөд тэдгээр нь:

vi ContainerRuntimeConfig.yaml

Дүгнэлт:

apiVersion: machineconfiguration.openshift.io/v1
kind: ContainerRuntimeConfig
metadata:
 name: set-log-and-pid
spec:
 machineConfigPoolSelector:
   matchLabels:
     debug-crio: config-log-and-pid
 containerRuntimeConfig:
   pidsLimit: 2048
   logLevel: debug

Одоо энэ файлыг Kubernetes кластер руу түлхэж, үнэхээр үүсгэгдсэн эсэхийг шалгацгаая. Үйл ажиллагаа нь бусад Kubernetes нөөцтэй яг адилхан гэдгийг анхаарна уу:

oc create -f ContainerRuntimeConfig.yaml
oc get ContainerRuntimeConfig

Дүгнэлт:

NAME              AGE
set-log-and-pid   22h

Бид ContainerRuntimeConfig-ийг үүсгэсний дараа бид энэ тохиргоог кластерын тодорхой бүлэг машинд хэрэглэхийг хүсэж байгаагаа Кубернетес рүү дохио өгөхийн тулд MachineConfigPools-ийн аль нэгийг өөрчлөх хэрэгтэй. Энэ тохиолдолд бид мастер зангилааны хувьд MachineConfigPool-г өөрчлөх болно:

oc edit MachineConfigPool/master

Дүгнэлт (тодорхой болгохын тулд гол мөн чанарыг нь үлдээсэн болно):

...
metadata:
 creationTimestamp: 2019-04-10T23:42:28Z
 generation: 1
 labels:
   debug-crio: config-log-and-pid
   operator.machineconfiguration.openshift.io/required-for-upgrade: ""
...

Энэ үед МСО нь кластерт зориулж шинэ crio.conf файл үүсгэж эхэлдэг. Энэ тохиолдолд бүрэн дууссан тохиргооны файлыг Kubernetes API ашиглан үзэх боломжтой. ContainerRuntimeConfig бол MachineConfig-ийн тусгай хувилбар учраас бид MachineConfigs-ийн холбогдох мөрүүдийг харснаар үр дүнг харах боломжтой гэдгийг санаарай.

oc get MachineConfigs | grep rendered

Дүгнэлт:

rendered-master-c923f24f01a0e38c77a05acfd631910b                  4.0.22-201904011459-dirty 2.2.0 16h
rendered-master-f722b027a98ac5b8e0b41d71e992f626                  4.0.22-201904011459-dirty 2.2.0 4m
rendered-worker-9777325797fe7e74c3f2dd11d359bc62                  4.0.22-201904011459-dirty 2.2.0 16h

Мастер зангилааны тохиргооны файл нь анхны тохиргооноос шинэ хувилбар байсныг анхаарна уу. Үүнийг үзэхийн тулд дараах тушаалыг ажиллуулна уу. Энэ нь магадгүй Кубернетесийн түүхэн дэх хамгийн шилдэг нэг тоглогчдын нэг гэдгийг бид тэмдэглэж байна.

python3 -c "import sys, urllib.parse; print(urllib.parse.unquote(sys.argv[1]))" $(oc get MachineConfig/rendered-master-f722b027a98ac5b8e0b41d71e992f626 -o YAML | grep -B4 crio.conf | grep source | tail -n 1 | cut -d, -f2) | grep pid

Дүгнэлт:

pids_limit = 2048

Одоо тохиргоог бүх мастер зангилаанд ашигласан эсэхийг шалгацгаая. Эхлээд бид кластер дахь зангилааны жагсаалтыг авна.

oc get node | grep master

Output:

ip-10-0-135-153.us-east-2.compute.internal   Ready master 23h v1.12.4+509916ce1

ip-10-0-154-0.us-east-2.compute.internal     Ready master 23h v1.12.4+509916ce1

ip-10-0-166-79.us-east-2.compute.internal    Ready master 23h v1.12.4+509916ce1

Одоо суулгасан файлыг харцгаая. ContainerRuntimeConfig нөөцөд бидний заасан pid болон дибаг хийх удирдамжийн шинэ утгуудаар файл шинэчлэгдсэнийг та харах болно. Дэгжин байдал өөрөө:

oc debug node/ip-10-0-135-153.us-east-2.compute.internal — cat /host/etc/crio/crio.conf | egrep 'debug||pid’

Дүгнэлт:

...
pids_limit = 2048
...
log_level = "debug"
...

Кластерт хийсэн эдгээр бүх өөрчлөлтийг SSH ажиллуулахгүйгээр хийсэн. Kuberentes мастер зангилаа руу нэвтрэх замаар бүх ажлыг хийсэн. Өөрөөр хэлбэл, эдгээр шинэ параметрүүдийг зөвхөн мастер зангилаанууд дээр тохируулсан болно. Ажилчны зангилаа өөрчлөгдөөгүй бөгөөд энэ нь сольж болох элементүүдтэй контейнерийн хостууд болон чингэлэг хөдөлгүүртэй холбоотой тодорхой болон бодит төлөвийг ашиглах Кубернетес аргачлалын ашиг тусыг харуулж байна.

Дээрх жишээ нь үйлдвэрлэлийн гурван зангилаа бүхий жижиг OpenShift Container Platform 4 кластер эсвэл 3000 зангилаа бүхий асар том үйлдвэрлэлийн кластерт өөрчлөлт хийх чадварыг харуулж байна. Ямар ч тохиолдолд ажлын хэмжээ ижил бөгөөд маш бага байх болно - ContainerRuntimeConfig файлыг тохируулаад MachineConfigPool доторх нэг шошгыг өөрчлөхөд л хангалттай. Та үүнийг амьдралынхаа туршид Kubernetes-ийг ажиллуулж буй OpenShift Container Platform 4.X-ийн аль ч хувилбараар хийж болно.

Технологийн компаниуд ихэвчлэн маш хурдан хөгжиж байгаа тул бид яагаад үндсэн бүрэлдэхүүн хэсгүүдийн зарим технологийг сонгохдоо тайлбарлаж чадахгүй. Чингэлэг хөдөлгүүрүүд нь түүхэндээ хэрэглэгчид шууд харьцдаг бүрэлдэхүүн хэсэг байсаар ирсэн. Савны алдар нэр нь чингэлэг хөдөлгүүр гарч ирснээр аяндаа эхэлсэн тул хэрэглэгчид үүнийг ихэвчлэн сонирхдог. Энэ нь Red Hat-ийг CRI-O-г сонгосон бас нэг шалтгаан юм. Контейнерууд одоо найрал хөгжимд анхаарлаа хандуулж хөгжиж байгаа бөгөөд CRI-O нь OpenShift 4-тэй ажиллахад хамгийн сайн туршлагыг өгдөг болохыг бид олж мэдсэн.

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

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