Modernong mga aplikasyon sa OpenShift, bahin 3: OpenShift isip development environment ug OpenShift Pipelines

Kumusta sa tanan niining blog! Kini ang ikatulo nga post sa usa ka serye diin gipakita namon kung giunsa ang pag-deploy sa mga modernong aplikasyon sa web sa Red Hat OpenShift.

Modernong mga aplikasyon sa OpenShift, bahin 3: OpenShift isip development environment ug OpenShift Pipelines

Sa miaging duha ka mga post, among gipakita kung giunsa ang pag-deploy sa modernong mga aplikasyon sa web sa pipila lang ka mga lakang ug kung giunsa ang paggamit sa usa ka bag-ong imahe sa S2I kauban ang usa ka off-the-shelf nga imahe sa server sa HTTP, sama sa NGINX, gamit ang mga kadena nga pagtukod aron i-orkestrate ang mga pag-deploy sa produksiyon. .

Karon ipakita namon kung giunsa ang pagpadagan sa usa ka server sa pag-uswag alang sa imong aplikasyon sa platform sa OpenShift ug i-synchronize kini sa lokal nga sistema sa file, ug hisgutan usab kung unsa ang OpenShift Pipelines ug kung giunsa kini magamit ingon usa ka alternatibo sa nalambigit nga mga asembliya.

OpenShift isip usa ka palibot sa pag-uswag

Development workflow

Ingon sa gipahayag na sa unang post, ang kasagaran nga proseso sa pag-uswag alang sa modernong mga aplikasyon sa web usa lamang ka matang sa "development server" nga nagsubay sa mga kausaban sa lokal nga mga file. Kung mahitabo kini, ang pagtukod sa aplikasyon ma-trigger ug dayon kini gi-update sa browser.

Sa kadaghanan sa modernong mga gambalay, ang ingon nga "development server" gitukod sa katugbang nga mga himan sa command line.

Lokal nga pananglitan

Una, atong tan-awon kon sa unsang paagi kini molihok sa diha nga nagdagan sa mga aplikasyon sa lokal. Atong kuhaon ang aplikasyon isip usa ka pananglitan React gikan sa miaging mga artikulo, bisan kung hapit parehas nga mga konsepto sa daloy sa trabaho magamit sa tanan nga uban pang modernong mga balangkas.
Busa, aron masugdan ang "dev server" sa among React nga pananglitan, among isulod ang mosunod nga sugo:

$ npm run start

Unya sa terminal nga bintana atong makita ang usa ka butang nga sama niini:

Modernong mga aplikasyon sa OpenShift, bahin 3: OpenShift isip development environment ug OpenShift Pipelines

Ug ang among aplikasyon magbukas sa default browser:

Modernong mga aplikasyon sa OpenShift, bahin 3: OpenShift isip development environment ug OpenShift Pipelines

Karon, kung maghimo kami mga pagbag-o sa file, ang aplikasyon kinahanglan nga mag-update sa browser.

OK, ang tanan klaro sa pag-uswag sa lokal nga mode, apan unsaon pagkab-ot ang parehas sa OpenShift?

Development server sa OpenShift

Kung mahinumduman nimo, sa miaging post, among gitan-aw ang gitawag nga run phase sa S2I image ug nakita nga sa default, ang serve module maoy responsable sa pagserbisyo sa among web application.

Apan, kon imong tan-awon pag-ayo pagdagan script gikan niana nga pananglitan, kini naglangkob sa $NPM_RUN environment variable, nga nagtugot kanimo sa pagpatuman sa imong sugo.

Pananglitan, mahimo natong gamiton ang nodeshift module aron i-deploy ang atong aplikasyon:

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

Mubo nga sulat: Ang pananglitan sa ibabaw gipamubo aron ihulagway ang kinatibuk-ang ideya.

Dinhi among gidugang ang NPM_RUN environment variable sa among deployment, nga nagsulti sa runtime sa pagpadagan sa yarn start command, nga nagsugod sa React development server sulod sa among OpenShift pod.

Kung imong tan-awon ang log sa usa ka running pod, kini tan-awon sama niini:

Modernong mga aplikasyon sa OpenShift, bahin 3: OpenShift isip development environment ug OpenShift Pipelines

Siyempre, kining tanan walay bisan unsa hangtud nga ma-synchronize nato ang lokal nga code sa code, nga gibantayan usab alang sa mga pagbag-o, apan nagpuyo sa usa ka hilit nga server.

Pag-synchronize sa hilit ug lokal nga code

Maayo na lang, ang nodeshift dali nga makatabang sa pag-synchronize, ug mahimo nimong gamiton ang mando sa pagbantay aron masubay ang mga pagbag-o.

Mao nga pagkahuman namong gipadagan ang mando sa pag-deploy sa development server para sa among aplikasyon, luwas namong magamit ang mosunod nga sugo:

$ npx nodeshift watch

Ingon usa ka sangputanan, usa ka koneksyon ang himuon sa nagdagan nga pod nga among gihimo sa sayo pa, ang pag-synchronize sa among lokal nga mga file sa hilit nga cluster ma-aktibo, ug ang mga file sa among lokal nga sistema magsugod sa pag-monitor alang sa mga pagbag-o.

Busa, kung atong i-update karon ang src/App.js file, ang sistema mo-reaksyon niini nga mga kausaban, kopyaha kini sa hilit nga cluster ug magsugod sa development server, nga mag-update sa atong aplikasyon sa browser.

Aron makompleto ang hulagway, ipakita nato kung unsa ang hitsura niining tibuok nga mga sugo:

$ 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

Ang sugo sa pagbantay usa ka abstraction sa ibabaw sa oc rsync nga sugo, makakat-on ka og dugang kon sa unsang paagi kini molihok dinhi.

Kini usa ka pananglitan alang sa React, apan ang eksaktong parehas nga pamaagi mahimong magamit sa ubang mga balangkas, ibutang lang ang variable sa palibot sa NPM_RUN kung kinahanglan.
 

Mga Openhift nga Pipeline

Modernong mga aplikasyon sa OpenShift, bahin 3: OpenShift isip development environment ug OpenShift Pipelines

Sunod maghisgot kami bahin sa usa ka himan sama sa OpenShift Pipelines ug kung giunsa kini magamit ingon usa ka alternatibo sa mga kadena nga pagtukod.

Unsa ang OpenShift Pipelines

Ang OpenShift Pipelines usa ka cloud-native nga CI/CD nga padayon nga integrasyon ug delivery system nga gidisenyo para sa pag-organisar sa mga pipeline gamit ang Tekton. Ang Tekton usa ka flexible nga open-source nga Kubernetes-native CI/CD framework nga nagtugot kanimo sa pag-automate sa deployment sa lain-laing mga platform (Kubernetes, serverless, virtual machines, ug uban pa) pinaagi sa pagkuha gikan sa underlying layer.

Ang pagsabut niini nga artikulo nanginahanglan pipila ka kahibalo sa Pipelines, busa girekomenda namon nga basahon nimo una opisyal nga libro.

Pag-set up sa imong palibot sa trabaho

Aron makigdula sa mga pananglitan niini nga artikulo, kinahanglan nimo una nga andamon ang imong palibot sa pagtrabaho:

  1. Pag-instalar ug pag-configure sa usa ka cluster sa OpenShift 4. Ang among mga pananglitan naggamit sa CodeReady Containers (CRD) alang niini, mga panudlo sa pag-install nga makit-an dinhi.
  2. Human maandam ang cluster, kinahanglan nimo nga i-install ang Pipeline Operator niini. Ayaw kahadlok, kini sayon, instalar instruksyon dinhi.
  3. Pag-download Tekton CLI (tkn) dinhi.
  4. Pagdalagan ang create-react-app command line tool aron makahimo og aplikasyon nga imong i-deploy (kini usa ka yano nga aplikasyon React).
  5. (Opsyonal) I-clone ang repository aron mapadagan ang pananglitan nga aplikasyon sa lokal nga pag-install sa npm ug dayon pagsugod sa npm.

Ang repositoryo sa aplikasyon aduna usab usa ka k8s folder, nga adunay sulod nga Kubernetes/OpenShift YAMLs nga gigamit sa pag-deploy sa aplikasyon. Adunay mga Buluhaton, ClusterTasks, Mga Kapanguhaan ug Pipelines nga atong mugnaon niini mga tipiganan.

Magsugod na ta

Ang unang lakang alang sa among panig-ingnan mao ang paghimo og bag-ong proyekto sa OpenShift cluster. Tawgon nato kini nga proyekto nga webapp-pipeline ug paghimo niini gamit ang mosunod nga sugo:

$ oc new-project webapp-pipeline

Kini nga ngalan sa proyekto makita sa code sa ulahi, mao nga kung magdesisyon ka nga hingalan kini og lain, ayaw kalimti ang pag-edit sa pananglitan nga code sumala niana. Sugod gikan niini nga punto, dili kita moadto sa ibabaw sa ubos, apan sa ubos: sa ato pa, una natong buhaton ang tanan nga mga sangkap sa conveyor, ug unya ang conveyor mismo.

Busa, una sa tanan...

Mga buluhaton

Maghimo kita og pipila ka mga buluhaton, nga makatabang sa pag-deploy sa aplikasyon sulod sa atong pipeline. Ang unang buluhaton - apply_manifests_task - mao ang responsable sa pag-aplay sa YAML sa mga Kubernetes resources (serbisyo, deployment ug ruta) nga nahimutang sa k8s folder sa among aplikasyon. Ang ikaduha nga buluhaton - update_deployment_task - mao ang responsable sa pag-update sa na-deploy na nga imahe sa usa nga gihimo sa among pipeline.

Ayaw kabalaka kung dili pa kaayo klaro. Sa tinuud, kini nga mga buluhaton sama sa mga utilities, ug tan-awon naton kini sa mas detalyado sa ulahi. Sa pagkakaron, buhata lang nato sila:

$ 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

Dayon, gamit ang tkn CLI command, atong susihon nga ang mga buluhaton nahimo na:

$ tkn task ls

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

Pahinumdom: Kini ang mga lokal nga buluhaton para sa imong proyekto karon.

Mga buluhaton sa cluster

Ang mga buluhaton sa cluster parehas ra sa yano nga mga buluhaton. Kana mao, kini usa ka magamit pag-usab nga koleksyon sa mga lakang nga gihiusa sa usa ka paagi o lain kung nagdagan sa usa ka piho nga buluhaton. Ang kalainan mao nga ang usa ka cluster task anaa bisan asa sulod sa cluster. Aron makita ang lista sa mga buluhaton sa cluster nga awtomatik nga gihimo sa pagdugang sa Pipeline Operator, atong gamiton pag-usab ang tkn CLI command:

$ 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

Karon maghimo kita og duha ka mga buluhaton sa cluster. Ang una maghimo sa S2I nga imahe ug ipadala kini sa internal nga OpenShift registry; ang ikaduha mao ang paghimo sa among imahe base sa NGINX, gamit ang aplikasyon nga among gitukod ingon sulud.

Paghimo ug ipadala ang imahe

Sa paghimo sa unang buluhaton, atong sublion ang nabuhat na nato sa miaging artikulo bahin sa nalambigit nga mga asembliya. Hinumdomi nga gigamit namo ang S2I nga imahe (ubi8-s2i-web-app) sa "pagtukod" sa among aplikasyon, ug natapos sa usa ka imahe nga gitipigan sa OpenShift internal registry. Karon atong gamiton kini nga S2I web app nga imahe sa paghimo og DockerFile para sa atong app ug dayon gamiton ang Buildah aron mahimo ang aktuwal nga pagtukod ug iduso ang resulta nga imahe ngadto sa OpenShift internal registry, tungod kay mao kana ang gibuhat sa OpenShift kung imong i-deploy ang imong mga aplikasyon gamit ang NodeShift .

Giunsa namo pagkahibalo niining tanan, mangutana ka? gikan sa opisyal nga bersyon sa opisyal nga Node.js, gikopya lang namo kini ug giusab para sa among kaugalingon.

Busa, karon atong himoon ang s2i-web-app cluster task:

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

Dili namo kini tukion sa detalye, apan mag-focus lang sa OUTPUT_DIR parameter:

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

Sa kasagaran, kini nga parameter parehas sa pagtukod, diin ang React nagbutang sa gitigum nga sulud. Ang ubang mga gambalay naggamit ug lain-laing mga dalan, pananglitan, sa Ember kini dist. Ang output sa among unang cluster task usa ka hulagway nga adunay HTML, JavaScript, ug CSS nga among nakolekta.

Paghimo usa ka imahe base sa NGINX

Sama sa alang sa among ikaduha nga buluhaton sa cluster, kinahanglan nga magtukod kini usa ka imahe nga nakabase sa NGINX alang kanamo, gamit ang sulud sa aplikasyon nga nahimo na namon. Sa tinuud, kini ang bahin sa miaging seksyon diin among gitan-aw ang mga kadena nga pagtukod.

Aron mahimo kini, kami - parehas ra sa taas - maghimo usa ka cluster task webapp-build-runtime:

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

Kung imong tan-awon ang code sa kini nga mga buluhaton sa cluster, imong makita nga wala kini nagtino sa Git repository nga among gitrabahoan o ang mga ngalan sa mga imahe nga among gimugna. Gitakda ra namo kung unsa gyud ang among gibalhin sa Git, o usa ka piho nga imahe kung diin ang katapusan nga imahe kinahanglan nga ma-output. Mao nga kini nga mga buluhaton sa cluster mahimong magamit pag-usab kung nagtrabaho kauban ang ubang mga aplikasyon.

Ug dinhi kita malipayon nga nagpadayon sa sunod nga punto...

Mga Kapanguhaan

Mao nga, tungod kay, sama sa giingon na namon, ang mga buluhaton sa cluster kinahanglan nga kinatibuk-an kutob sa mahimo, kinahanglan namon nga maghimo mga kapanguhaan nga magamit ingon input (ang Git repository) ug ingon output (ang katapusan nga mga imahe). Ang una nga kapanguhaan nga kinahanglan namon mao ang Git, diin nagpuyo ang among aplikasyon, sama niini:

# 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

Dinhi ang PipelineResource kay type git. Ang yawe sa url sa seksyon sa params nagpunting sa usa ka piho nga repositoryo ug gipiho ang master branch (kini opsyonal, apan gisulat namon kini alang sa pagkakompleto).

Karon kinahanglan namong maghimo usa ka kapanguhaan alang sa imahe diin ang mga sangputanan sa buluhaton sa s2i-web-app maluwas, kini gibuhat sama niini:

# 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

Dinhi ang PipelineResource kay type image, ug ang value sa url parameter nagpunting sa internal OpenShift Image Registry, ilabi na ang nahimutang sa webapp-pipeline namespace. Ayaw kalimti nga usbon kini nga setting kung naggamit ka ug lain nga namespace.

Ug sa katapusan, ang katapusan nga kapanguhaan nga kinahanglan namon mahimo usab nga tipo nga imahe ug kini ang katapusan nga imahe sa NGINX nga magamit sa panahon sa pag-deploy:

# 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

Pag-usab, timan-i nga kini nga kapanguhaan nagtipig sa imahe sa internal nga OpenShift registry sa webapp-pipeline namespace.

Aron mahimo kining tanan nga mga kapanguhaan sa usa ka higayon, gigamit namon ang paghimo nga mando:

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

Mahimo nimong masiguro nga ang mga kahinguhaan nahimo sama niini:

$ tkn resource ls

Conveyor pipeline

Karon nga naa na namo ang tanan nga gikinahanglan nga mga sangkap, mag-assemble kita og pipeline gikan kanila pinaagi sa paghimo niini gamit ang mosunod nga sugo:

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

Apan sa dili pa kita modagan niini nga sugo, atong tan-awon kini nga mga sangkap. Ang una mao ang ngalan:

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

Unya sa spec nga seksyon atong makita ang usa ka timailhan sa mga kapanguhaan nga atong gibuhat sa sayo pa:

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

Gibuhat dayon namo ang mga buluhaton nga kinahanglan makompleto sa among pipeline. Una sa tanan, kinahanglan nga ipatuman ang s2i-web-app nga buluhaton nga nahimo na namon:

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

Kini nga buluhaton nagkinahanglan sa input (gir resource) ug output (built-web-application-image resource) nga mga parameter. Gipasa usab namo kini nga usa ka espesyal nga parameter aron dili kini ma-verify ang TLS tungod kay naggamit kami og mga sertipiko nga gipirmahan sa kaugalingon:

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

Ang sunod nga buluhaton halos pareho ra, dinhi lang ang webapp-build-runtime cluster task nga nabuhat na namo gitawag:

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

Sama sa miaging buluhaton, nagpasa kami sa usa ka kapanguhaan, apan karon kini gitukod-web-application-image (ang output sa among miaging buluhaton). Ug isip usa ka output atong gibutang pag-usab ang imahe. Tungod kay kini nga buluhaton kinahanglan nga ipatuman pagkahuman sa nauna, among idugang ang 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

Ang sunod nga duha ka mga buluhaton ang responsable sa paggamit sa serbisyo, ruta ug pag-deploy sa mga file sa YAML nga nagpuyo sa direktoryo sa k8s sa among aplikasyon sa web, ug alang usab sa pag-update niini nga pag-deploy kung maghimo mga bag-ong imahe. Among gihubit kining duha ka cluster nga buluhaton sa sinugdanan sa artikulo.

Pagsugod sa conveyor

Busa, ang tanan nga mga bahin sa among pipeline gihimo, ug among ipadagan kini sa mosunod nga sugo:

$ tkn pipeline start build-and-deploy-react

Niini nga yugto, ang command line gigamit nga interactive ug kinahanglan nimo nga pilion ang angay nga mga kapanguhaan agig tubag sa matag usa sa mga hangyo niini: alang sa git nga kapanguhaan, pilia ang web-application-repo, unya alang sa una nga kapanguhaan sa imahe, built-web-application -imahe, ug sa katapusan, alang sa ikaduha nga kapanguhaan sa imahe -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

Karon atong susihon ang kahimtang sa pipeline gamit ang mosunod nga sugo:

$ tkn pipeline logs -f

Kung nagsugod na ang pipeline ug na-deploy na ang aplikasyon, mahimo namong hangyoon ang gipatik nga ruta gamit ang mosunod nga sugo:

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

Para sa mas dako nga visualization, mahimo nimong tan-awon ang among pipeline sa Developer mode sa web console sa seksyon Pipelines, ingon sa gipakita sa Fig. 1.

Modernong mga aplikasyon sa OpenShift, bahin 3: OpenShift isip development environment ug OpenShift Pipelines

Fig.1. Pagrepaso sa nagdagan nga mga linya sa tubo.

Ang pag-klik sa nagdagan nga pipeline nagpakita sa dugang nga mga detalye, sama sa gipakita sa Figure 2.

Modernong mga aplikasyon sa OpenShift, bahin 3: OpenShift isip development environment ug OpenShift Pipelines

bugas. 2. Dugang nga impormasyon mahitungod sa pipeline.

Pagkahuman sa dugang nga kasayuran, mahimo nimong makita ang nagdagan nga mga aplikasyon sa pagtan-aw topolohiya, ingon sa gipakita sa Fig.3.

Modernong mga aplikasyon sa OpenShift, bahin 3: OpenShift isip development environment ug OpenShift Pipelines

Fig 3. Gilusad pod.

Ang pag-klik sa lingin sa taas nga tuo nga suok sa icon magbukas sa among aplikasyon, ingon sa gipakita sa Fig. 4.

Modernong mga aplikasyon sa OpenShift, bahin 3: OpenShift isip development environment ug OpenShift Pipelines

bugas. 4. Running React nga aplikasyon.

konklusyon

Mao nga, gipakita namon kung giunsa ang pagpadagan sa usa ka server sa pag-uswag alang sa imong aplikasyon sa OpenShift ug i-synchronize kini sa lokal nga sistema sa file. Gitan-aw usab namo kung unsaon pag-simulate ang usa ka chained-build template gamit ang OpenShift Pipelines. Ang tanan nga mga pananglitan nga mga code gikan sa kini nga artikulo makit-an dinhi.

Dugang nga mga kapanguhaan (EN)

Mga pahibalo sa umaabot nga mga webinar

Nagsugod kami usa ka serye sa mga webinar sa Biyernes bahin sa lumad nga kasinatian gamit ang Red Hat OpenShift Container Platform ug Kubernetes:

Source: www.habr.com

Idugang sa usa ka comment