5.7. 영역 Aware 샘플 애플리케이션 설치


영역 인식 샘플 애플리케이션을 배포하여 OpenShift Data Foundation의 확장 클러스터 설정이 올바르게 구성되었는지 확인합니다.

중요

데이터 영역 간 대기 시간을 사용하면 노드와 영역(예: 동일한 위치에 있는 모든 노드) 간에 대기 시간이 짧은 OpenShift 클러스터에 비해 성능이 저하될 것으로 예상할 수 있습니다. 성능 저하의 속도 또는 성능은 영역 간 대기 시간과 스토리지를 사용한 애플리케이션 동작(예: 쓰기 트래픽)에 따라 달라집니다. 필요한 서비스 수준에 충분한 애플리케이션 성능을 보장하기 위해 클러스터 구성을 확장하여 중요한 애플리케이션을 테스트해야 합니다.

ReadWriteMany(RWX) PVC(영구 볼륨 클레임)는 ocs-storagecluster-cephfs 스토리지 클래스를 사용하여 생성됩니다. 여러 Pod에서 새로 생성된 RWX PVC를 동시에 사용합니다. 사용되는 애플리케이션을 File Uploader라고 합니다.

사이트 중단 시 애플리케이션을 계속 사용할 수 있도록 애플리케이션이 토폴로지 영역에 분배되는 방법에 대한 데모입니다.

참고

이 데모는 이 애플리케이션이 파일을 저장하기 위해 동일한 RWX 볼륨을 공유하므로 가능합니다. Red Hat OpenShift Data Foundation은 영역 인식 및 고가용성을 사용하여 확장된 클러스터로 구성되어 있기 때문에 영구 데이터 액세스에도 작동합니다.

  1. 새 프로젝트를 생성합니다.

    $ oc new-project my-shared-storage
    Copy to Clipboard Toggle word wrap
  2. file-uploader라는 예제 PHP 애플리케이션을 배포합니다.

    $ oc new-app openshift/php:latest~https://github.com/mashetty330/openshift-php-upload-demo --name=file-uploader
    Copy to Clipboard Toggle word wrap

    출력 예:

    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.
    Copy to Clipboard Toggle word wrap
  3. 빌드 로그를 보고 애플리케이션이 배포될 때까지 기다립니다.

    $ oc logs -f bc/file-uploader -n my-shared-storage
    Copy to Clipboard Toggle word wrap

    출력 예:

    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
    
    [...]
    Copy to Clipboard Toggle word wrap

    명령 프롬프트는 푸시 성공이 표시된 후 tail 모드에서 out of the tail 모드를 반환합니다.

    참고

    new-app 명령은 Git 리포지토리에서 직접 애플리케이션을 배포하고 OpenShift 템플릿을 사용하지 않으므로 OpenShift 경로 리소스는 기본적으로 생성되지 않습니다. 경로를 수동으로 생성해야 합니다.

애플리케이션 스케일링

  1. 애플리케이션을 4개의 복제본으로 확장하고 해당 서비스를 노출하여 애플리케이션 영역을 인식하고 사용할 수 있도록 합니다.

    $ oc expose svc/file-uploader -n my-shared-storage
    Copy to Clipboard Toggle word wrap
    $ oc scale --replicas=4 deploy/file-uploader -n my-shared-storage
    Copy to Clipboard Toggle word wrap
    $ oc get pods -o wide -n my-shared-storage
    Copy to Clipboard Toggle word wrap

    몇 분 내에 4개의 file-uploader Pod가 있어야 합니다. 실행 중 상태에 4개의 file-uploader Pod가 있을 때까지 위의 명령을 반복합니다.

  2. PVC를 생성하여 애플리케이션에 연결합니다.

    $ 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
    Copy to Clipboard Toggle word wrap

    이 명령은 다음과 같습니다.

    • PVC를 생성합니다.
    • 볼륨 정의를 포함하도록 애플리케이션 배포를 업데이트합니다.
    • 지정된 mount-path에 볼륨 마운트를 연결하도록 애플리케이션 배포를 업데이트합니다.
    • 4개의 애플리케이션 포드를 사용하여 새 배포를 생성합니다.
  3. 볼륨을 추가한 결과를 확인합니다.

    $ oc get pvc -n my-shared-storage
    Copy to Clipboard Toggle word wrap

    출력 예:

    NAME                STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS                AGE
    my-shared-storage   Bound    pvc-5402cc8a-e874-4d7e-af76-1eb05bd2e7c7   10Gi       RWX            ocs-storagecluster-cephfs   52s
    Copy to Clipboard Toggle word wrap

    ACCESS MODE 가 RWX로 설정되어 있는지 확인합니다.

    4개의 file-uploader Pod 모두 동일한 RWX 볼륨을 사용합니다. 이 액세스 모드가 없으면 OpenShift에서 동일한 PV(영구 볼륨)에 여러 Pod를 안정적으로 연결하지 않습니다. RWO(ReadWriteOnce) PV를 사용하는 배포를 확장하려고 하면 Pod가 동일한 노드에 배치될 수 있습니다.

5.7.1. 설치 후 애플리케이션 스케일링

프로세스

  1. 애플리케이션을 4개의 복제본으로 확장하고 해당 서비스를 노출하여 애플리케이션 영역을 인식하고 사용할 수 있도록 합니다.

    $ oc expose svc/file-uploader -n my-shared-storage
    Copy to Clipboard Toggle word wrap
    $ oc scale --replicas=4 deploy/file-uploader -n my-shared-storage
    Copy to Clipboard Toggle word wrap
    $ oc get pods -o wide -n my-shared-storage
    Copy to Clipboard Toggle word wrap

    몇 분 내에 4개의 file-uploader Pod가 있어야 합니다. 실행 중 상태에 4개의 file-uploader Pod가 있을 때까지 위의 명령을 반복합니다.

  2. PVC를 생성하여 애플리케이션에 연결합니다.

    $ 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
    Copy to Clipboard Toggle word wrap

    이 명령은 다음과 같습니다.

    • PVC를 생성합니다.
    • 볼륨 정의를 포함하도록 애플리케이션 배포를 업데이트합니다.
    • 지정된 mount-path에 볼륨 마운트를 연결하도록 애플리케이션 배포를 업데이트합니다.
    • 4개의 애플리케이션 포드를 사용하여 새 배포를 생성합니다.
  3. 볼륨을 추가한 결과를 확인합니다.

    $ oc get pvc -n my-shared-storage
    Copy to Clipboard Toggle word wrap

    출력 예:

    NAME                STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS                AGE
    my-shared-storage   Bound    pvc-5402cc8a-e874-4d7e-af76-1eb05bd2e7c7   10Gi       RWX            ocs-storagecluster-cephfs   52s
    Copy to Clipboard Toggle word wrap

    ACCESS MODE 가 RWX로 설정되어 있는지 확인합니다.

    4개의 file-uploader Pod 모두 동일한 RWX 볼륨을 사용합니다. 이 액세스 모드가 없으면 OpenShift에서 동일한 PV(영구 볼륨)에 여러 Pod를 안정적으로 연결하지 않습니다. RWO(ReadWriteOnce) PV를 사용하는 배포를 확장하려고 하면 Pod가 동일한 노드에 배치될 수 있습니다.

5.7.2. 배포를 영역 Aware로 수정

현재 file-uploader Deployment는 영역을 인식하지 않으며 동일한 영역에 있는 모든 Pod를 예약할 수 있습니다. 이 경우 사이트 중단이 있는 경우 애플리케이션을 사용할 수 없습니다. 자세한 내용은 Pod 토폴로지 분배 제약 조건을 사용하여 Pod 배치 제어를 참조하십시오.

  1. 애플리케이션 배포 구성에 포드 배치 규칙을 추가하여 애플리케이션 영역을 인식하도록 합니다.

    1. 다음 명령을 실행하고 출력을 검토합니다.

      $ oc get deployment file-uploader -o yaml -n my-shared-storage | less
      Copy to Clipboard Toggle word wrap

      출력 예:

      [...]
      spec:
        progressDeadlineSeconds: 600
        replicas: 4
        revisionHistoryLimit: 10
        selector:
          matchLabels:
            deployment: file-uploader
        strategy:
          rollingUpdate:
            maxSurge: 25%
            maxUnavailable: 25%
          type: RollingUpdate
        template:
          metadata:
            annotations:
              openshift.io/generated-by: OpenShiftNewApp
            creationTimestamp: null
            labels:
              deployment: file-uploader
            spec: # <-- Start inserted lines after here
              containers: # <-- End inserted lines before here
              - image: image-registry.openshift-image-registry.svc:5000/my-shared-storage/file-uploader@sha256:a458ea62f990e431ad7d5f84c89e2fa27bdebdd5e29c5418c70c56eb81f0a26b
                imagePullPolicy: IfNotPresent
                name: file-uploader
      [...]
      Copy to Clipboard Toggle word wrap
    2. 토폴로지 영역 레이블을 사용하도록 배포를 편집합니다.

      $ oc edit deployment file-uploader -n my-shared-storage
      Copy to Clipboard Toggle word wrap

      시작종료 사이에 다음 새 행을 추가합니다(이전 단계의 출력에 표시됨).

      [...]
          spec:
            topologySpreadConstraints:
              - labelSelector:
                  matchLabels:
                    deployment: file-uploader
                maxSkew: 1
                topologyKey: topology.kubernetes.io/zone
                whenUnsatisfiable: DoNotSchedule
              - labelSelector:
                  matchLabels:
                    deployment: file-uploader
                maxSkew: 1
                topologyKey: kubernetes.io/hostname
                whenUnsatisfiable: ScheduleAnyway
            nodeSelector:
              node-role.kubernetes.io/worker: ""
            containers:
      [...]
      Copy to Clipboard Toggle word wrap

      출력 예:

      deployment.apps/file-uploader edited
      Copy to Clipboard Toggle word wrap
  2. 배포를 제로 포드로 축소한 다음 Pod 4 개로 돌아갑니다. 이는 배포가 Pod 배치 측면에서 변경되었기 때문에 필요합니다.

    Pod 0으로 축소
    $ oc scale deployment file-uploader --replicas=0 -n my-shared-storage
    Copy to Clipboard Toggle word wrap

    출력 예:

    deployment.apps/file-uploader scaled
    Copy to Clipboard Toggle word wrap
    Pod 4 개까지 확장
    $ oc scale deployment file-uploader --replicas=4 -n my-shared-storage
    Copy to Clipboard Toggle word wrap

    출력 예:

    deployment.apps/file-uploader scaled
    Copy to Clipboard Toggle word wrap
  3. 4개의 포드가 datacenter1 및 datacenter2 영역의 4개의 노드에 분산되어 있는지 확인합니다.

    $ oc get pods -o wide -n my-shared-storage | egrep '^file-uploader'| grep -v build | awk '{print $7}' | sort | uniq -c
    Copy to Clipboard Toggle word wrap

    출력 예:

       1 perf1-mz8bt-worker-d2hdm
       1 perf1-mz8bt-worker-k68rv
       1 perf1-mz8bt-worker-ntkp8
       1 perf1-mz8bt-worker-qpwsr
    Copy to Clipboard Toggle word wrap

    사용되는 영역 레이블을 검색합니다.

    $ oc get nodes -L topology.kubernetes.io/zone | grep datacenter | grep -v master
    Copy to Clipboard Toggle word wrap

    출력 예:

    perf1-mz8bt-worker-d2hdm   Ready    worker   35d   v1.20.0+5fbfd19   datacenter1
    perf1-mz8bt-worker-k68rv   Ready    worker   35d   v1.20.0+5fbfd19   datacenter1
    perf1-mz8bt-worker-ntkp8   Ready    worker   35d   v1.20.0+5fbfd19   datacenter2
    perf1-mz8bt-worker-qpwsr   Ready    worker   35d   v1.20.0+5fbfd19   datacenter2
    Copy to Clipboard Toggle word wrap
  4. 새 파일을 업로드하려면 브라우저를 사용하여 file-uploader 웹 애플리케이션을 사용합니다.

    1. 생성된 경로를 찾습니다.

      $ oc get route file-uploader -n my-shared-storage -o jsonpath --template="http://{.spec.host}{'\n'}"
      Copy to Clipboard Toggle word wrap

      출력 예:

      http://file-uploader-my-shared-storage.apps.cluster-ocs4-abdf.ocs4-abdf.sandbox744.opentlc.com
      Copy to Clipboard Toggle word wrap
    2. 이전 단계의 경로를 사용하여 브라우저에서 웹 애플리케이션을 가리킵니다.

      웹 애플리케이션은 업로드된 모든 파일을 나열하고 새 파일을 업로드할 수 있는 기능을 제공하며 기존 데이터를 다운로드할 수 있습니다. 바로 지금, 아무 것도 없습니다.

    3. 로컬 시스템에서 임의의 파일을 선택하여 애플리케이션에 업로드합니다.

      1. 파일 선택을 클릭하여 임의의 파일을 선택합니다.
      2. 업로드를 클릭합니다.

        그림 5.1. 간단한 PHP 기반 파일 업로드 도구

    4. 업로드된 파일 목록을 클릭하여 현재 업로드된 모든 파일 목록을 확인합니다.
참고

OpenShift Container Platform 이미지 레지스트리, 수신 라우팅 및 모니터링 서비스는 영역을 인식하지 못합니다.

Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다. 최신 업데이트를 확인하세요.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

Theme

© 2026 Red Hat
맨 위로 이동