5장. 영역 인식 샘플 애플리케이션 설치
이 섹션을 사용하여 OpenShift Container Storage Metro Disaster 복구 설정을 검증하기 위해 영역 인식 샘플 애플리케이션을 배포합니다.
데이터 영역 간 대기 시간을 사용하면 노드와 영역(예: 동일한 위치에 있는 모든 노드) 간 대기 시간이 짧은 OpenShift 클러스터에 비해 성능 저하가 발생할 수 있습니다. 성능이 저하되는 정도는 스토리지(예: 쓰기 트래픽)를 사용하는 영역과 애플리케이션 동작 사이의 대기 시간에 따라 달라집니다. 필요한 서비스 수준에 대한 애플리케이션 성능을 충분히 보장하기 위해 Metro DR 클러스터 구성으로 중요한 애플리케이션을 테스트하십시오.
5.1. 영역 인식 샘플 애플리케이션 설치
이 섹션에서는 ocs-storagecluster-cephfs
스토리지 클래스를 사용하여 동시에 여러 포드에서 사용할 수 있는 Read-Write-Many(RWX) PVC를 생성합니다. 우리가 사용할 애플리케이션을 File Uploader라고 합니다.
이 애플리케이션은 파일을 저장하기 위해 동일한 RWX 볼륨을 공유하므로 사이트 중단 시 계속 사용할 수 있도록 애플리케이션을 토폴로지 영역에 분산하는 방법을 보여줄 수 있습니다. OpenShift Container Storage는 영역 인식과 고가용성을 갖춘 Metro DR 확장 클러스터로 구성되어 있기 때문에 영구 데이터 액세스에도 사용됩니다.
새 프로젝트를 생성합니다.
oc new-project my-shared-storage
file-uploader라는 예제 PHP 애플리케이션을 배포합니다.
oc new-app openshift/php:7.2-ubi8~https://github.com/christianh814/openshift-php-upload-demo --name=file-uploader
샘플 출력:
Found image 4f2dcc0 (9 days old) in image stream "openshift/php" under tag "7.2-ubi8" for "openshift/php:7.2- ubi8" Apache 2.4 with PHP 7.2 ----------------------- PHP 7.2 available as container is a base platform for building and running various PHP 7.2 applications and frameworks. PHP is an HTML-embedded scripting language. PHP attempts to make it easy for developers to write dynamically generated web pages. PHP also offers built-in database integration for several commercial and non-commercial database management systems, so writing a database-enabled webpage with PHP is fairly simple. The most common use of PHP coding is probably as a replacement for CGI scripts. Tags: builder, php, php72, php-72 * A source build using source code from https://github.com/christianh814/openshift-php-upload-demo will be cr eated * The resulting image will be pushed to image stream tag "file-uploader:latest" * Use 'oc start-build' to trigger a new build --> Creating resources ... imagestream.image.openshift.io "file-uploader" created buildconfig.build.openshift.io "file-uploader" created deployment.apps "file-uploader" created service "file-uploader" created --> Success Build scheduled, use 'oc logs -f buildconfig/file-uploader' to track its progress. Application is not exposed. You can expose services to the outside world by executing one or more of the commands below: 'oc expose service/file-uploader' Run 'oc status' to view your app.
빌드 로그를 보고 애플리케이션이 배포될 때까지 기다립니다.
oc logs -f bc/file-uploader -n my-shared-storage
출력 예:
Cloning "https://github.com/christianh814/openshift-php-upload-demo" ... [...] Generating dockerfile with builder image image-registry.openshift-image-regis try.svc:5000/openshift/php@sha256:d97466f33999951739a76bce922ab17088885db610c 0e05b593844b41d5494ea STEP 1: FROM image-registry.openshift-image-registry.svc:5000/openshift/php@s ha256:d97466f33999951739a76bce922ab17088885db610c0e05b593844b41d5494ea STEP 2: LABEL "io.openshift.build.commit.author"="Christian Hernandez <christ ian.hernandez@yahoo.com>" "io.openshift.build.commit.date"="Sun Oct 1 1 7:15:09 2017 -0700" "io.openshift.build.commit.id"="288eda3dff43b02f7f7 b6b6b6f93396ffdf34cb2" "io.openshift.build.commit.ref"="master" " io.openshift.build.commit.message"="trying to modularize" "io.openshift .build.source-location"="https://github.com/christianh814/openshift-php-uploa d-demo" "io.openshift.build.image"="image-registry.openshift-image-regi stry.svc:5000/openshift/php@sha256:d97466f33999951739a76bce922ab17088885db610 c0e05b593844b41d5494ea" STEP 3: ENV OPENSHIFT_BUILD_NAME="file-uploader-1" OPENSHIFT_BUILD_NAMESP ACE="my-shared-storage" OPENSHIFT_BUILD_SOURCE="https://github.com/christ ianh814/openshift-php-upload-demo" OPENSHIFT_BUILD_COMMIT="288eda3dff43b0 2f7f7b6b6b6f93396ffdf34cb2" STEP 4: USER root STEP 5: COPY upload/src /tmp/src STEP 6: RUN chown -R 1001:0 /tmp/src STEP 7: USER 1001 STEP 8: RUN /usr/libexec/s2i/assemble ---> Installing application source... => sourcing 20-copy-config.sh ... ---> 17:24:39 Processing additional arbitrary httpd configuration provide d by s2i ... => sourcing 00-documentroot.conf ... => sourcing 50-mpm-tuning.conf ... => sourcing 40-ssl-certs.sh ... STEP 9: CMD /usr/libexec/s2i/run STEP 10: COMMIT temp.builder.openshift.io/my-shared-storage/file-uploader-1:3 b83e447 Getting image source signatures [...]
Push successful(내보내기 성공)이 표시되면 명령 프롬프트에서 tail 모드로 돌아갑니다.
new-app 명령은 git 리포지토리에서 직접 애플리케이션을 배포하고 OpenShift 템플릿을 사용하지 않으므로 OpenShift 경로 리소스는 기본적으로 생성되지 않습니다. 경로를 수동으로 생성해야 합니다.
4개의 복제본으로 확장하고 서비스를 노출하여 애플리케이션 영역을 인식하고 사용할 수 있도록 합니다.
oc expose svc/file-uploader -n my-shared-storage oc scale --replicas=4 deploy/file-uploader -n my-shared-storage oc get pods -o wide -n my-shared-storage
몇 분 내에 4개의 파일 업로더 Pod가 있어야 합니다. Running STATUS에 파일 업로더 Pod 4개가 있을 때까지 위의 명령을 반복합니다.
PersistentVolumeClaim을 생성하여 oc set volume 명령을 사용하여 애플리케이션에 연결할 수 있습니다. 다음을 실행합니다
oc set volume deploy/file-uploader --add --name=my-shared-storage \ -t pvc --claim-mode=ReadWriteMany --claim-size=10Gi \ --claim-name=my-shared-storage --claim-class=ocs-storagecluster-cephfs \ --mount-path=/opt/app-root/src/uploaded \ -n my-shared-storage
이 명령은 다음을 수행합니다.
- 영구 볼륨 클레임 만들기
- 볼륨 정의를 포함하도록 애플리케이션 배포를 업데이트합니다.
- 지정된 mount-path에 볼륨을 연결하도록 애플리케이션 배포를 업데이트합니다.
- 4 애플리케이션 포드의 새 배포 발생
이제 볼륨을 추가한 결과를 살펴보겠습니다.
oc get pvc -n my-shared-storage
출력 예:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE my-shared-storage Bound pvc-5402cc8a-e874-4d7e-af76-1eb05bd2e7c7 10Gi RWX ocs-storagecluster-cephfs 52s
ACCESSMODE가 RWX(ReadWriteMany)로 설정되어 있는지 확인합니다.
4개의 file-uploaderPods가 모두 동일한 RWX 볼륨을 사용하고 있습니다. 이 ACCESSMODE가 없으면 OpenShift는 동일한 영구 볼륨에 여러 포드를 안정적으로 연결하지 않습니다. RWO(ReadWriteOnce) 영구 볼륨을 사용하는 배포를 확장하려고 하면 Pod가 동일한 노드에 공동 배치됩니다.