Aikace-aikace na zamani akan OpenShift Sashe na 3: OpenShift azaman yanayin haɓakawa da Bututun OpenShift

Sannu kowa a wannan shafi! Wannan shine matsayi na uku a cikin jerin abubuwan da muke nuna yadda ake tura aikace-aikacen gidan yanar gizo na zamani akan Red Hat OpenShift.

Aikace-aikace na zamani akan OpenShift Sashe na 3: OpenShift azaman yanayin haɓakawa da Bututun OpenShift

A cikin posts guda biyu da suka gabata, mun nuna yadda ake tura aikace-aikacen gidan yanar gizo na zamani a cikin ƴan matakai kaɗan da yadda ake amfani da sabon hoton S2I tare da hoton uwar garken HTTP mara amfani, kamar NGINX, ta yin amfani da ginin sarƙaƙƙiya don tsara ayyukan samarwa. .

A yau za mu nuna yadda ake gudanar da uwar garken ci gaba don aikace-aikacenku akan dandalin OpenShift da daidaita shi tare da tsarin fayil na gida, sannan kuma muyi magana game da menene OpenShift Pipelines da kuma yadda za'a iya amfani da su azaman madadin manyan majalisai masu alaƙa.

OpenShift azaman yanayin ci gaba

Gudun ayyukan ci gaba

Kamar yadda aka fada a baya farkon post, Tsarin ci gaba na yau da kullun don aikace-aikacen gidan yanar gizo na zamani shine kawai wani nau'in "sabar ci gaba" wanda ke bin sauye-sauye zuwa fayilolin gida. Lokacin da suka faru, ginin aikace-aikacen yana kunnawa sannan a sabunta shi zuwa mai bincike.

A yawancin tsarin zamani, irin wannan "sabar ci gaba" an gina shi a cikin kayan aikin layin umarni masu dacewa.

Misali na gida

Da farko, bari mu ga yadda wannan ke aiki yayin gudanar da aikace-aikacen gida. Bari mu dauki aikace-aikacen a matsayin misali Sake amsa daga kasidun da suka gabata, kodayake kusan ra'ayoyin tafiyar aiki iri ɗaya suna amfani da su a cikin duk sauran tsarin zamani.
Don haka, don fara "dev uwar garken" a cikin misalin React ɗinmu, za mu shigar da umarni mai zuwa:

$ npm run start

Sa'an nan a cikin Terminal taga za mu ga wani abu kamar haka:

Aikace-aikace na zamani akan OpenShift Sashe na 3: OpenShift azaman yanayin haɓakawa da Bututun OpenShift

Kuma aikace-aikacen mu zai buɗe a cikin tsoho browser:

Aikace-aikace na zamani akan OpenShift Sashe na 3: OpenShift azaman yanayin haɓakawa da Bututun OpenShift

Yanzu, idan muka yi canje-canje ga fayil ɗin, aikace-aikacen yakamata ya sabunta a cikin mai binciken.

Yayi, komai a bayyane yake tare da haɓakawa a cikin yanayin gida, amma ta yaya ake samun iri ɗaya akan OpenShift?

uwar garken haɓakawa akan OpenShift

Idan kun tuna, in post na baya, Mun kalli abin da ake kira lokacin gudu na hoton S2I kuma mun ga cewa ta tsohuwa, tsarin hidimar yana da alhakin yin hidimar aikace-aikacen yanar gizon mu.

Duk da haka, idan kun yi nazari sosai gudanar da rubutun daga wannan misalin, yana ɗauke da canjin yanayi $NPM_RUN, wanda ke ba ka damar aiwatar da umarninka.

Misali, zamu iya amfani da tsarin nodeshift don tura aikace-aikacen mu:

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

Lura: Misalin da ke sama an gajarta shi ne don kwatanta ra'ayin gaba ɗaya.

Anan mun ƙara canjin yanayi na NPM_RUN zuwa tura mu, wanda ke nuna lokacin aiki don gudanar da umarnin fara yarn, wanda ke fara sabar ci gaban React a cikin kwas ɗin mu na OpenShift.

Idan ka duba gunkin kwafsa mai gudu, zai yi kama da haka:

Aikace-aikace na zamani akan OpenShift Sashe na 3: OpenShift azaman yanayin haɓakawa da Bututun OpenShift

Tabbas, duk wannan ba zai zama kome ba har sai mun iya aiki tare da lambar gida tare da lambar, wanda kuma ana kula da shi don canje-canje, amma yana zaune a kan uwar garken nesa.

Aiki tare na nesa da lambar gida

Abin farin ciki, nodeshift na iya taimakawa tare da aiki tare cikin sauƙi, kuma kuna iya amfani da umarnin agogo don bin canje-canje.

Don haka bayan mun gudanar da umarni don tura uwar garken ci gaba don aikace-aikacen mu, za mu iya amfani da umarnin mai zuwa lafiya:

$ npx nodeshift watch

A sakamakon haka, za a haɗa haɗin kai zuwa kundi mai gudana wanda muka ƙirƙira kadan a baya, za a kunna aiki tare da fayilolin gida tare da gungu mai nisa, kuma za a fara sa ido kan fayilolin da ke cikin tsarin gida don canje-canje.

Saboda haka, idan yanzu mun sabunta fayil ɗin src/App.js, tsarin zai amsa waɗannan canje-canje, kwafa su zuwa gungu mai nisa kuma ya fara sabar ci gaba, wanda zai sabunta aikace-aikacen mu a cikin mai binciken.

Don kammala hoton, bari mu nuna yadda waɗannan umarni duka suka yi kama:

$ 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

Umurnin agogo wani abu ne a saman umarnin oc rsync, zaku iya ƙarin koyo game da yadda yake aiki a nan.

Wannan misali ne don React, amma ana iya amfani da ainihin hanyar guda ɗaya tare da sauran tsarin, kawai saita canjin yanayin NPM_RUN kamar yadda ya cancanta.

Buɗaɗɗen bututun mai

Aikace-aikace na zamani akan OpenShift Sashe na 3: OpenShift azaman yanayin haɓakawa da Bututun OpenShift

Na gaba za mu yi magana game da kayan aiki kamar OpenShift Pipelines da kuma yadda za a iya amfani da shi azaman madadin ginin sarƙoƙi.

Menene OpenShift Pipelines

OpenShift Pipelines shine CI / CD mai ci gaba da haɗin kai da tsarin bayarwa wanda aka tsara don tsara bututun ta amfani da Tekton. Tekton shine tsarin buɗe tushen Kubernetes-native CI / CD wanda ke ba ku damar sarrafa aiki da kai akan dandamali daban-daban (Kubernetes, marasa sabar, injunan kama-da-wane, da sauransu) ta hanyar cirewa daga ƙasan ƙasa.

Fahimtar wannan labarin yana buƙatar ɗan ilimin Pipelines, don haka muna ba da shawarar ku fara karantawa littafin karatu na hukuma.

Kafa yanayin aikin ku

Don yin wasa da misalan wannan labarin, da farko kuna buƙatar shirya yanayin aikin ku:

  1. Shigar kuma saita gungu na OpenShift 4. Misalan mu suna amfani da CodeReady Containers (CRD) don wannan, umarnin shigarwa wanda za'a iya samo shi. a nan.
  2. Bayan an shirya gungu, kuna buƙatar shigar da Operator Pipeline akansa. Kada ku ji tsoro, yana da sauƙi, umarnin shigarwa a nan.
  3. Zazzagewa Farashin CLI (tkn) a nan.
  4. Gudanar da kayan aikin layin umarni na Create-react-app don ƙirƙirar aikace-aikacen da za ku tura (wannan aikace-aikace ne mai sauƙi Sake amsa).
  5. (Na zaɓi) Rufe ma'ajiyar don gudanar da aikace-aikacen misali a gida tare da shigar npm sannan npm farawa.

Ma'ajiyar aikace-aikacen kuma za ta sami babban fayil na k8s, wanda zai ƙunshi Kubernetes/OpenShift YAMLs da ake amfani da su don tura aikace-aikacen. Za a sami Ayyuka, Ayyukan Cluster, Albarkatu da Bututun da za mu ƙirƙira a cikin wannan wuraren ajiya.

Mu fara

Mataki na farko don misalinmu shine ƙirƙirar sabon aiki a cikin tarin OpenShift. Bari mu kira wannan aikin webapp-pipeline kuma ƙirƙira shi tare da umarni mai zuwa:

$ oc new-project webapp-pipeline

Wannan sunan aikin zai bayyana a cikin lambar daga baya, don haka idan kun yanke shawarar sanya masa wani abu dabam, kar ku manta da gyara lambar misali daidai. Tun daga wannan lokacin, ba za mu je sama zuwa ƙasa ba, amma ƙasa zuwa sama: wato, da farko za mu ƙirƙiri dukkan abubuwan da ke cikin na'urar, sannan sai na'urar da kanta.

Don haka, da farko ...

Ayyuka

Bari mu ƙirƙiri wasu ayyuka guda biyu, waɗanda za su taimaka sanya aikace-aikacen cikin bututunmu. Aikin farko - apply_manifests_task - shine ke da alhakin aiwatar da YAML na waɗannan albarkatun Kubernetes (sabis, turawa da hanya) waɗanda ke cikin babban fayil ɗin k8s na aikace-aikacen mu. Aiki na biyu - update_deployment_task - shine alhakin sabunta hoton da aka riga aka tura zuwa wanda bututunmu ya ƙirƙira.

Kada ku damu idan har yanzu ba a bayyana sosai ba. A gaskiya ma, waɗannan ayyuka wani abu ne kamar kayan aiki, kuma za mu duba su dalla-dalla kadan daga baya. A yanzu, bari kawai mu ƙirƙira su:

$ 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

Sannan, ta amfani da umarnin tkn CLI, za mu bincika cewa an ƙirƙiri ayyukan:

$ tkn task ls

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

Lura: Waɗannan ayyuka ne na gida don aikin ku na yanzu.

Ayyukan tari

Ayyukan tari suna daidai da ayyuka masu sauƙi. Wato, tarin matakai ne da za a sake amfani da su waɗanda aka haɗa ta hanya ɗaya ko wata yayin gudanar da takamaiman aiki. Bambanci shi ne cewa aikin tari yana samuwa a ko'ina cikin gungu. Don ganin jerin ayyukan gungu waɗanda aka ƙirƙira ta atomatik lokacin ƙara Mai sarrafa Pipeline, za mu sake amfani da umarnin 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

Yanzu bari mu ƙirƙiri ayyukan tari guda biyu. Na farko zai samar da hoton S2I kuma aika shi zuwa rajista na ciki na OpenShift; na biyu shine gina hotonmu akan NGINX, ta amfani da aikace-aikacen da muka riga muka gina a matsayin abun ciki.

Ƙirƙiri kuma aika hoton

Lokacin ƙirƙirar ɗawainiyar farko, za mu maimaita abin da muka riga muka yi a cikin labarin da ya gabata game da majalissar da aka haɗa. Ka tuna cewa mun yi amfani da hoton S2I (ubi8-s2i-web-app) don "gina" aikace-aikacen mu, kuma mun ƙare tare da hoton da aka adana a cikin rajista na ciki na OpenShift. Yanzu za mu yi amfani da wannan hoton yanar gizon S2I don ƙirƙirar DockerFile don app ɗinmu sannan mu yi amfani da Buildah don yin ainihin ginin kuma tura sakamakon da aka samu zuwa rajista na ciki na OpenShift, tunda abin da OpenShift ke yi kenan lokacin da kuke tura aikace-aikacenku ta amfani da NodeShift. .

Ta yaya muka san duk wannan, ka tambaya? Daga sigar hukuma ta Node.js, kawai mun kwafi kuma muka gyara wa kanmu.

Don haka, yanzu bari mu ƙirƙiri aikin gungu na s2i-web-app:

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

Ba za mu yi nazarin wannan dalla-dalla ba, amma za mu mai da hankali ne kawai ga ma'aunin OUTPUT_DIR:

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

Ta hanyar tsoho, wannan siga yana daidai da ginawa, wanda shine inda React ke sanya abun cikin da aka haɗa. Wasu ginshiƙai suna amfani da hanyoyi daban-daban, misali, a cikin Ember disst. Fitowar aikin gungu na farko zai zama hoto mai ɗauke da HTML, JavaScript, da CSS da muka tattara.

Gina hoto akan NGINX

Dangane da aikin gungu na biyu, yakamata ya gina mana hoto na tushen NGINX, ta amfani da abun cikin aikace-aikacen da muka riga muka gina. Mahimmanci, wannan shine ɓangaren sashin da ya gabata inda muka kalli ginin sarƙoƙi.

Don yin wannan, mu - daidai da na sama - za mu ƙirƙiri aikin gungu webapp-build-runtime:

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

Idan ka kalli lambar waɗannan ayyukan tari, za ka ga cewa bai fayyace ma'ajin Git da muke aiki da su ba ko sunayen hotunan da muke ƙirƙira. Muna ƙayyade ainihin abin da muke turawa zuwa Git, ko wani hoton da ya kamata a fitar da hoton ƙarshe. Shi ya sa za a iya sake amfani da waɗannan ayyukan tari yayin aiki tare da wasu aikace-aikace.

Kuma a nan cikin alheri za mu ci gaba zuwa batu na gaba ...

Resources

Don haka, tun da, kamar yadda muka faɗa kawai, ayyukan gungu ya kamata su kasance gabaɗaya gwargwadon yiwuwa, muna buƙatar ƙirƙirar albarkatun da za a yi amfani da su azaman shigarwa (majigin Git) kuma azaman fitarwa (hotunan ƙarshe). Tushen farko da muke buƙata shine Git, inda aikace-aikacenmu yake, wani abu kamar haka:

# 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

Anan PipelineResource nau'in git ne. Maɓallin url a cikin sashin params yana nuni zuwa takamaiman wurin ajiya kuma yana ƙayyadaddun reshen babban (wannan zaɓi ne, amma mun rubuta shi don cikawa).

Yanzu muna buƙatar ƙirƙirar hanya don hoton inda za a adana sakamakon aikin s2i-web-app, ana yin haka kamar haka:

# 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

Anan PipelineResource na nau'in hoto ne, kuma ƙimar ma'aunin url yana nuna Rubutun Hoto na OpenShift na ciki, musamman wanda ke cikin sararin sunan bututun webapp. Kar a manta da canza wannan saitin idan kuna amfani da wani wuri na daban.

Kuma a ƙarshe, albarkatun ƙarshe da muke buƙata kuma za su kasance na nau'in hoto kuma wannan shine hoton NGINX na ƙarshe wanda za'a yi amfani dashi yayin turawa:

# 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

Bugu da ƙari, lura cewa wannan albarkatun yana adana hoton a cikin rajista na OpenShift na ciki a cikin bututun gidan yanar gizo.

Don ƙirƙirar duk waɗannan albarkatun a lokaci ɗaya, muna amfani da umarnin ƙirƙira:

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

Kuna iya tabbatar da cewa an ƙirƙiri albarkatun kamar haka:

$ tkn resource ls

Mai jigilar bututu

Yanzu da muke da duk abubuwan da suka dace, bari mu tara bututu daga gare su ta hanyar ƙirƙirar shi tare da umarni mai zuwa:

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

Amma kafin mu aiwatar da wannan umarni, bari mu kalli waɗannan abubuwan. Na farko shine sunan:

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

Sa'an nan a cikin takamaiman sashe muna ganin alamar albarkatun da muka ƙirƙira a baya:

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

Daga nan sai mu kirkiro ayyukan da bututunmu ke bukatar kammalawa. Da farko, dole ne ta aiwatar da aikin s2i-web-app da muka riga muka ƙirƙira:

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

Wannan aikin yana ɗaukar matakan shigarwa (gir resource) da fitarwa (gina-web-application-image albarkatun) sigogi. Muna kuma ƙaddamar da shi wani siga na musamman don kada ya tabbatar da TLS tunda muna amfani da takaddun shaida na kanmu:

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

Aiki na gaba kusan iri daya ne, anan kawai aikin gungu na webapp-build-runtime da muka riga muka ƙirƙira ana kiransa:

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

Kamar yadda yake tare da aikin da ya gabata, muna wucewa a cikin kayan aiki, amma yanzu an gina shi-hoton aikace-aikacen yanar gizo (fitowar aikinmu na baya). Kuma a matsayin fitarwa mun sake saita hoton. Tun da dole ne a aiwatar da wannan aikin bayan na baya, muna ƙara filin runAfter:

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

Ayyuka guda biyu na gaba suna da alhakin amfani da sabis, hanya da tura fayilolin YAML waɗanda ke zaune a cikin kundin tsarin k8s na aikace-aikacen gidan yanar gizon mu, da kuma sabunta wannan turawa yayin ƙirƙirar sabbin hotuna. Mun ayyana waɗannan ayyukan tari guda biyu a farkon labarin.

Fara jigilar kaya

Don haka, an ƙirƙiri dukkan sassan bututunmu, kuma za mu gudanar da shi tare da umarni mai zuwa:

$ tkn pipeline start build-and-deploy-react

A wannan mataki, ana amfani da layin umarni tare da haɗin gwiwa kuma kuna buƙatar zaɓar albarkatun da suka dace don amsa kowane buƙatunsa: don albarkatun git, zaɓi aikace-aikacen yanar gizo-repo, sannan don albarkatun hoto na farko, ginannen aikace-aikacen yanar gizo. -image, kuma a ƙarshe, don albarkatun hoto na biyu -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

Yanzu bari mu duba matsayin bututun ta amfani da umarni mai zuwa:

$ tkn pipeline logs -f

Da zarar an fara bututun kuma an tura aikace-aikacen, za mu iya buƙatar hanyar da aka buga tare da umarni mai zuwa:

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

Don ƙarin gani, za ku iya duba bututunmu a cikin Yanayin Haɓakawa na na'ura mai kwakwalwa ta yanar gizo a cikin sashin Bututun ruwa, kamar yadda aka nuna a Fig. 1.

Aikace-aikace na zamani akan OpenShift Sashe na 3: OpenShift azaman yanayin haɓakawa da Bututun OpenShift

Hoto.1. Bitar bututun da ke gudana.

Danna kan bututun mai aiki yana nuna ƙarin cikakkun bayanai, kamar yadda aka nuna a hoto 2.

Aikace-aikace na zamani akan OpenShift Sashe na 3: OpenShift azaman yanayin haɓakawa da Bututun OpenShift

Shinkafa 2. Ƙarin bayani game da bututun mai.

Bayan ƙarin bayani, zaku iya ganin aikace-aikacen da ke gudana a cikin ra'ayi topology, kamar yadda aka nuna a hoto.3.

Aikace-aikace na zamani akan OpenShift Sashe na 3: OpenShift azaman yanayin haɓakawa da Bututun OpenShift

Hoto 3. An ƙaddamar da kwasfa.

Danna kan da'irar da ke saman kusurwar dama ta gunkin yana buɗe aikace-aikacen mu, kamar yadda aka nuna a hoto 4.

Aikace-aikace na zamani akan OpenShift Sashe na 3: OpenShift azaman yanayin haɓakawa da Bututun OpenShift

Shinkafa 4. Running React aikace-aikace.

ƙarshe

Don haka, mun nuna yadda ake gudanar da sabar haɓaka don aikace-aikacenku akan OpenShift kuma muyi aiki tare da tsarin fayil na gida. Mun kuma duba yadda ake kwaikwayi samfuri da aka ɗaure da sarƙa ta amfani da bututun OpenShift. Ana iya samun duk lambobin misali daga wannan labarin a nan.

Ƙarin albarkatun (EN)

Sanarwa na webinars masu zuwa

Muna fara jerin shafukan yanar gizo na Jumma'a game da ƙwarewar asali ta amfani da Red Hat OpenShift Container Platform da Kubernetes:

source: www.habr.com

Add a comment