5.2. 영역 인식으로 배포 수정

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

  1. 앱 영역을 인식하려면 애플리케이션 배포 구성에 포드 배치 규칙을 추가해야 합니다. 다음 명령을 실행하고 아래 표시된 대로 출력을 검토합니다. 다음 단계에서는 아래 출력의 시작 및 끝 섹션에 표시된 대로 토폴로지 영역 레이블을 사용하도록 배포를 수정합니다.

    $ oc get deployment file-uploader -o yaml -n my-shared-storage | less

    출력 예:

    [...]
    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
    [...]
  2. 배포를 편집하고 위와 같이 시작과 끝 사이에 다음과 같은 새 행을 추가합니다.

    $ oc edit deployment file-uploader -n my-shared-storage
    [...]
          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:
    [...]

    출력 예:

    deployment.apps/file-uploader edited
  3. 배포를 0개의 Pod 확장한 다음 4개의 Pod로 돌아갑니다. 이는 Pod 배치 측면에서 배포가 변경되었기 때문에 필요합니다.

    oc scale deployment file-uploader --replicas=0 -n my-shared-storage

    출력 예:

    deployment.apps/file-uploader scaled

    4개의 Pod로 되돌아갑니다.

    $ oc scale deployment file-uploader --replicas=4 -n my-shared-storage

    출력 예:

    deployment.apps/file-uploader scaled
  4. 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

    출력 예:

       1 perf1-mz8bt-worker-d2hdm
       1 perf1-mz8bt-worker-k68rv
       1 perf1-mz8bt-worker-ntkp8
       1 perf1-mz8bt-worker-qpwsr
    $ oc get nodes -L topology.kubernetes.io/zone | grep datacenter | grep -v master

    출력 예:

    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
  5. 브라우저에서 file-uploader 웹 애플리케이션을 사용하여 새 파일을 업로드합니다.

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

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

      그러면 이 경로와 유사한 경로가 반환됩니다.

      샘플 출력:

      http://file-uploader-my-shared-storage.apps.cluster-ocs4-abdf.ocs4-abdf.sandbox744.opentlc.com
    2. 위의 경로를 사용하여 브라우저에서 웹 애플리케이션을 가리킵니다. 경로는 다릅니다.

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

    3. 로컬 시스템에서 임의의 파일을 선택하고 앱에 업로드합니다.

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

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

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