17.3. AWS Local Zones または Wavelength Zones でのユーザーワークロードの作成
Amazon Web Service (AWS) の Local Zones または Wavelength Zone インフラストラクチャーを作成し、クラスターをデプロイした後、エッジコンピュートノードを使用して Local Zones または Wavelength Zones のサブネットにユーザーワークロードを作成できます。
インストールプログラムを使用してクラスターを作成すると、インストールプログラムは各エッジコンピュートノードに NoSchedule
taint effect を自動的に指定します。これは、Pod が taint に対して指定された許容範囲に一致しない場合、スケジューラーは新しい Pod またはデプロイメントをノードに追加しないことを意味します。taint を変更することで、Local Zones または Wavelength Zones の各サブネットにノードがワークロードを作成する方法をより適切に制御できます。
インストールプログラムは、node-role.kubernetes.io/edge
ラベルと node-role.kubernetes.io/worker
ラベルを含むコンピュートマシンセットのマニフェストファイルを作成します。これらのラベルは、Local Zones または Wavelength Zones のサブネット内にある各エッジコンピュートノードに適用されます。
この手順の例は、Local Zones インフラストラクチャーを対象としています。Wavelength Zone インフラストラクチャーを使用している場合は、Wavelength Zone インフラストラクチャーでサポートされている機能に合わせて例を変更してください。
前提条件
-
OpenShift CLI (
oc
) にアクセスできる。 - Local Zones または Wavelength Zones のサブネットが定義された Virtual Private Cloud (VPC) にクラスターをデプロイしている。
-
Local Zones または Wavelength Zones のサブネット上のエッジコンピュートノードのコンピュートマシンセットが、
node-role.kubernetes.io/edge
の taint を指定していることを確認している。
手順
Local Zones のサブネットで動作するエッジコンピュートノードにデプロイするサンプルアプリケーションの
deployment
リソース YAML ファイルを作成します。エッジコンピュートノードの taint に合った正しい toleration を指定していることを確認してください。Local Zone のサブネットで動作するエッジコンピュートノード用に設定された
deployment
リソースの例kind: Namespace apiVersion: v1 metadata: name: <local_zone_application_namespace> --- kind: PersistentVolumeClaim apiVersion: v1 metadata: name: <pvc_name> namespace: <local_zone_application_namespace> spec: accessModes: - ReadWriteOnce resources: requests: storage: 10Gi storageClassName: gp2-csi 1 volumeMode: Filesystem --- apiVersion: apps/v1 kind: Deployment 2 metadata: name: <local_zone_application> 3 namespace: <local_zone_application_namespace> 4 spec: selector: matchLabels: app: <local_zone_application> replicas: 1 template: metadata: labels: app: <local_zone_application> zone-group: ${ZONE_GROUP_NAME} 5 spec: securityContext: seccompProfile: type: RuntimeDefault nodeSelector: 6 machine.openshift.io/zone-group: ${ZONE_GROUP_NAME} tolerations: 7 - key: "node-role.kubernetes.io/edge" operator: "Equal" value: "" effect: "NoSchedule" containers: - image: openshift/origin-node command: - "/bin/socat" args: - TCP4-LISTEN:8080,reuseaddr,fork - EXEC:'/bin/bash -c \"printf \\\"HTTP/1.0 200 OK\r\n\r\n\\\"; sed -e \\\"/^\r/q\\\"\"' imagePullPolicy: Always name: echoserver ports: - containerPort: 8080 volumeMounts: - mountPath: "/mnt/storage" name: data volumes: - name: data persistentVolumeClaim: claimName: <pvc_name>
- 1
storageClassName
: Local Zone 設定の場合、gp2-csi
を指定する必要があります。- 2
kind
:deployment
リソースを定義します。- 3
name
: Local Zone アプリケーションの名前を指定します。たとえば、local-zone-demo-app-nyc-1
です。- 4
namespace:
ユーザーワークロードを実行する AWS Local Zone 用の namespace を定義します。例:local-zone-app-nyc-1a
- 5
zone-group
: ゾーンが属するグループを定義します。たとえば、us-east-1-iah-1
- 6
nodeSelector
: 指定のラベルに一致するエッジコンピュートノードをターゲットとします。- 7
tolerations
: Local Zone ノードのMachineSet
マニフェストで定義されたtaints
と一致する値を設定します。
ノードの
service
リソース YAML ファイルを作成します。このリソースは、ターゲットのエッジコンピュートノードから Local Zone ネットワーク内で実行されるサービスに Pod を公開します。Local Zone サブネットで動作するエッジコンピュートノード用に設定された
service
リソースの例apiVersion: v1 kind: Service 1 metadata: name: <local_zone_application> namespace: <local_zone_application_namespace> spec: ports: - port: 80 targetPort: 8080 protocol: TCP type: NodePort selector: 2 app: <local_zone_application>