OpenShift-тегі заманауи қолданбалар, 3-бөлім: OpenShift әзірлеу ортасы және OpenShift құбырлары ретінде

Осы блогтағы барлығына сәлем! Бұл Red Hat OpenShift жүйесінде заманауи веб-қосымшаларды қалай орналастыру керектігін көрсететін серияның үшінші жазбасы.

OpenShift-тегі заманауи қолданбалар, 3-бөлім: OpenShift әзірлеу ортасы және OpenShift құбырлары ретінде

Алдыңғы екі хабарламада біз заманауи веб-қосымшаларды бірнеше қадаммен қалай орналастыру керектігін және өндірісті орналастыруды ұйымдастыру үшін тізбектелген құрастыруларды пайдалана отырып, NGINX сияқты дайын HTTP сервер кескінімен бірге жаңа S2I кескінін қалай пайдалану керектігін көрсеттік. .

Бүгін біз OpenShift платформасында қолданбаңыздың әзірлеу серверін қалай іске қосу керектігін және оны жергілікті файлдық жүйемен синхрондауды көрсетеміз, сонымен қатар OpenShift құбырлары дегеніміз не және оларды байланыстырылған жинақтарға балама ретінде қалай пайдалануға болатыны туралы сөйлесеміз.

OpenShift әзірлеу ортасы ретінде

Әзірлеу жұмыс процесі

Қазірдің өзінде айтылғандай бірінші пост, заманауи веб-қосымшалар үшін әдеттегі әзірлеу процесі - бұл жергілікті файлдардағы өзгерістерді қадағалайтын «әзірлеу серверінің» бір түрі. Олар пайда болған кезде қолданба құрастыру іске қосылады, содан кейін ол браузерге жаңартылады.

Көптеген заманауи құрылымдарда мұндай «әзірлеу сервері» сәйкес пәрмен жолы құралдарына салынған.

Жергілікті мысал

Алдымен, қолданбаларды жергілікті түрде іске қосқан кезде бұл қалай жұмыс істейтінін көрейік. Мысал ретінде қолданбаны алайық жауап алдыңғы мақалалардан, дегенмен бірдей жұмыс үрдісі тұжырымдамалары барлық басқа заманауи құрылымдарда қолданылады.
Сонымен, біздің React мысалында «әзірлеу серверін» іске қосу үшін келесі пәрменді енгіземіз:

$ npm run start

Содан кейін терминал терезесінде біз келесідей нәрсені көреміз:

OpenShift-тегі заманауи қолданбалар, 3-бөлім: OpenShift әзірлеу ортасы және OpenShift құбырлары ретінде

Біздің қосымшамыз әдепкі браузерде ашылады:

OpenShift-тегі заманауи қолданбалар, 3-бөлім: OpenShift әзірлеу ортасы және OpenShift құбырлары ретінде

Енді файлға өзгерістер енгізетін болсақ, қолданба браузерде жаңартылуы керек.

Жарайды, жергілікті режимде әзірлеумен бәрі түсінікті, бірақ OpenShift-те қалай қол жеткізуге болады?

OpenShift жүйесіндегі әзірлеу сервері

Естеріңізде болса, в алдыңғы пост, біз S2I кескінінің іске қосу фазасын қарастырдық және әдепкі бойынша қызмет көрсету модулі веб-қосымшаға қызмет көрсетуге жауапты екенін көрдік.

Дегенмен, мұқият қарасаңыз сценарийді іске қосыңыз осы мысалдан ол пәрменді орындауға мүмкіндік беретін $NPM_RUN ортасының айнымалы мәнін қамтиды.

Мысалы, біз қолданбаны орналастыру үшін nodeshift модулін пайдалана аламыз:

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

Ескерту: Жоғарыда келтірілген мысал жалпы ойды көрсету үшін қысқартылған.

Мұнда біз NPM_RUN ортасының айнымалы мәнін қолдануымызға қостық, ол OpenShift подкастындағы React әзірлеу серверін іске қосатын жіпті бастау пәрменін іске қосу үшін орындалу уақытын көрсетеді.

Егер сіз жұмыс істеп тұрған қосқыштың журналына қарасаңыз, ол келесідей болады:

OpenShift-тегі заманауи қолданбалар, 3-бөлім: OpenShift әзірлеу ортасы және OpenShift құбырлары ретінде

Әрине, мұның бәрі жергілікті кодты кодпен синхрондауға дейін ештеңе болмайды, ол өзгерістерге де бақыланады, бірақ қашықтағы серверде тұрады.

Қашықтағы және жергілікті кодты синхрондау

Бақытымызға орай, nodeshift синхрондауға оңай көмектесе алады және өзгерістерді бақылау үшін қарау пәрменін пайдалана аласыз.

Сонымен, қолданбамыз үшін әзірлеу серверін орналастыру пәрменін іске қосқаннан кейін келесі пәрменді қауіпсіз пайдалана аламыз:

$ npx nodeshift watch

Нәтижесінде, біз сәл ертерек жасаған іске қосылған қосқышқа қосылым жасалады, жергілікті файлдарды қашықтағы кластермен синхрондау белсендіріледі және жергілікті жүйедегі файлдар өзгерістер үшін бақыланады.

Сондықтан, егер біз қазір src/App.js файлын жаңартатын болсақ, жүйе бұл өзгерістерге әрекет етеді, оларды қашықтағы кластерге көшіреді және әзірлеу серверін іске қосады, содан кейін браузердегі қолданбаны жаңартады.

Суретті аяқтау үшін осы командалардың барлығы қалай көрінетінін көрсетейік:

$ 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

Watch пәрмені oc rsync пәрменінің үстіндегі абстракция болып табылады, оның қалай жұмыс істейтіні туралы көбірек біле аласыз. осында.

Бұл React үшін мысал болды, бірақ дәл сол әдісті басқа фреймворктармен пайдалануға болады, қажет болған жағдайда NPM_RUN ортасының айнымалы мәнін орнатыңыз.

Openshift құбырлары

OpenShift-тегі заманауи қолданбалар, 3-бөлім: OpenShift әзірлеу ортасы және OpenShift құбырлары ретінде

Әрі қарай біз OpenShift Pipelines сияқты құрал және оны тізбектелген құрылымдарға балама ретінде қалай пайдалануға болатыны туралы сөйлесетін боламыз.

OpenShift құбырлары дегеніміз не

OpenShift Pipelines — Tekton көмегімен құбырларды ұйымдастыруға арналған бұлтқа негізделген CI/CD үздіксіз интеграциясы және жеткізу жүйесі. Tekton - бұл негізгі қабаттан абстракциялау арқылы әртүрлі платформаларда (Кубернетес, серверсіз, виртуалды машиналар және т.б.) орналастыруды автоматтандыруға мүмкіндік беретін икемді ашық бастапқы Kubernetes CI/CD негізі.

Бұл мақаланы түсіну үшін құбырлар туралы біраз білім қажет, сондықтан алдымен оқуды ұсынамыз ресми оқулық.

Жұмыс ортаңызды орнату

Осы мақаладағы мысалдармен ойнау үшін алдымен жұмыс ортаңызды дайындау керек:

  1. OpenShift 4 кластерін орнатыңыз және конфигурациялаңыз. Біздің мысалдарымызда бұл үшін CodeReady контейнерлері (CRD) пайдаланылады, орнату нұсқауларын табуға болады. осында.
  2. Кластер дайын болғаннан кейін оған құбыр операторын орнату керек. Қорықпаңыз, бұл оңай, орнату нұсқаулары осында.
  3. жүктеу Tekton CLI (tkn) осында.
  4. Содан кейін орналастыратын қолданбаны жасау үшін create-react-app пәрмен жолы құралын іске қосыңыз (бұл қарапайым қолданба жауап).
  5. (Қосымша) npm орнату, содан кейін npm бастау арқылы мысал қолданбасын жергілікті түрде іске қосу үшін репозиторийді клондаңыз.

Қолданбалар репозиторийінде қолданбаны орналастыру үшін пайдаланылатын Kubernetes/OpenShift YAML файлдары бар k8s қалтасы болады. Онда біз жасайтын тапсырмалар, кластер тапсырмалары, ресурстар және құбырлар болады. репозиторийлер.

Бастайық

Біздің мысал үшін бірінші қадам OpenShift кластерінде жаңа жобаны жасау болып табылады. Бұл жобаны webapp-pipeline деп атаймыз және оны келесі пәрменмен жасайық:

$ oc new-project webapp-pipeline

Бұл жоба атауы кодта кейінірек пайда болады, сондықтан оны басқа атауды шешсеңіз, мысал кодын сәйкесінше өңдеуді ұмытпаңыз. Осы сәттен бастап біз жоғарыдан төмен емес, төменнен жоғары қарай жүреміз: яғни алдымен конвейердің барлық құрамдас бөліктерін, содан кейін ғана конвейердің өзін жасаймыз.

Сонымен, ең алдымен...

Тапсырмалар

Бір-екі тапсырманы жасайық, содан кейін бағдарламаны біздің құбырымызда орналастыруға көмектеседі. Бірінші тапсырма - application_manifests_task - қолданбамыздың k8s қалтасында орналасқан Kubernetes ресурстарының (қызмет, орналастыру және маршрут) YAML қолдануына жауап береді. Екінші тапсырма – update_deployment_task – бұрыннан орналастырылған кескінді біздің құбыр арқылы жасалған кескінге жаңартуға жауапты.

Егер ол әлі анық болмаса, алаңдамаңыз. Шын мәнінде, бұл тапсырмалар утилиталар сияқты нәрсе және біз оларды сәл кейінірек толығырақ қарастырамыз. Әзірге оларды құрайық:

$ 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

Содан кейін tkn CLI пәрменін пайдаланып, біз тапсырмалардың жасалғанын тексереміз:

$ tkn task ls

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

Ескерту: Бұл сіздің ағымдағы жобаңызға арналған жергілікті тапсырмалар.

Кластер тапсырмалары

Кластер тапсырмалары негізінен қарапайым тапсырмалармен бірдей. Яғни, бұл белгілі бір тапсырманы орындау кезінде бір немесе басқа жолмен біріктірілген қадамдардың қайта пайдалануға болатын жиынтығы. Айырмашылық кластер тапсырмасы кластердің барлық жерінде қолжетімді. Құбыр операторын қосқанда автоматты түрде жасалатын кластер тапсырмаларының тізімін көру үшін біз 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

Енді екі кластер тапсырмасын жасайық. Біріншісі S2I кескінін жасайды және оны ішкі OpenShift тізіліміне жібереді; екіншісі - біз мазмұн ретінде құрастырған қолданбаны пайдаланып, NGINX негізінде кескінді құру.

Суретті жасаңыз және жіберіңіз

Бірінші тапсырманы жасаған кезде біз алдыңғы мақалада байланыстырылған жинақтар туралы жасағанымызды қайталаймыз. Еске салайық, біз S2I кескінін (ubi8-s2i-web-app) қолданбамызды «құрастыру» үшін қолданып, OpenShift ішкі тізілімінде сақталған кескінмен аяқтадық. Енді біз осы S2I веб-бағдарламасының кескінін қолданбамыз үшін DockerFile жасау үшін пайдаланамыз, содан кейін нақты құрастыруды орындау және нәтижесінде алынған кескінді OpenShift ішкі тізіліміне итеру үшін Buildah пайдаланамыз, өйткені NodeShift көмегімен қолданбаларды орналастырған кезде OpenShift дәл солай істейді. .

Мұның бәрін біз қайдан білдік, сіз сұрайсыз ба? бастап ресми Node.js ресми нұсқасы, біз оны көшіріп, өзіміз үшін өзгерттік.

Сонымен, енді s2i-web-app кластері тапсырмасын жасайық:

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

Біз мұны егжей-тегжейлі талдамаймыз, тек OUTPUT_DIR параметріне назар аударамыз:

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

Әдепкі бойынша, бұл параметр құрастыруға тең, бұл жерде React жиналған мазмұнды орналастырады. Басқа фреймворктер әртүрлі жолдарды пайдаланады, мысалы, Ember-де ол дист. Бірінші кластерлік тапсырмамыздың нәтижесі біз жинаған HTML, JavaScript және CSS бар кескін болады.

NGINX негізінде кескін жасаңыз

Екінші кластерлік тапсырмаға келетін болсақ, ол біз жасаған қолданбаның мазмұнын пайдалана отырып, біз үшін NGINX негізіндегі кескінді құруы керек. Негізінде, бұл алдыңғы бөлімнің бөлігі, онда біз тізбектелген құрылымдарды қарастырдық.

Бұл әрекетті орындау үшін, біз дәл жоғарыдағыдай - webapp-build-runtime кластер тапсырмасын жасаймыз:

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

Осы кластерлік тапсырмалардың кодын қарасаңыз, онда біз жұмыс істеп жатқан Git репозиторийі немесе біз жасап жатқан кескіндердің атаулары көрсетілмегенін көре аласыз. Біз Git-ке нақты нені тасымалдайтынымызды немесе соңғы кескін шығарылатын белгілі бір кескінді ғана көрсетеміз. Сондықтан бұл кластер тапсырмаларын басқа қолданбалармен жұмыс істегенде қайта пайдалануға болады.

Міне, біз келесі нүктеге әдемі түрде көшеміз ...

Ресурстар

Сонымен, біз жаңа айтқанымыздай, кластерлік тапсырмалар мүмкіндігінше жалпы болуы керек, біз кіріс (Git репозиторийі) және шығыс (соңғы кескіндер) ретінде пайдаланылатын ресурстарды жасауымыз керек. Бізге қажет бірінші ресурс - бұл біздің қолданба орналасқан Git, келесідей:

# 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

Мұнда PipelineResource git түріне жатады. Парамдар бөліміндегі url кілті нақты репозиторийге нұсқайды және негізгі тармақты көрсетеді (бұл міндетті емес, бірақ біз оны толық болу үшін жазамыз).

Енді s2i-web-app тапсырмасының нәтижелері сақталатын сурет үшін ресурс жасау керек, бұл келесідей орындалады:

# 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

Мұнда PipelineResource түрі кескін болып табылады және url параметрінің мәні ішкі OpenShift кескін тізіліміне, атап айтқанда webapp-құбыр жолының аттар кеңістігінде орналасқанға нұсқайды. Басқа аттар кеңістігін пайдаланып жатсаңыз, бұл параметрді өзгертуді ұмытпаңыз.

Ақырында, бізге қажет соңғы ресурс типті кескін болады және бұл орналастыру кезінде пайдаланылатын соңғы NGINX кескіні болады:

# 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

Тағы да ескеріңіз, бұл ресурс кескінді webapp-құбыр аттар кеңістігіндегі ішкі OpenShift тізілімінде сақтайды.

Барлық осы ресурстарды бірден жасау үшін біз құру пәрменін қолданамыз:

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

Ресурстардың келесідей жасалғанына көз жеткізуге болады:

$ tkn resource ls

Конвейер құбыры

Енді бізде барлық қажетті құрамдас бөліктер бар, келесі пәрмен арқылы оны жасау арқылы олардан құбыр құрастырайық:

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

Бірақ бұл пәрменді іске қоспас бұрын, осы компоненттерді қарастырайық. Біріншісі аты:

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

Содан кейін спецификация бөлімінде біз бұрын жасаған ресурстардың көрсеткішін көреміз:

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

Содан кейін біз құбырды орындауға қажетті тапсырмаларды жасаймыз. Ең алдымен, ол біз жасаған s2i-web-app тапсырмасын орындауы керек:

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

Бұл тапсырма енгізу (gir ресурсы) және шығыс (кіріктірілген веб-бағдарлама-кескін ресурсы) параметрлерін қабылдайды. Сондай-ақ біз оған арнайы параметрді береміз, осылайша ол TLS-ті тексермейді, өйткені біз өздігінен қол қойылған сертификаттарды пайдаланамыз:

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

Келесі тапсырма дерлік бірдей, тек осы жерде біз жасаған webapp-build-runtime кластер тапсырмасы деп аталады:

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

Алдыңғы тапсырмадағыдай, біз ресурста өтеміз, бірақ қазір ол ендірілген веб-бағдарлама-кескін (алдыңғы тапсырмамыздың нәтижесі). Шығару ретінде біз қайтадан суретті орнатамыз. Бұл тапсырма алдыңғы тапсырмадан кейін орындалуы керек болғандықтан, 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

Келесі екі тапсырма веб-қосымшамыздың k8s каталогында тұратын қызметті, маршрутты және орналастыру YAML файлдарын пайдалануға, сондай-ақ жаңа кескіндерді жасау кезінде осы орналастыруды жаңартуға жауапты. Біз осы екі кластер тапсырмасын мақаланың басында анықтадық.

Конвейерді іске қосу

Сонымен, біздің құбырымыздың барлық бөліктері жасалды және біз оны келесі пәрменмен іске қосамыз:

$ tkn pipeline start build-and-deploy-react

Бұл кезеңде пәрмен жолы интерактивті түрде пайдаланылады және оның әрбір сұрауына жауап ретінде сәйкес ресурстарды таңдау керек: git ресурсы үшін web-application-repo таңдаңыз, содан кейін бірінші сурет ресурсы үшін, салынған веб-қосымшаны таңдаңыз. -сурет, және соңында, екінші сурет ресурсы үшін – орындау уақыты-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

Енді келесі пәрменді пайдаланып құбырдың күйін тексерейік:

$ tkn pipeline logs -f

Құбыр іске қосылғаннан кейін және қолданба орналастырылғаннан кейін біз жарияланған маршрутты келесі пәрмен арқылы сұрай аламыз:

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

Көбірек визуализация үшін сіз бөлімдегі веб-консольдің Әзірлеуші ​​режимінде біздің құбырды көре аласыз Құбырлар, суретте көрсетілгендей. 1.

OpenShift-тегі заманауи қолданбалар, 3-бөлім: OpenShift әзірлеу ортасы және OpenShift құбырлары ретінде

1-сурет. Ағымдағы құбырларға шолу.

Жұмыс істеп тұрған құбырды басу 2-суретте көрсетілгендей қосымша мәліметтерді көрсетеді.

OpenShift-тегі заманауи қолданбалар, 3-бөлім: OpenShift әзірлеу ортасы және OpenShift құбырлары ретінде

Күріш. 2. Құбыр туралы қосымша ақпарат.

Қосымша ақпараттан кейін көріністе іске қосылған қолданбаларды көре аласыз Топология, суретте көрсетілгендей.

OpenShift-тегі заманауи қолданбалар, 3-бөлім: OpenShift әзірлеу ортасы және OpenShift құбырлары ретінде

3-сурет. Іске қосылған қосқыш.

Белгішенің жоғарғы оң жақ бұрышындағы шеңберді басу 4-суретте көрсетілгендей біздің қосымшамызды ашады.

OpenShift-тегі заманауи қолданбалар, 3-бөлім: OpenShift әзірлеу ортасы және OpenShift құбырлары ретінде

Күріш. 4. React қолданбасын іске қосу.

қорытынды

Сонымен, біз OpenShift-те қолданбаңыз үшін әзірлеу серверін қалай іске қосу керектігін және оны жергілікті файлдық жүйемен синхрондауды көрсеттік. Біз сондай-ақ OpenShift Pipelines көмегімен тізбектелген құрастыру үлгісін қалай модельдеу керектігін қарастырдық. Осы мақаладағы барлық мысал кодтарын табуға болады осында.

Қосымша ресурстар (EN)

Алдағы вебинарлар туралы хабарландырулар

Біз Red Hat OpenShift Container Platform және Kubernetes көмегімен жергілікті тәжірибе туралы жұма күні вебинарлар сериясын бастаймыз:

Ақпарат көзі: www.habr.com

пікір қалдыру