5.2. 영역 인식으로 배포 수정
현재 file-uploader
배포는 영역을 인식하지 않으며 동일한 영역에 있는 모든 Pod를 예약할 수 있습니다. 이 경우 사이트 중단이 발생하면 애플리케이션을 사용할 수 없게 됩니다. 자세한 내용은 Pod 토폴로지 분배 제약 조건사용을 참조하십시오.
앱 영역을 인식하려면 애플리케이션 배포 구성에 포드 배치 규칙을 추가해야 합니다. 다음 명령을 실행하고 아래 표시된 대로 출력을 검토합니다. 다음 단계에서는 아래 출력의 시작 및 끝 섹션에 표시된 대로 토폴로지 영역 레이블을 사용하도록 배포를 수정합니다.
$ 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 [...]
배포를 편집하고 위와 같이 시작과 끝 사이에 다음과 같은 새 행을 추가합니다.
$ 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
배포를 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개의 포드가 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
브라우저에서 file-uploader 웹 애플리케이션을 사용하여 새 파일을 업로드합니다.
생성된 경로를 찾습니다.
$ 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
위의 경로를 사용하여 브라우저에서 웹 애플리케이션을 가리킵니다. 경로는 다릅니다.
웹 애플리케이션은 업로드한 모든 파일을 나열하고 새 파일을 업로드하고 기존 데이터를 다운로드할 수 있는 기능을 제공합니다. 현재 아무 것도 없습니다.
로컬 시스템에서 임의의 파일을 선택하고 앱에 업로드합니다.
그림 5.1. 간단한 PHP 기반 파일 업로드 도구
- 업로드된 파일 목록을 클릭하여 현재 업로드된 모든 파일 목록을 확인합니다.
OpenShift Container Platform 이미지 레지스트리, 수신 라우팅 및 모니터링 서비스는 영역을 인식하지 않습니다.