5.2. 将 Deployment 修改为区域 Aware
目前,file-uploader
Deployment 不知道区,并可调度同一区域中的所有 Pod。在这种情况下,如果站点中断,则应用将不可用。如需更多信息,请参阅使用 pod 拓扑分布约束
为了让我们的应用程序区了解,我们需要在应用部署配置中添加 pod 放置规则。运行以下命令并查看下方所示的输出:在下一步中,我们将修改 Deployment 以使用拓扑区域标签,如以下输出中的 Start 和 End 部分所示。
$ 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
将部署扩展为零 个 Pod,然后重新扩展到 四个 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
验证这四个 Pod 分布到 datacenter1 和 datacenter2 区域中的四个节点上。
$ 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 Web 应用上传新文件。
查找创建的路由:
$ 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
使用上述路由将浏览器指向 Web 应用。您的路由会有所不同。
Web 应用只需列出所有上传的文件,并且能够上传新文件并下载现有数据。现在,还没有任何内容。
从本地计算机中选择一个任意文件并将其上传到应用程序。
图 5.1. 基于 PHP 的简单文件上传工具
- 单击 已上传文件列表,以查看所有当前上传的文件的列表。
OpenShift Container Platform 镜像 registry、入口路由和监控服务不被区识别