ืฉืืื ืืืืื! ืืื ืืคืืกื ืืฉื ื ืืกืืจื ืฉืื ื ืื ืื ื ืืจืืื ืืืฆื ืืคืจืืก ืืืฉืืื ืืื ืืจื ื ืืืืจื ืืื ื-Red Hat OpenShift.
ืืคืืกื ืืงืืื ื ืืขื ื ืืขื ืืืืืืืช ืฉื ืชืืื ืช ืืื ื S2I (ืืงืืจ-ืืชืืื ื) ืืืืฉื, ืืืืืขืืช ืืื ืืื ืืคืจืืกื ืฉื ืืคืืืงืฆืืืช ืืื ืืจื ื ืืืืจื ืืืช ืืคืืืคืืจืืช OpenShift. ืื ืืชืขื ืืื ื ืื ืืฉื ืฉื ืคืจืืกื ืืืืจื ืฉื ืืคืืืงืฆืื, ืืืืื ื ืืื ืืืฆื ืืืฉืชืืฉ ืืชืืื ืช S2I ืืชืืื ืช ืืื ื "ืืืืจื" ืืืฉืื ืืืชื ืขื ืืืืืืื ืงืฉืืจืื ืฉื OpenShift.
ืชืืื ืช ืื ืื ื ืงืืื
ืืคื ืฉืืืืจื ื ืืืืง XNUMX, ืืจืื ืืืฉืืื ืืืื ืืจื ื ืืืืืจื ืืื ืืฉ ืื ืฉื ืงืจื ืฉืื ืื ืืื, ืืฉืจ ืืืจื ืืื ืืืฆืข ืคืขืืืืช ืืื ืชืขืชืืง ืงืื, ืฉืจืฉืืจ ืงืืฆืื ืืจืืืื ืืืงืื ื. ืืงืืฆืื ืืืชืงืืืื ืืชืืฆืื ืืคืขืืืืช ืืื - ืืืื HTML ืกืืื, JavaScript ื-CSS - ืืืืืกื ืื ืืชืืงืืืช ืืคืื. ืืืืงืื ืฉื ืชืืงืื ืื ืชืืื ืืืจื ืืื ืืืืื ืืื ืื ืืื ืืฉืชืืฉืื, ืืขืืืจ React ืื ืชืืื ืชืืงืืืช ./build (ื ืืืืจ ืืื ืืคืืจืื ืจื ืืืชืจ ืืืืฉื).
ืืงืืจ ืืชืืื ื (S2I)
ืืคืืกื ืื ืืื ื ื ื ืืืขืื ืื ืืฉื "ืืื S2I ืืืืฆื ืืืฉืชืืฉ ืื" (ืชืืืื ืืงืจืื ืขืื ืขื ืื
ืฉืื ืืืจืืื
ืฉืื ืืืจืืื ืืืื ืืืื ืืืืืชื ืืื ืฉืงืืจื ืืืฉืจ ืืชื ืืคืขืื ืืช docker build ืืืกืืื ืขื ืชืืื ืช Docker ืืืฉื. ืืืชืื, ืฉืื ืื ืืชืจืืฉ ืืขืช ืชืืืืช ืื ืืื ืืคืืืคืืจืืช OpenShift.
ืืืงืจื ืฉื ืชืืื ืช Web App Builder, ืืื ืืืจืื ืขื ืืชืงื ืช ืืชืืืช ืฉื ืืืคืืืงืฆืื ืฉืื ืืืคืขืืช ื-build.
ืืคื ืฉืืืจื ื ืงืืื ืืื, ืืืืงืื ืฉื ืืืืฉืื ืืืืืืจ, ืฉื ืื ื ืืืจ, ืชืืื ืืืืื ืืืื ืืชื ืืฉืชืืฉ. ืืืืืื, ืืืงืจื ืฉื React ืื ืชืืื ืืชืืงืื ./build, ืืขืืืจ ืืืฉืืื Angular ืื ืชืืื ืืชืืงืื project_name/dist. ืืืคื ืฉืืืจ ืืืฆื ืืคืืกื ืืงืืื, ื ืืชื ืืขืงืืฃ ืืช ืืืืงืื ืฉื ืกืคืจืืืช ืืคืื, ืืืืืืจืช ืืื ืืื ืืืจืืจืช ืืืื, ืืจื ืืฉืชื ื ืืกืืืื OUTPUT_DIR. ืืืื, ืืืืืื ืฉืืืืงืื ืฉื ืชืืงืืืช ืืคืื ืฉืื ื ืืืกืืจืช ืืืกืืจืช, ืืชื ืคืฉืื ืืขืชืืง ืืช ืืคืื ืฉื ืืฆืจ ืืชืืงืื ืืจืืืื ืืชืืื ื, ืืืืืจ /opt/apt-root/output. ืื ืืฉืื ืืืื ืช ืืืฉื ืืืืืจ ืืื, ืืื ืืขืช ืขืชื ืืืื ื ืกืชืื ืืืืืจืืช ืขื ืืฉืื ืืื - ืฉืื ืืจืืฆื.
ืฉืื ืืจืืฆื
ืฉืื ืื ืืชืจืืฉ ืืืฉืจ ืืชืืฆืขืช ืงืจืืื ื-docer run ืขื ืืชืืื ื ืืืืฉื ืฉื ืืฆืจื ืืืืื ืฉืื ืืืจืืื. ืืืชื ืืืจ ืงืืจื ืืขืช ืคืจืืกื ืืคืืืคืืจืืช OpenShift. ืึผึฐืจึดืืจึทืช ืึถืืึธื
ืฉืืื ืื ืืืื ืืคืจืืกื ืืืืจื ืฉื ืืืฉืืืื, ืื ืืืจื ืืื ืื ืืืืืฅ ืืืืืฉ ืชืืื ืกืืื ืืฆืืจื ืื. ืืืื, ืืืืืื ืฉืืืฆืืืืช ืื ื ืืืืฉืื ืจืง ืชืืื ืกืืื, ืืื ื ื ืืงืืงืื ืืืชืงื ื ืฉื Node.js ืืชืื ืืชืืื ื ืฉืื ื - ืฉืจืช ืืื ืืจื ื ืืกืคืืง.
ืืืืืื ืืืจืืช, ืืืจืืื ืื ืื ื ืฆืจืืืื ืืืจ ืืื, ืืืืฆืืข ืื ืื ื ืฆืจืืืื ืืืจ ืืืจ. ืืืฆื ืื, ืืื ื ืืฉืืจืฉืจ ืืืขืื.
ืืื ื ืืฉืืจืฉืจ
ืขื ืื ืื ืืืชืืื
"ื ืืชื ืืงืฉืจ ืฉื ื ืืืืืืื, ืืืฉืจ ืืืื ืืืืฆืจ ืืฉืืช ืืืืืจืช ืืืฉื ื ืืืจื ืืช ืืืฉืืช ืืื ืืชืืื ื ื ืคืจืืช ืืืฉืืฉืช ืืืคืขืืช ืืืฉืืช ืืื."
ืืืืืื ืืืจืืช, ืื ื ืืืืืื ืืืฉืชืืฉ ืืชืืื ืช Web App Builder ืืื ืืืคืขืื ืืช ื-build ืฉืื ื, ืืืืืจ ืืื ืืืฉืชืืฉ ืืชืืื ืช ืฉืจืช ืืืื ืืจื ื, ืืืชื NGINX, ืืื ืืฉืจืช ืืช ืืชืืื ืฉืื ื.
ืืคืืื, ืื ื ืืืืืื ืืืฉืชืืฉ ืืชืืื ืช Web App Builder ืืืื ื "ืืืืจื" ืืืืงืืื ืืงืื ืชืืื ืช ืืื ืจืืฆื ืงืื ื.
ืขืืฉืื ืืืื ื ืกืชืื ืขื ืื ืขื ืืืืื ืกืคืฆืืคืืช.
ืืืืจืื ื ืฉืชืืฉ
ืื ืืขืืืจ ืื ื ืืืืจ ืืื ืืืื
ืืืื ื ืกืชืื ืขื ืืงืืืฅ ืืื ืืืชืจ ืคืืจืื, ืื ืชืืื ืืกืขืืฃ ืืคืจืืืจืื.
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 ืืืืืื ืฉืื ื, ืืื ืื ืืืืื, ืืืืืื ืฉ-React ืืฉืชืืฉ ืืขืจื ืืจืืจืช ืืืืื ืืชืืจ ืชืืงืืืช ืืคืื, ืืื ืืืงืจื ืฉื Angular ืื ืืฉืื ืืืจ, ืืืื ืฆืืจื ืืฉื ืืช ืืช ืืคืจืืืจ ืืื ืืคื ืืฆืืจื.
ืขืืฉืื ืืืื ื ืกืชืื ืขื ืงืืข 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'
ืชืกืชืื ืขื ืืชืืื ื ืืฉืืืฉืืช ืืืจืืืขืืช. ืฉืชืืื ืืืืืจืืช ืืชืืื ืืช Docker, ืื ืืชื ืืจืืืช ืืืืจืืจ ืืืืคื ืื ืืืืขืืช.
ืืชืืื ื ืืฉืืืฉืืช ืืื web-app-builder ืืืื ืืืืขื ื-nodeshift/ubi8-s2i-web-app ืืชืืื 10.x ื-
ืืจืืืขืืช ืืื ืชืืื ืช NGINX (ืืจืกื 1.12) ืขื ืืชื ืืืืจืื
ืขืืฉืื ืืืื ื ืกืชืื ืขื ืฉืชื ืืชืืื ืืช ืืจืืฉืื ืืช. ืฉื ืืื ืจืืงืื ืืืชืืื ืื ืืฆืจืื ืจืง ืืฉืื ืืื ืืื. ืืชืืื ื ืืจืืฉืื ื, react-web-app-builder, ืชืืื ืชืืฆืื ืฉื ืฉืื ืืจืืื ืฉืืฉืื ืืช ืชืืื ืช ื-web-app-builder-runtime ืืงืื ืืืงืืจ ืฉืื ื. ืืื ืืืกืคื ื "-ืืื ื" ืืฉื ืืชืืื ื ืืื.
ืืชืืื ื ืืฉื ืืื - 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 ืืืืจืช ืฉืืชืืฆืื ืฉื ืืื ืืื ืืื ืชืืืงื ืืืืชื ืชืืื ืช react-web-app-builder ืฉืจืืื ื ืงืฆืช ืงืืื ืืงืืข ImageStreams.
ืืฉืืจื ืฉืืืชืจืชื 2 ืืืืจืช ืื ืืืืคื ืืืฉืื ืืช ืืงืื. ืืืงืจื ืฉืื ื, ืืื ืืืืจ git, ืืืชืืงืื ืฉื ืืืืงืื, ื-ref ืืชืืงืืืช ืืืงืฉืจ ื ืงืืขืื ืืคื ืืคืจืืืจืื ืฉืืืจ ืจืืื ื ืืืขืื.
ืืฉืืจื ืฉืืืชืจืชื 3 ืืื ืื ืฉืืืจ ืจืืื ื ืืกืขืืฃ ืืคืจืืืจืื. ืืื ืืืกืืฃ ืืช ืืฉืชื ื ืืกืืืื OUTPUT_DIR, ืฉืืืืืื ืฉืื ื ืืื build.
ืืฉืืจื ืฉืืืชืจืชื 4 ืืืืจืช ืืืฉืชืืฉ ืืชืืื ืช ื-web-app-builder-runtime, ืืืชื ืจืืื ื ืืืจ ืืงืืข ImageStream.
ืฉืืจื ืฉืืืชืจืชื 5 ืืืืจืช ืฉืื ืื ื ืจืืฆืื ืืืฉืชืืฉ ื-build ืืฆืืืจ ืื ืชืืื ืช S2I ืชืืืืช ืืื, ืืชืืื ืช Web App Builder ืื. ืืืฉืงื ืืจืืฉืื ื, ืืืืจ ืืฉืืืช ืฉืื ืืืจืืื, ืืชืืื ื ืชืฉืืืจ ืืช ืชืืงืืืช 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
ืื ืชืฆืืจืช ืืื ืืื ืืฉื ืืื ืืื react-web-app-runtime, ืืืื ืืชืืืื ืื ืกืื ืืจืืืช.
ืืฉืืจื ืฉืืืชืจืชื 1 ืืื ื ืืืฉื - ืืื ืคืฉืื ืืืืจืช ืฉืชืืฆืืช ืืื ืืื ืืืื ืกืช ืืชืืื ืช ืจืact-web-app-runtime.
ืืฉืืจื ืฉืืืชืจืชื 2, ืืื ืืชืฆืืจื ืืงืืืืช, ืืฆืืื ืช ืืืืคื ืืืฉืื ืืช ืงืื ืืืงืืจ. ืืื ืฉืืื ืื ืฉืืื ืื ืื ื ืืืืจืื ืฉืื ื ืืงื ืืืชืืื ื. ืืชืจื ืืื, ืืืชืืื ื ืฉืืฆืจื ื ืื ืขืชื - ื-react-web-app-builder (ืืกืืื ืืฉืืจื ืฉืืืชืจืชื 3). ืืงืืฆืื ืฉืื ื ืจืืฆืื ืืืฉืชืืฉ ืืื ื ืืฆืืื ืืชืื ืืชืืื ื ืืืืงืืื ืฉื ืืืืืจ ืืฉืืจื ืฉืืืชืจืชื 4, ืืืงืจื ืฉืื ื ืื /opt/app-root/output/. ืื ืืชื ืืืืจ, ืืื ืืืืืกื ืื ืืงืืฆืื ืฉื ืืฆืจื ืขื ืกืื ืชืืฆืืืช ืื ืืืช ืืืคืืืงืฆืื ืฉืื ื.
ืชืืงืืืช ืืืขื ืฉืฆืืื ื ืืืื ื ืขื ืชืืืืช 5 ืืื ืคืฉืื ืืกืคืจืืื ืื ืืืืืช (ืื ืืื, ืืืืจ, ืคืืขื ืืชืื ืืฉืื ืงืกืื ืืฉื OpenShift, ืืื ืืืืฉื ืืืงืืื ืฉืื).
ืงืืข ืืืกืืจืืืื - ืงื ืฉืืืชืจืชื 6 - ืืืื ืื ืืชืฆืืจืช ืืื ืืื ืืจืืฉืื ื. ืจืง ืฉืืคืขื ืื ืื ื ืืืืืื ืืืฉืชืืฉ ื-nginx-image-runtime, ืฉืืืจ ืจืืื ื ืืงืืข ImageStream.
ืืืกืืฃ, ืืฉืืจื ืฉืืืชืจืชื 7 ืืื ืงืืข ืฉื ืืจืืืจืื ืฉืืคืขืื ืืช ืืืื ื ืืื ืืื ืคืขื ืฉืชืืื ืช React-Web-App-Builder ืืฉืชื ื.
ืืืจืช, ืืชืื ืืช ืืื ืืืืื ืชืฆืืจืช ืคืจืืกื ืื ืกืื ืืจืืืช, ืืื ืื ืืืจืื ืฉืงืฉืืจืื ืืฉืืจืืชืื ืืืืกืืืืื, ืืื ืื ื ืืื ืก ืืืชืจ ืืื ืืคืจืืื. ืฉืืื ืื ืฉืืชืืื ื ืฉืชืืคืจืก ืืื ืชืืื ืช ืจืact-web-app-runtime.
ืคืจืืกืช ืืืฉืืืื
ืื ืขืืฉืื, ืืืืจ ืฉืืกืชืืื ื ืขื ืืชืื ืืช, ืืืื ื ืจืื ืืืฆื ืืืฉืชืืฉ ืื ืืื ืืคืจืืก ืืคืืืงืฆืื.
ืื ื ืืืืืื ืืืฉืชืืฉ ืืืื ืืืงืื OpenShift ืฉื ืงืจื oc ืืื ืืคืจืืก ืืช ืืชืื ืืช ืฉืื ื:
$ 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.
ืืคืงืืื ืืฉื ืืื ืคืฉืื ืืืฆืจืช ืืืฉืื ืืืฉ ืืืืืกืก ืขื ืชืื ืืช ืื.
ืืืืจ ืฉืืคืงืืืืช ืืืื ืืคืขืื, ื ืจืื ืฉืืฉ ืื ื ืฉื ื ืืืืืืื:
ืืืืืจื ืืืกื ืกืงืืจื ืืืืืช, ื ืจืื ืืช ืืคืื ืฉืืืฉืง:
ืืืฅ ืขื ืืงืืฉืืจ ืื ืืขืืจ ืืืคืืืงืฆืื ืฉืื ื, ืฉืืื ืืฃ ืืคืืืงืฆืืืช React ืืืืืืจ ืืืจืืจืช ืืืื:
ืืืกืฃ 1
ืืืืืื Angular ืืฉ ืื ื ืื
ืืืคืืก ืืื ืืื, ืืืขื ืืืฉืชื ื OUTPUT_DIR.
ืืืกืฃ 2
ืืืืืจ ืื ืืฉืชืืฉื ื ื-NGINX ืืฉืจืช ืืื ืืจื ื, ืืื ืื ืงื ืืืืืืฃ ืืืชื ื-Apache, ืคืฉืื ืฉื ื ืืช ืืชืื ืืช ืืงืืืฅ
ืืกืงื ื
ืืืืง ืืจืืฉืื ืฉื ืกืืจื ืื, ืืจืืื ื ืืืฆื ืืคืจืืก ืืืืืจืืช ืืืฉืืื ืืื ืืจื ื ืืืืจื ืืื ืืคืืืคืืจืืช OpenShift. ืืืื ืืืงื ื ืื ืขืืฉื ืชืืื ื ืฉื ืืคืืืงืฆืืืช Web ืืืืฆื ื ืืชื ืืฉืื ืืืชื ืขื ืฉืจืช ืืื ืืจื ื ืืืืจ ืืื NGINX ืืืืฆืขืืช ืื ืืื ืืฉืืจืฉืจืช ืืื ืืืฆืืจ ืื ืืืช ืืคืืืงืฆืื ืืืื ื ืืืชืจ ืืืืฆืืจ. ืืืืืจ ืืื ืืืืืจืื ืืกืืจื ืื, ื ืจืื ืืืฆื ืืืคืขืื ืฉืจืช ืคืืชืื ืขืืืจ ืืืคืืืงืฆืื ืฉืื ื-OpenShift ืืืืืืื ืกื ืืจืื ืฉื ืงืืฆืื ืืงืืืืื ืืืจืืืงืื.
ืชืืื ืกืืจืช ืืืืจืื ืื
- ืืืง 1:
ืืืฆื ืืคืจืืก ืืืฉืืื ืืื ืืจื ื ืืืืจื ืืื ืืืื ืฉืืืื ืืืื ; - ืืืง 2: ืืืฆื ืืืฉืชืืฉ ืืชืืื ืช S2I ืืืฉื ืขื ืชืืื ืช ืฉืจืช HTTP ืงืืืืช, ืืืื NGINX, ืืืืฆืขืืช ืืืืืื OpenShift ืืฉืืืืื ืืคืจืืกืช ืืืฆืืจ;
- ืืืง 3: ืืืฆื ืืืคืขืื ืฉืจืช ืคืืชืื ืขืืืจ ืืืคืืืงืฆืื ืฉืื ืืคืืืคืืจืืช OpenShift ืืืกื ืืจื ืืืชื ืขื ืืขืจืืช ืืงืืฆืื ืืืงืืืืช.
ืืฉืืืื ื ืืกืคืื
- ืกืคืจ ืืืงืืจืื ื ืืืื ื
ืคืจืืกื ื-OpenShift . - ืืืืข ืขื
OpenShift ื-Kubernetes .
ืืงืืจ: www.habr.com