Mapulogalamu amakono pa OpenShift, gawo 3: OpenShift ngati malo otukuka komanso Mapaipi a OpenShift

Moni nonse pabulogu iyi! Ili ndi positi yachitatu pamndandanda womwe tikuwonetsa momwe mungatumizire mapulogalamu amakono pa Red Hat OpenShift.

Mapulogalamu amakono pa OpenShift, gawo 3: OpenShift ngati malo otukuka komanso Mapaipi a OpenShift

M'mitu iwiri yapitayi, tidawonetsa momwe tingagwiritsire ntchito mapulogalamu amakono a intaneti m'masitepe ochepa chabe ndi momwe mungagwiritsire ntchito chithunzi chatsopano cha S2I pamodzi ndi chithunzi cha seva ya HTTP yapashelufu, monga NGINX, pogwiritsa ntchito maunyolo omangidwa kuti akonze zopangira zopangira. .

Lero tikuwonetsa momwe mungayendetsere seva yachitukuko ya pulogalamu yanu pa OpenShift nsanja ndikuyigwirizanitsa ndi mafayilo amtundu wakomweko, ndikukambirananso zomwe OpenShift Pipelines ali ndi momwe angagwiritsire ntchito ngati njira ina yolumikizirana.

OpenShift ngati malo achitukuko

Kupititsa patsogolo ntchito

Monga tanenera kale mu positi yoyamba, njira yachitukuko ya mapulogalamu amakono a intaneti ndi mtundu wina wa "ma seva a chitukuko" omwe amatsata kusintha kwa mafayilo am'deralo. Zikachitika, ntchito yomanga imayambika ndipo kenako imasinthidwa kukhala osatsegula.

M'zinthu zamakono zamakono, "seva yachitukuko" yotereyi imamangidwa muzitsulo zofananira za mzere wa malamulo.

Chitsanzo chapafupi

Choyamba, tiyeni tiwone momwe izi zimagwirira ntchito poyendetsa mapulogalamu kwanuko. Tiyeni titenge ntchitoyo monga chitsanzo Chitani kuchokera m'nkhani zam'mbuyo, ngakhale kuti malingaliro ofanana a kayendetsedwe ka ntchito amagwira ntchito muzinthu zina zonse zamakono.
Chifukwa chake, kuti tiyambe "dev seva" mu chitsanzo chathu cha React, tiyika lamulo ili:

$ npm run start

Kenako pawindo la terminal tiwona chonchi:

Mapulogalamu amakono pa OpenShift, gawo 3: OpenShift ngati malo otukuka komanso Mapaipi a OpenShift

Ndipo pulogalamu yathu idzatsegulidwa mu msakatuli wokhazikika:

Mapulogalamu amakono pa OpenShift, gawo 3: OpenShift ngati malo otukuka komanso Mapaipi a OpenShift

Tsopano, ngati tisintha fayilo, pulogalamuyo iyenera kusinthidwa mu msakatuli.

Chabwino, zonse zimveka bwino ndi chitukuko mumachitidwe akomweko, koma momwe mungakwaniritsire zomwezo pa OpenShift?

Seva yachitukuko pa OpenShift

Ngati mukukumbukira, mu post yapitayi, tidayang'ana zomwe zimatchedwa gawo lothamanga la chithunzi cha S2I ndipo tidawona kuti mwachisawawa, gawo la seva lili ndi udindo wogwiritsa ntchito pulogalamu yathu yapaintaneti.

Komabe, ngati mutayang'anitsitsa yambitsani script kuchokera pachitsanzo chimenecho, ili ndi $ NPM_RUN zosintha zachilengedwe, zomwe zimakulolani kuti mupereke lamulo lanu.

Mwachitsanzo, titha kugwiritsa ntchito nodeshift module kuti tigwiritse ntchito:

$ npx nodeshift --deploy.env NPM_RUN="yarn start" --dockerImage=nodeshift/ubi8-s2i-web-app

Zindikirani: Chitsanzo chomwe chili pamwambachi chikufupikitsidwa kuti chiwonetsere lingaliro lonse.

Apa tawonjezera kusintha kwa chilengedwe cha NPM_RUN kuti titumize, zomwe zimatiuza nthawi yothamanga kuti tiyambe lamulo loyambira, lomwe limayambitsa seva yachitukuko cha React mkati mwa OpenShift pod.

Ngati muyang'ana chipika cha pod chothamanga, chidzawoneka motere:

Mapulogalamu amakono pa OpenShift, gawo 3: OpenShift ngati malo otukuka komanso Mapaipi a OpenShift

Inde, zonsezi sizidzakhala kanthu mpaka titha kugwirizanitsa kachidindo kameneko ndi code, yomwe imayang'aniridwa kuti isinthe, koma imakhala pa seva yakutali.

Kuyanjanitsa khodi yakutali ndi yapafupi

Mwamwayi, nodeshift imathandizira mosavuta kulumikizana, ndipo mutha kugwiritsa ntchito lamulo la wotchi kuti muwone zosintha.

Chifukwa chake titatha kulamula kuti titumize seva yachitukuko kuti tigwiritse ntchito, titha kugwiritsa ntchito lamulo ili motetezeka:

$ npx nodeshift watch

Chotsatira chake, kugwirizana kudzapangidwa ku pod yothamanga yomwe tidapanga kale pang'ono, kuyanjanitsa kwa mafayilo athu am'deralo ndi gulu lakutali lidzatsegulidwa, ndipo mafayilo pa dongosolo lathu lapafupi ayamba kuyang'aniridwa kuti asinthe.

Chifukwa chake, ngati tsopano tisintha fayilo ya src/App.js, dongosololi lichitapo kanthu pazosinthazi, kuzikopera kugulu lakutali ndikuyambitsa seva yachitukuko, yomwe idzasinthanso ntchito yathu mu msakatuli.

Kuti timalize chithunzichi, tiyeni tiwone momwe malamulo onsewa amawonekera:

$ npx nodeshift --strictSSL=false --dockerImage=nodeshift/ubi8-s2i-web-app --build.env YARN_ENABLED=true --expose --deploy.env NPM_RUN="yarn start" --deploy.port 3000

$ npx nodeshift watch --strictSSL=false

Lamulo la wotchi ndikukakamira pamwamba pa lamulo la oc rsync, mutha kuphunzira zambiri momwe limagwirira ntchito apa.

Ichi chinali chitsanzo cha React, koma njira yomweyo ingagwiritsidwe ntchito ndi zomangira zina, ingoyikani kusintha kwa chilengedwe cha NPM_RUN ngati kuli kofunikira.
 

Mapaipi a Openshift

Mapulogalamu amakono pa OpenShift, gawo 3: OpenShift ngati malo otukuka komanso Mapaipi a OpenShift

Kenako tikambirana za chida ngati OpenShift Pipelines ndi momwe chingagwiritsire ntchito ngati njira ina yomanga unyolo.

Kodi OpenShift Pipelines ndi chiyani

OpenShift Pipelines ndi njira yophatikizira yosalekeza ya CI/CD yopangidwa kuti ikonzekere mapaipi pogwiritsa ntchito Tekton. Tekton ndi mawonekedwe otseguka a Kubernetes-native CI/CD omwe amakulolani kuti muzitha kutumizira pamapulatifomu osiyanasiyana (Kubernetes, makina opanda seva, makina enieni, ndi zina zambiri) pochotsa pansi.

Kumvetsetsa nkhaniyi kumafuna chidziwitso cha Pipelines, kotero tikukulimbikitsani kuti muwerenge kaye buku lovomerezeka.

Kukhazikitsa malo anu antchito

Kusewera ndi zitsanzo zomwe zili m'nkhaniyi, choyamba muyenera kukonzekera malo anu ogwirira ntchito:

  1. Ikani ndi kukonza gulu la OpenShift 4. Zitsanzo zathu zimagwiritsa ntchito CodeReady Containers (CRD) pa izi, malangizo oyika omwe angapezeke. apa.
  2. Gululi litakonzeka, muyenera kukhazikitsa Pipeline Operator pa izo. Musaope, n'zosavuta, malangizo unsembe apa.
  3. Download Tekton CLI (tkn) apa.
  4. Yambitsani chida cha mzere wopanga-react-app kuti mupange pulogalamu yomwe mudzayigwiritse ntchito (iyi ndi ntchito yosavuta. Chitani).
  5. (Mwachidziwitso) Phatikizani chosungirako kuti mugwiritse ntchito chitsanzo kwanuko ndi npm install ndiyeno npm yambani.

Malo ogwiritsira ntchito adzakhalanso ndi chikwatu cha k8s, chomwe chidzakhala ndi Kubernetes/OpenShift YAML zomwe zimagwiritsidwa ntchito kuyika pulogalamuyi. Padzakhala Ntchito, ClusterTasks, Resources ndi Mapaipi omwe tidzapanga mu izi nkhokwe.

Tiyeni tiyambe

Gawo loyamba la chitsanzo chathu ndikupanga pulojekiti yatsopano mugulu la OpenShift. Tiyeni tiyitane projekiti iyi webapp-pipeline ndikuipanga ndi lamulo ili:

$ oc new-project webapp-pipeline

Dzina la pulojekitiyi liziwoneka mu kachidindo mtsogolomo, kotero ngati mutasankha kutchula dzina lina, musaiwale kusintha kachidindo kameneka. Kuyambira pamenepa, sitidzapita pamwamba-pansi, koma pansi-mmwamba: ndiko kuti, tiyamba kupanga zigawo zonse za conveyor, ndiyeno pokhapokha woyendetsa yekha.

Kotero, choyamba ...

Ntchito

Tiyeni tipange ntchito zingapo, zomwe zitithandizira kuyika pulogalamuyo mkati mwa mapaipi athu. Ntchito yoyamba - apply_manifests_task - ili ndi udindo wogwiritsa ntchito YAML ya zinthu za Kubernetes (ntchito, kutumiza ndi njira) zomwe zili mufoda ya k8s ya pulogalamu yathu. Ntchito yachiwiri - update_deployment_task - ili ndi udindo wokonzanso chithunzi chomwe chatumizidwa kale ku chomwe chinapangidwa ndi payipi yathu.

Osadandaula ngati sichinamveke bwino. M'malo mwake, ntchitozi ndi zina ngati zofunikira, ndipo tiwona mwatsatanetsatane pambuyo pake. Pakadali pano, tiyeni tingowapanga:

$ oc create -f https://raw.githubusercontent.com/nodeshift/webapp-pipeline-tutorial/master/tasks/update_deployment_task.yaml
$ oc create -f https://raw.githubusercontent.com/nodeshift/webapp-pipeline-tutorial/master/tasks/apply_manifests_task.yaml

Kenako, pogwiritsa ntchito lamulo la tkn CLI, tiwona ngati ntchitozo zapangidwa:

$ tkn task ls

NAME                AGE
apply-manifests     1 minute ago
update-deployment   1 minute ago

Zindikirani: Izi ndi ntchito zakomweko za polojekiti yanu yamakono.

Ntchito zamagulu

Ntchito zamagulu ndizofanana ndi ntchito zosavuta. Ndiko kuti, ndikusonkhanitsanso masitepe omwe amaphatikizidwa mwanjira imodzi kapena ina pogwira ntchito inayake. Kusiyanitsa ndikuti ntchito yamagulu imapezeka paliponse mkati mwa masango. Kuti muwone mndandanda wa ntchito zamagulu zomwe zimangopangidwa zokha powonjezera Pipeline Operator, tidzagwiritsanso ntchito lamulo la tkn CLI:

$ tkn clustertask ls

NAME                       AGE
buildah                    1 day ago
buildah-v0-10-0            1 day ago
jib-maven                  1 day ago
kn                         1 day ago
maven                      1 day ago
openshift-client           1 day ago
openshift-client-v0-10-0   1 day ago
s2i                        1 day ago
s2i-go                     1 day ago
s2i-go-v0-10-0             1 day ago
s2i-java-11                1 day ago
s2i-java-11-v0-10-0        1 day ago
s2i-java-8                 1 day ago
s2i-java-8-v0-10-0         1 day ago
s2i-nodejs                 1 day ago
s2i-nodejs-v0-10-0         1 day ago
s2i-perl                   1 day ago
s2i-perl-v0-10-0           1 day ago
s2i-php                    1 day ago
s2i-php-v0-10-0            1 day ago
s2i-python-3               1 day ago
s2i-python-3-v0-10-0       1 day ago
s2i-ruby                   1 day ago
s2i-ruby-v0-10-0           1 day ago
s2i-v0-10-0                1 day ago

Tsopano tiyeni tipange ntchito zamagulu awiri. Yoyamba idzapanga chithunzi cha S2I ndikuchitumiza ku registry yamkati ya OpenShift; chachiwiri ndikumanga fano lathu lochokera ku NGINX, pogwiritsa ntchito pulogalamu yomwe tapanga kale monga zokhutira.

Pangani ndi kutumiza chithunzicho

Popanga ntchito yoyamba, tidzabwereza zomwe tachita kale m'nkhani yapitayi ponena za misonkhano yolumikizana. Kumbukirani kuti tidagwiritsa ntchito chithunzi cha S2I (ubi8-s2i-web-app) kuti "timange" pulogalamu yathu, ndikumaliza ndi chithunzi chosungidwa mu kaundula wamkati wa OpenShift. Tsopano tigwiritsa ntchito chithunzi cha pulogalamu ya S2I kuti tipange DockerFile ya pulogalamu yathu kenako kugwiritsa ntchito Buildah kuti mupange zomanga zenizeni ndikukankhira chithunzicho ku kaundula wamkati wa OpenShift, popeza ndizomwe OpenShift imachita mukayika mapulogalamu anu pogwiritsa ntchito NodeShift. .

Tinadziwa bwanji zonsezi, mukufunsa? Kuchokera mtundu wovomerezeka wa Node.js, tinangoikopera n’kuzikonza tokha.

Chifukwa chake, tsopano tiyeni tipange s2i-web-app cluster task:

$ oc create -f https://raw.githubusercontent.com/nodeshift/webapp-pipeline-tutorial/master/clustertasks/s2i-web-app-task.yaml

Sitidzasanthula izi mwatsatanetsatane, koma tingoyang'ana pa OUTPUT_DIR parameter:

params:
      - name: OUTPUT_DIR
        description: The location of the build output directory
        default: build

Mwachikhazikitso, parameter iyi ndi yofanana ndi kumanga, komwe React imayika zomwe zasonkhanitsidwa. Zomangamanga zina zimagwiritsa ntchito njira zosiyanasiyana, mwachitsanzo, ku Ember ndi dist. Kutulutsa kwa gulu lathu loyamba kudzakhala chithunzi chokhala ndi HTML, JavaScript, ndi CSS yomwe tasonkhanitsa.

Pangani chithunzi chotengera NGINX

Ponena za ntchito yathu yamagulu achiwiri, iyenera kutipangira chithunzi chozikidwa pa NGINX, pogwiritsa ntchito zomwe tapanga kale. Kwenikweni, ili ndi gawo la gawo lapitalo pomwe tidayang'ana zomanga zamaketani.

Kuti tichite izi, ife - chimodzimodzi monga pamwambapa - tipanga cluster task webapp-build-runtime:

$ oc create -f https://raw.githubusercontent.com/nodeshift/webapp-pipeline-tutorial/master/clustertasks/webapp-build-runtime-task.yaml

Ngati muyang'ana kachidindo ka ntchito zamaguluwa, mutha kuwona kuti sizikulongosola malo a Git omwe tikugwira nawo ntchito kapena mayina azithunzi zomwe tikupanga. Timangofotokoza zomwe tikusamutsira ku Git, kapena chithunzi china chomwe chithunzi chomaliza chiyenera kutulutsidwa. Ichi ndichifukwa chake ntchito zamaguluzi zitha kugwiritsidwanso ntchito mukamagwira ntchito ndi mapulogalamu ena.

Ndipo apa tikupitilira mokoma mtima ku nsonga yotsatira ...

Zida

Chifukwa chake, popeza, monga tanena kale, ntchito zophatikizira ziyenera kukhala zonse momwe tingathere, tifunika kupanga zinthu zomwe zidzagwiritsidwe ntchito ngati zolowetsa (zosungirako za Git) komanso zotuluka (zithunzi zomaliza). Chida choyamba chomwe timafunikira ndi Git, komwe ntchito yathu imakhala, monga chonchi:

# This resource is the location of the git repo with the web application source
apiVersion: tekton.dev/v1alpha1
kind: PipelineResource
metadata:
  name: web-application-repo
spec:
  type: git
  params:
    - name: url
      value: https://github.com/nodeshift-starters/react-pipeline-example
    - name: revision
      value: master

Apa PipelineResource ndi yamtundu wa git. Kiyi ya url mu gawo la params imaloza kumalo enaake ndikutchula nthambi ya master (izi ndizosankha, koma timazilemba kuti zitheke).

Tsopano tiyenera kupanga chida cha chithunzi chomwe zotsatira za ntchito ya s2i-web-app zidzasungidwa, izi zimachitika motere:

# This resource is the result of running "npm run build",  the resulting built files will be located in /opt/app-root/output
apiVersion: tekton.dev/v1alpha1
kind: PipelineResource
metadata:
  name: built-web-application-image
spec:
  type: image
  params:
    - name: url
      value: image-registry.openshift-image-registry.svc:5000/webapp-pipeline/built-web-application:latest

Apa PipelineResource ndi yamtundu wa chithunzi, ndipo mtengo wa url parameter umalozera ku OpenShift Image Registry, makamaka yomwe ili pa tsamba lapaipi lapaintaneti. Musaiwale kusintha izi ngati mukugwiritsa ntchito dzina lina.

Ndipo pomaliza, chida chomaliza chomwe tingafunikire chidzakhalanso chamtundu wazithunzi ndipo ichi chidzakhala chithunzi chomaliza cha NGINX chomwe chidzagwiritsidwa ntchito potumiza:

# This resource is the image that will be just the static html, css, js files being run with nginx
apiVersion: tekton.dev/v1alpha1
kind: PipelineResource
metadata:
  name: runtime-web-application-image
spec:
  type: image
  params:
    - name: url
      value: image-registry.openshift-image-registry.svc:5000/webapp-pipeline/runtime-web-application:latest

Apanso, zindikirani kuti chidachi chimasunga chithunzicho mu registry yamkati ya OpenShift mupaipi yapaintaneti ya webapp.

Kuti tipange zinthu zonsezi nthawi imodzi, timagwiritsa ntchito kupanga lamulo:

$ oc create -f https://raw.githubusercontent.com/nodeshift/webapp-pipeline-tutorial/master/resources/resource.yaml

Mutha kutsimikiza kuti zida zapangidwa motere:

$ tkn resource ls

Paipi ya conveyor

Tsopano popeza tili ndi zigawo zonse zofunika, tiyeni tisonkhanitse payipi kuchokera kwa iwo popanga ndi lamulo ili:

$ oc create -f https://raw.githubusercontent.com/nodeshift/webapp-pipeline-tutorial/master/pipelines/build-and-deploy-react.yaml

Koma tisanayendetse lamulo ili, tiyeni tiwone zigawo izi. Choyamba ndi dzina:

apiVersion: tekton.dev/v1alpha1
kind: Pipeline
metadata:
  name: build-and-deploy-react

Kenako m'gawo lodziwika bwino tikuwona zomwe tidapanga kale:

spec:
  resources:
    - name: web-application-repo
      type: git
    - name: built-web-application-image
      type: image
    - name: runtime-web-application-image
      type: image

Kenako timapanga ntchito zomwe mapaipi athu ayenera kumaliza. Choyamba, iyenera kuchita ntchito ya s2i-web-app yomwe tapanga kale:

tasks:
    - name: build-web-application
      taskRef:
        name: s2i-web-app
        kind: ClusterTask

Ntchitoyi imatenga zolowetsa (gir resource) ndi zotuluka (zomangidwa-webhu-application-image resource) magawo. Timayipatsanso gawo lapadera kuti isatsimikizire TLS popeza tikugwiritsa ntchito ziphaso zodzisainira tokha:

resources:
        inputs:
          - name: source
            resource: web-application-repo
        outputs:
          - name: image
            resource: built-web-application-image
      params:
        - name: TLSVERIFY
          value: "false"

Ntchito yotsatira ndiyofanana, pokha apa ntchito yamagulu a webapp-build-runtime yomwe tapanga kale imatchedwa:

name: build-runtime-image
    taskRef:
      name: webapp-build-runtime
      kind: ClusterTask

Monga momwe zinalili ndi ntchito yapitayi, timadutsa muzinthu, koma tsopano ndi chithunzi chojambula pa intaneti (zotulutsa za ntchito yathu yapitayi). Ndipo monga zotsatira timayikanso chithunzicho. Popeza ntchitoyi iyenera kuchitidwa itatha yapitayi, timawonjezera runAfter field:

resources:
        inputs:
          - name: image
            resource: built-web-application-image
        outputs:
          - name: image
            resource: runtime-web-application-image
        params:
        - name: TLSVERIFY
          value: "false"
      runAfter:
        - build-web-application

Ntchito ziwiri zotsatirazi ndizogwiritsa ntchito ntchito, njira ndi kutumiza mafayilo a YAML omwe amakhala mu kalozera wa k8s wa pulogalamu yathu yapaintaneti, komanso kukonzanso izi popanga zithunzi zatsopano. Tidafotokozera ntchito ziwiri zamagulu izi kumayambiriro kwa nkhaniyi.

Kuyamba kwa conveyor

Chifukwa chake, magawo onse a mapaipi athu amapangidwa, ndipo tidzayendetsa ndi lamulo ili:

$ tkn pipeline start build-and-deploy-react

Pakadali pano, mzere wamalamulo umagwiritsidwa ntchito molumikizana ndipo muyenera kusankha zofunikira poyankha chilichonse chomwe wapempha: pa git resource, sankhani tsamba-application-repo, kenako pa chithunzi choyambirira, kugwiritsa ntchito intaneti. -image, ndipo pomaliza, yachithunzi chachiwiri -runtime-web-application-image:

? Choose the git resource to use for web-application-repo: web-application-repo (https://github.com/nodeshift-starters/react-pipeline-example)
? Choose the image resource to use for built-web-application-image: built-web-application-image (image-registry.openshift-image-registry.svc:5000/webapp-pipeline/built-web-
application:latest)
? Choose the image resource to use for runtime-web-application-image: runtime-web-application-image (image-registry.openshift-image-registry.svc:5000/webapp-pipeline/runtim
e-web-application:latest)
Pipelinerun started: build-and-deploy-react-run-4xwsr

Tsopano tiyeni tiwone momwe pipeline ilili pogwiritsa ntchito lamulo ili:

$ tkn pipeline logs -f

Pamene mapaipi ayamba ndipo ntchitoyo yatumizidwa, tikhoza kupempha njira yosindikizidwa ndi lamulo ili:

$ oc get route react-pipeline-example --template='http://{{.spec.host}}'

Kuti muwone bwino, mutha kuwona mapaipi athu mu Developer mode of the web console mugawoli Mabomba, monga momwe zasonyezedwera mkuyu. 1.

Mapulogalamu amakono pa OpenShift, gawo 3: OpenShift ngati malo otukuka komanso Mapaipi a OpenShift

Chithunzi 1. Ndemanga zamapaipi oyendetsa.

Kudina paipi yomwe ikuyenda kukuwonetsa zina zowonjezera, monga momwe zasonyezedwera pa Chithunzi 2.

Mapulogalamu amakono pa OpenShift, gawo 3: OpenShift ngati malo otukuka komanso Mapaipi a OpenShift

Mpunga. 2. Zambiri zokhudza payipi.

Pambuyo pazidziwitso zambiri, mutha kuwona mapulogalamu omwe akuyendetsa pamawonekedwe Sayansi ya sayansi, monga momwe tawonetsera mkuyu.3.

Mapulogalamu amakono pa OpenShift, gawo 3: OpenShift ngati malo otukuka komanso Mapaipi a OpenShift

Chithunzi 3. Anayambitsa pod.

Kudina kozungulira pakona yakumanja kwa chithunzi kumatsegula kugwiritsa ntchito kwathu, monga momwe tawonera mkuyu 4.

Mapulogalamu amakono pa OpenShift, gawo 3: OpenShift ngati malo otukuka komanso Mapaipi a OpenShift

Mpunga. 4. Kuthamanga React ntchito.

Pomaliza

Chifukwa chake, tidawonetsa momwe mungayendetsere seva yachitukuko ya pulogalamu yanu pa OpenShift ndikuyigwirizanitsa ndi fayilo yakomweko. Tidayang'ananso momwe tingayesere template yomangidwa ndi unyolo pogwiritsa ntchito OpenShift Pipelines. Zizindikiro zonse zachitsanzo za nkhaniyi zingapezeke apa.

Zowonjezera (EN)

Zilengezo zamawebusayiti omwe akubwera

Tikuyamba ma webinars a Lachisanu okhudzana ndi zomwe adakumana nazo pogwiritsa ntchito Red Hat OpenShift Container Platform ndi Kubernetes:

Source: www.habr.com

Kuwonjezera ndemanga