ዘመናዊ አፕሊኬሽኖች በOpenShift ክፍል 2፡ በሰንሰለት የታሰሩ ግንባታዎች

ሰላም ሁላችሁም! ዘመናዊ የዌብ አፕሊኬሽኖችን በ Red Hat OpenShift ላይ እንዴት ማሰማራት እንደሚቻል የምናሳይበት ተከታታይ ህትመታችን ሁለተኛው ነው።

ዘመናዊ አፕሊኬሽኖች በOpenShift ክፍል 2፡ በሰንሰለት የታሰሩ ግንባታዎች

ባለፈው ልጥፍ፣ ዘመናዊ የድር መተግበሪያዎችን በ OpenShift መድረክ ላይ ለመገንባት እና ለማሰማራት የተነደፈውን አዲሱን S2I (ምንጭ-ወደ-ምስል) ገንቢ ምስል ያለውን አቅም በትንሹ ነካን። ከዚያም አፕሊኬሽኑን በፍጥነት የማሰማራት ርዕስ ላይ ፍላጎት ነበረን እና ዛሬ የ S2I ምስልን እንደ "ንፁህ" ገንቢ ምስል እንዴት እንደምንጠቀም እና ከተዛማጅ የ OpenShift ስብሰባዎች ጋር እናጣምራለን።

የገንቢ ምስልን አጽዳ

በክፍል XNUMX ላይ እንደገለጽነው፣ አብዛኞቹ ዘመናዊ የድር አፕሊኬሽኖች የግንባታ ደረጃ ተብሎ የሚጠራ ሲሆን ይህም በተለምዶ እንደ ኮድ መገልበጥ፣ በርካታ የፋይል ማገናኘት እና ማቃለል ያሉ ተግባራትን ያከናውናል። በእነዚህ ክንውኖች ምክንያት የተገኙ ፋይሎች - እና ይህ የማይንቀሳቀስ HTML፣ JavaScript እና CSS - በውጤቱ አቃፊ ውስጥ ይቀመጣሉ። የዚህ ፎልደር መገኛ አብዛኛው ጊዜ በምን ዓይነት የግንባታ መሳሪያዎች ጥቅም ላይ እንደሚውል ይወሰናል፣ እና ለ React ይህ የ./build አቃፊ ይሆናል (ከዚህ በታች በዝርዝር እንመለሳለን)።

ምንጭ-ወደ-ምስል (S2I)

በዚህ ጽሑፍ ውስጥ “S2I ምንድን ነው እና እንዴት እንደሚጠቀሙበት” በሚለው ርዕስ ላይ አንነካም (ስለዚህ የበለጠ ማንበብ ይችላሉ) እዚህ), ነገር ግን የድር መተግበሪያ ገንቢ ምስል ምን እንደሚሰራ ለመረዳት በዚህ ሂደት ውስጥ ስላሉት ሁለት ደረጃዎች ግልጽ ማድረግ አስፈላጊ ነው.

የመሰብሰቢያ ደረጃ

የመሰብሰቢያው ደረጃ በተፈጥሮ ዶከር ግንባታን ሲያስኬዱ እና በአዲስ Docker ምስል ሲጨርሱ ከሚሆነው ጋር በጣም ተመሳሳይ ነው። በዚህ መሠረት ይህ ደረጃ በ OpenShift መድረክ ላይ ግንባታ ሲጀመር ይከሰታል.

የድር መተግበሪያ ገንቢ ምስልን በተመለከተ፣ የእርስዎን መተግበሪያ ጥገኞች የመጫን እና ግንባታውን የማስኬድ ሃላፊነት አለበት። ስክሪፕት መሰብሰብ. በነባሪ፣ የገንቢው ምስል የ npm አሂድ ግንባታ ግንባታን ይጠቀማል፣ ነገር ግን ይህ በNPM_BUILD አካባቢ ተለዋዋጭ በኩል ሊሻር ይችላል።

ቀደም ሲል እንደተናገርነው, የተጠናቀቀው, ቀድሞውኑ የተገነባው መተግበሪያ በየትኛው መሳሪያዎች እንደሚጠቀሙ ይወሰናል. ለምሳሌ፣ በ React ሁኔታ ይህ ./build ፎልደር ይሆናል፣ እና ለአንግላር አፕሊኬሽኖች የፕሮጀክት_ስም/ዲስት ማህደር ይሆናል። እና፣ ባለፈው ልጥፍ ላይ እንደሚታየው፣ በነባሪነት እንዲገነባ የተዋቀረው የውጤት ማውጫው የሚገኝበት ቦታ፣ በOUTPUT_DIR አካባቢ ተለዋዋጭ በኩል ሊሻር ይችላል። እንግዲህ፣ የውጤት ማህደሩ የሚገኝበት ቦታ ከማዕቀፍ ወደ ማዕቀፍ ስለሚለያይ በቀላሉ የተፈጠረውን ውፅዓት በምስሉ ላይ ወዳለው መደበኛ ማህደር ማለትም /opt/apt-root/output ይቅዱ። ይህ የቀረውን የዚህ ጽሑፍ ለመረዳት አስፈላጊ ነው, አሁን ግን የሚቀጥለውን ደረጃ - የሩጫውን ደረጃ በፍጥነት እንይ.

አሂድ ደረጃ

ይህ ደረጃ የሚከናወነው በስብሰባ ደረጃ በሚፈጠረው አዲስ ምስል ላይ ወደ ዶከር ሩጫ ጥሪ ሲደረግ ነው። በOpenShift መድረክ ላይ ሲሰራጭም ተመሳሳይ ነው። ነባሪ አሂድ ስክሪፕት ይጠቀማል ሞጁል ማገልገል ከላይ ባለው መደበኛ የውጤት ማውጫ ውስጥ የሚገኘውን የማይንቀሳቀስ ይዘት ለማቅረብ።

ይህ ዘዴ አፕሊኬሽኖችን በፍጥነት ለማሰማራት ጥሩ ነው፣ ነገር ግን በአጠቃላይ የማይንቀሳቀስ ይዘትን በዚህ መንገድ ለማቅረብ አይመከርም። ደህና፣ በእውነቱ እኛ የምናቀርበው የማይንቀሳቀስ ይዘትን ብቻ ስለሆነ፣ በምስላችን ውስጥ Node.js መጫን አያስፈልገንም - የድር አገልጋይ በቂ ነው።

በሌላ አገላለጽ ስንሰበሰብ አንድ ነገር ያስፈልገናል፣ ሲፈጽም ሌላ ነገር ያስፈልገናል። በዚህ ሁኔታ, በሰንሰለት የተሰሩ ግንባታዎች ጠቃሚ ናቸው.

ሰንሰለት ይገነባል።

የሚጽፉትም ይህ ነው። በሰንሰለት የታሰሩ ግንባታዎች በOpenShift ሰነድ ውስጥ፡-

"ሁለት ጉባኤዎች አንድ ላይ ሊጣመሩ ይችላሉ፣ አንደኛው የተጠናቀረ አካል ሲያመነጭ ሌላኛው ደግሞ ያንን አካል በተለየ ምስል በማስተናገድ ያንን አካል ለማስኬድ ይጠቅማል።"

በሌላ አገላለጽ፣ግንባታችንን ለማስኬድ የዌብ አፕ ገንቢ ምስልን ልንጠቀም እንችላለን፣እና ይዘታችንን ለማቅረብ የዌብ ሰርቨር ምስል፣ተመሳሳይ NGINXን መጠቀም እንችላለን።

ስለዚህ የዌብ አፕ ሰሪ ምስልን እንደ “ንፁህ” ገንቢ ልንጠቀምበት እና በተመሳሳይ ጊዜ ትንሽ የሩጫ ጊዜ ምስል እንዲኖረን ማድረግ እንችላለን።

አሁን ይህንን በልዩ ምሳሌ እንመልከተው።

ለስልጠና እንጠቀማለን ቀላል ምላሽ መተግበሪያፍጠር-react-app የትእዛዝ መስመር መሳሪያን በመጠቀም የተፈጠረ።

ሁሉንም ነገር አንድ ላይ ለማድረግ ይረዳናል OpenShift አብነት ፋይል.

ይህንን ፋይል በበለጠ ዝርዝር እንመልከተው እና በመለኪያዎች ክፍል እንጀምር።

parameters:
  - name: SOURCE_REPOSITORY_URL
    description: The source URL for the application
    displayName: Source URL
    required: true
  - name: SOURCE_REPOSITORY_REF
    description: The branch name for the application
    displayName: Source Branch
    value: master
    required: true
  - name: SOURCE_REPOSITORY_DIR
    description: The location within the source repo of the application
    displayName: Source Directory
    value: .
    required: true
  - name: OUTPUT_DIR
    description: The location of the compiled static files from your web apps builder
    displayName: Output Directory
    value: build
    required: false

እዚህ ሁሉም ነገር በጣም ግልፅ ነው፣ ነገር ግን ለOUTPUT_DIR መለኪያ ትኩረት መስጠት ተገቢ ነው። በእኛ ምሳሌ ውስጥ ላለው የሬክት አፕሊኬሽን ምንም የሚያስጨንቅ ነገር የለም ምክንያቱም React ነባሪውን ዋጋ እንደ የውጤት ማህደር ስለሚጠቀም ነገር ግን በአንግላር ወይም በሌላ ነገር ይህ ግቤት እንደ አስፈላጊነቱ መቀየር ይኖርበታል።

አሁን የImageStreams ክፍልን እንይ።

- apiVersion: v1
  kind: ImageStream
  metadata:
    name: react-web-app-builder  // 1 
  spec: {}
- apiVersion: v1
  kind: ImageStream
  metadata:
    name: react-web-app-runtime  // 2 
  spec: {}
- apiVersion: v1
  kind: ImageStream
  metadata:
    name: web-app-builder-runtime // 3
  spec:
    tags:
    - name: latest
      from:
        kind: DockerImage
        name: nodeshift/ubi8-s2i-web-app:10.x
- apiVersion: v1
  kind: ImageStream
  metadata:
    name: nginx-image-runtime // 4
  spec:
    tags:
    - name: latest
      from:
        kind: DockerImage
        name: 'centos/nginx-112-centos7:latest'

ሶስተኛውን እና አራተኛውን ምስሎች ይመልከቱ. ሁለቱም እንደ ዶከር ምስሎች ተገልጸዋል፣ እና ከየት እንደመጡ በግልፅ ማየት ይችላሉ።

ሦስተኛው ምስል ዌብ-አፕ-ገንቢ ነው እና የመጣው ከ nodeshift/ubi8-s2i-web-app 10.x ላይ መለያ ተሰጥቶታል Docker hub.

አራተኛው የ NGINX ምስል ነው (ስሪት 1.12) የቅርብ ጊዜ መለያ ያለው Docker hub.

አሁን የመጀመሪያዎቹን ሁለት ምስሎች እንይ. ሁለቱም መጀመሪያ ላይ ባዶ ናቸው እና የተፈጠሩት በግንባታው ወቅት ብቻ ነው. የመጀመሪያው ምስል፣ react-web-app-builder፣የድር-መተግበሪያ-ገንቢ-አሂድ ጊዜ ምስልን እና የምንጭ ኮድን የሚያጣምር የስብሰባ ደረጃ ውጤት ይሆናል። ለዚህ ነው ወደዚህ ምስል ስም "-ገንቢ" የጨመርነው።

ሁለተኛው ምስል -react-web-app-runtime - nginx-image-runtime እና አንዳንድ ፋይሎችን ከreact-web-app-Builder ምስል በማጣመር ውጤት ይሆናል። ይህ ምስል በሚሰማራበት ጊዜ ጥቅም ላይ የሚውል ሲሆን የኛን መተግበሪያ ዌብ ሰርቨር እና የማይንቀሳቀስ HTML፣ JavaScript፣ CSS ብቻ ይይዛል።

ግራ ገባኝ? አሁን የግንባታ አወቃቀሮችን እንይ እና ትንሽ ግልጽ ይሆናል.

የእኛ አብነት ሁለት የግንባታ ውቅሮች አሉት። የመጀመሪያው ይኸውና በጣም ጥሩ መደበኛ ነው፡

  apiVersion: v1
  kind: BuildConfig
  metadata:
    name: react-web-app-builder
  spec:
    output:
      to:
        kind: ImageStreamTag
        name: react-web-app-builder:latest // 1
    source:   // 2 
      git:
        uri: ${SOURCE_REPOSITORY_URL}
        ref: ${SOURCE_REPOSITORY_REF}
      contextDir: ${SOURCE_REPOSITORY_DIR}
      type: Git
    strategy:
      sourceStrategy:
        env:
          - name: OUTPUT_DIR // 3 
            value: ${OUTPUT_DIR}
        from:
          kind: ImageStreamTag
          name: web-app-builder-runtime:latest // 4
        incremental: true // 5
      type: Source
    triggers: // 6
    - github:
        secret: ${GITHUB_WEBHOOK_SECRET}
      type: GitHub
    - type: ConfigChange
    - imageChange: {}
      type: ImageChange

እንደምታየው፣ መለያ 1 ያለው መስመር የዚህ ግንባታ ውጤት በImageStreams ክፍል ውስጥ ትንሽ ቀደም ብለን ባየነው ተመሳሳይ ምላሽ-ድር-አፕ-ገንቢ ምስል ላይ እንደሚቀመጥ ይናገራል።

2 የተለጠፈው መስመር ኮዱን ከየት ማግኘት እንዳለቦት ይነግርዎታል። በእኛ ሁኔታ, ይህ የ git ማከማቻ ነው, እና ቦታው, ሪፍ እና አውድ ማህደሩ ከላይ ባየናቸው መለኪያዎች ይወሰናል.

3 የተሰየመው መስመር ቀደም ሲል በመለኪያዎች ክፍል ውስጥ ያየነው ነው. የOUTPUT_DIR አካባቢ ተለዋዋጭን ይጨምራል፣ ይህም በእኛ ምሳሌ ውስጥ መገንባት ነው።
4 የተሰየመው መስመር ቀደም ሲል በImageStream ክፍል ላይ ያየነውን የድር-መተግበሪያ-ገንቢ-አሂድ ጊዜ ምስልን እንጠቀም ይላል።

መስመር 5 ላይ የS2I ምስል የሚደግፈው ከሆነ ተጨማሪ ግንባታ መጠቀም እንፈልጋለን ይላል እና የድር መተግበሪያ ገንቢ ምስል። በመጀመሪያው ጅምር ላይ ፣ የመሰብሰቢያው ደረጃ ከተጠናቀቀ በኋላ ምስሉ node_modules አቃፊውን ወደ ማህደር ፋይል ያስቀምጣል። ከዚያ በሚቀጥሉት ሩጫዎች ምስሉ የግንባታ ጊዜን ለመቀነስ በቀላሉ ይህንን ማህደር ይከፍታል።

እና በመጨረሻም ፣ 6 የተሰየመው መስመር አንድ ነገር ሲቀየር ፣ ያለ በእጅ ጣልቃ ገብነት ግንባታው በራስ-ሰር እንዲሰራ ለማድረግ ጥቂት ቀስቅሴዎች ብቻ ናቸው።

በአጠቃላይ ይህ ቆንጆ መደበኛ የግንባታ ውቅር ነው።

አሁን የሁለተኛውን የግንባታ ውቅረት እንይ. ከመጀመሪያው ጋር በጣም ተመሳሳይ ነው, ግን አንድ አስፈላጊ ልዩነት አለ.

apiVersion: v1
  kind: BuildConfig
  metadata:
    name: react-web-app-runtime
  spec:
    output:
      to:
        kind: ImageStreamTag
        name: react-web-app-runtime:latest // 1
    source: // 2
      type: Image
      images:                              
        - from:
            kind: ImageStreamTag
            name: react-web-app-builder:latest // 3
          paths:
            - sourcePath: /opt/app-root/output/.  // 4
              destinationDir: .  // 5
             
    strategy: // 6
      sourceStrategy:
        from:
          kind: ImageStreamTag
          name: nginx-image-runtime:latest
        incremental: true
      type: Source
    triggers:
    - github:
        secret: ${GITHUB_WEBHOOK_SECRET}
      type: GitHub
    - type: ConfigChange
    - type: ImageChange
      imageChange: {}
    - type: ImageChange
      imageChange:
        from:
          kind: ImageStreamTag
          name: react-web-app-builder:latest // 7

ስለዚህ የሁለተኛው የግንባታ ውቅረት ምላሽ-ድር-መተግበሪያ-አሂድ ጊዜ ነው፣ እና በጣም ቆንጆ በሆነ ደረጃ ይጀምራል።

1 የተሰየመው መስመር አዲስ ነገር አይደለም - በቀላሉ የግንባታው ውጤት ወደ ምላሽ-ድር-መተግበሪያ-አሂድ ጊዜ ምስል እንደገባ ይናገራል።

እንደ ቀድሞው ውቅር 2 የተሰየመው መስመር የምንጭ ኮዱን ከየት ማግኘት እንደሚቻል ያሳያል። ነገር ግን እዚህ ላይ ከሥዕሉ የተወሰደ ነው እያልን እንዳለ አስተውል:: ከዚህም በላይ አሁን ከፈጠርነው ምስል - ከሬክት-ድር-አፕ-ገንቢ (በመስመር 3 ላይ የተመለከተው)። ልንጠቀምባቸው የምንፈልጋቸው ፋይሎች በምስሉ ውስጥ ናቸው እና ቦታቸው በ 4 መስመር ላይ ተቀምጧል, በእኛ ሁኔታ /opt/app-root/output/ ነው. ካስታወሱ, የእኛን መተግበሪያ በመገንባት ውጤቶች ላይ ተመስርተው የተፈጠሩት ፋይሎች የሚቀመጡበት ቦታ ነው.

በስያሜ 5 ላይ የተገለጸው የመድረሻ ማህደር በቀላሉ አሁን ያለው ማውጫ ነው (ይህ ብቻ ነው፣ አስታውስ፣ አንዳንድ አስማታዊ ነገር ውስጥ እየሮጠ OpenShift በተባለው ነገር ውስጥ እንጂ በአከባቢህ ኮምፒውተር ላይ አይደለም)።

የስትራቴጂው ክፍል - 6 የተሰየመ መስመር - እንዲሁም ከመጀመሪያው የግንባታ ውቅር ጋር ተመሳሳይ ነው. በዚህ ጊዜ ብቻ በImageStream ክፍል ውስጥ ያየነውን nginx-image-runtime ን እንጠቀማለን።

በመጨረሻም፣ 7 የሚለው መስመር ምላሽ-ድር-አፕ-ገንቢው ምስል በተቀየረ ቁጥር ይህንን ግንባታ የሚያንቀሳቅሰው ቀስቅሴዎች ክፍል ነው።

ያለበለዚያ ይህ አብነት በጣም ቆንጆ መደበኛ የማሰማራት ውቅረትን እንዲሁም ከአገልግሎቶች እና መንገዶች ጋር የተያያዙ ነገሮችን ይዟል፣ ነገር ግን ወደዚያ በጣም ብዙ ዝርዝር ውስጥ አንገባም። እባክዎ የሚተገበረው ምስል ምላሽ-ድር-መተግበሪያ-አሂድ ጊዜ ምስል መሆኑን ልብ ይበሉ።

የመተግበሪያ ማሰማራት

ስለዚህ አሁን አብነቱን ከተመለከትን, መተግበሪያን ለማሰማራት እንዴት እንደሚጠቀሙበት እንይ.

አብነታችንን ለማሰማራት oc የተባለውን የOpenShift ደንበኛ መሳሪያ መጠቀም እንችላለን፡-

$ find . | grep openshiftio | grep application | xargs -n 1 oc apply -f

$ oc new-app --template react-web-app -p SOURCE_REPOSITORY_URL=https://github.com/lholmquist/react-web-app

ከላይ ባለው ቅጽበታዊ ገጽ እይታ ውስጥ ያለው የመጀመሪያው ትእዛዝ አብነት ለማግኘት ሆን ተብሎ የምህንድስና መንገድ ነው።/openshiftio/application.yaml።

ሁለተኛው ትእዛዝ በቀላሉ በዚህ አብነት ላይ የተመሠረተ አዲስ መተግበሪያ ይፈጥራል።

እነዚህ ትዕዛዞች ከሰሩ በኋላ ሁለት ስብሰባዎች እንዳሉን እናያለን፡-

ዘመናዊ አፕሊኬሽኖች በOpenShift ክፍል 2፡ በሰንሰለት የታሰሩ ግንባታዎች

እና ወደ አጠቃላይ እይታ ማያ ገጽ ስንመለስ የጀመረውን ፖድ እናያለን፡-

ዘመናዊ አፕሊኬሽኖች በOpenShift ክፍል 2፡ በሰንሰለት የታሰሩ ግንባታዎች

አገናኙን ጠቅ ያድርጉ እና ወደ መተግበሪያችን እንወሰዳለን፣ እሱም ነባሪው React መተግበሪያ ገጽ፡

ዘመናዊ አፕሊኬሽኖች በOpenShift ክፍል 2፡ በሰንሰለት የታሰሩ ግንባታዎች

ማሟያ 1

ለአንግላር አፍቃሪዎችም አለን። ምሳሌ መተግበሪያ.

ከOUTPUT_DIR ተለዋዋጭ በስተቀር እዚህ ያለው ስርዓተ-ጥለት አንድ ነው።

ማሟያ 2

በዚህ ጽሑፍ ውስጥ NGINX ን እንደ ድር አገልጋይ ተጠቀምን, ነገር ግን በ Apache መተካት በጣም ቀላል ነው, በፋይሉ ውስጥ ያለውን አብነት ብቻ ይለውጡ. የ NGINX ምስል ላይ Apache ምስል.

መደምደሚያ

በዚህ ተከታታይ የመጀመሪያ ክፍል ዘመናዊ የድር መተግበሪያዎችን በ OpenShift መድረክ ላይ እንዴት በፍጥነት ማሰማራት እንደሚቻል አሳይተናል። ዛሬ የድር መተግበሪያ ምስል ምን እንደሚሰራ እና እንዴት እንደ NGINX ካሉ ንጹህ የድር አገልጋይ ጋር እንዴት እንደሚጣመር ተመልክተናል በሰንሰለት የተሰሩ ግንባታዎችን በመጠቀም ለምርት ዝግጁ የሆነ የመተግበሪያ ግንባታ። በሚቀጥለው እና በመጨረሻው በዚህ ተከታታይ መጣጥፍ ለመተግበሪያዎ በOpenShift ላይ እንዴት የገንቢ አገልጋይ እንደሚያስኬዱ እና የአካባቢ እና የርቀት ፋይሎችን ማመሳሰልን እናረጋግጣለን።

የዚህ ተከታታይ መጣጥፎች ይዘት

ተጨማሪ መርጃዎች

ምንጭ: hab.com

አስተያየት ያክሉ