16.6. 엣지 및 클라우드 기반 AWS 컴퓨팅 리소스에서 워크로드 예약
AWS VPC 클러스터를 Outpost로 확장할 때 Outpost는 엣지 컴퓨팅 노드를 사용하고 VPC는 클라우드 기반 컴퓨팅 노드를 사용합니다. 다음 로드 밸런서 고려 사항은 Outpost로 확장된 AWS VPC 클러스터에 적용됩니다.
- Outposts는 AWS Network Load Balancer 또는 AWS Classic Load Balancer를 실행할 수 없지만, VPC 클러스터의 Classic Load Balancer는 Outpost 엣지 컴퓨팅 노드에 연결할 수 있습니다. 자세한 내용은 AWS VPC 클러스터에서 AWS Classic Load Balancers 사용을 참조하십시오.
- Outpost 인스턴스에서 로드 밸런서를 실행하려면 AWS Application Load Balancer를 사용해야 합니다. AWS Load Balancer Operator를 사용하여 AWS Load Balancer 컨트롤러 인스턴스를 배포할 수 있습니다. 컨트롤러는 Kubernetes Ingress 리소스의 AWS Application Load Balancer를 프로비저닝합니다. 자세한 내용은 AWS VPC 클러스터에서 AWS Load Balancer Operator 사용을 참조하십시오.
16.6.1. AWS VPC 클러스터에서 AWS Classic Load Balancer 사용으로 확장됨 링크 복사링크가 클립보드에 복사되었습니다!
AWS Outposts 인프라는 AWS Classic Load Balancer를 실행할 수 없지만 Edge 및 클라우드 기반 서브넷이 동일한 가용성 영역에 있는 경우 AWS VPC 클러스터의 Classic Load Balancer는 Outpost의 에지 컴퓨팅 노드를 대상으로 지정할 수 있습니다. 결과적으로 VPC 클러스터의 Classic Load Balancer가 이러한 노드 유형 중 하나에서 Pod를 예약할 수 있습니다.
엣지 컴퓨팅 노드에서 워크로드를 예약하고 클라우드 기반 컴퓨팅 노드에서 워크로드를 예약하면 대기 시간이 발생할 수 있습니다. VPC 클러스터의 Classic Load Balancer가 Outpost 엣지 컴퓨팅 노드를 대상으로 하는 것을 방지하려면 클라우드 기반 컴퓨팅 노드에 라벨을 적용하고 적용된 라벨이 있는 노드에서만 예약하도록 Classic Load Balancer를 구성할 수 있습니다.
VPC 클러스터의 Classic Load Balancer가 Outpost 엣지 컴퓨팅 노드를 대상으로 하지 않도록 할 필요가 없는 경우 이러한 단계를 완료할 필요가 없습니다.
사전 요구 사항
- AWS VPC 클러스터를 Outpost로 확장했습니다.
-
cluster-admin권한이 있는 계정을 사용하여 클러스터에 액세스할 수 있습니다. -
OpenShift CLI(
oc)가 설치되어 있습니다. - 에지 컴퓨팅 머신의 테인트와 일치하는 허용 오차를 사용하여 Outpost에 사용자 워크로드를 생성했습니다.
프로세스
선택 사항: 다음 명령을 실행하고 출력에 Outpost의 에지 컴퓨팅 노드만 포함되어 있는지 확인하여 에지 컴퓨팅 노드에
location=outposts레이블이 있는지 확인합니다.$ oc get nodes -l location=outposts다음 명령을 실행하여 VPC 클러스터의 클라우드 기반 컴퓨팅 노드에 키-값 쌍으로 레이블을 지정합니다.
$ for NODE in $(oc get node -l node-role.kubernetes.io/worker --no-headers | grep -v outposts | awk '{print$1}'); do oc label node $NODE <key_name>=<value>; done여기서
<key_name>=<value>는 클라우드 기반 컴퓨팅 노드를 구분하는 데 사용할 레이블입니다.출력 예
node1.example.com labeled node2.example.com labeled node3.example.com labeled선택 사항: 다음 명령을 실행하고 출력에 VPC 클러스터의 모든 클라우드 기반 컴퓨팅 노드가 포함되어 있는지 확인하여 클라우드 기반 컴퓨팅 노드에 지정된 레이블이 있는지 확인합니다.
$ oc get nodes -l <key_name>=<value>출력 예
NAME STATUS ROLES AGE VERSION node1.example.com Ready worker 7h v1.28.5 node2.example.com Ready worker 7h v1.28.5 node3.example.com Ready worker 7h v1.28.5서비스 매니페스트의
annotations필드에 클라우드 기반 서브넷 정보를 추가하여 Classic Load Balancer서비스를구성합니다.서비스 구성 예
apiVersion: v1 kind: Service metadata: labels: app: <application_name> name: <application_name> namespace: <application_namespace> annotations: service.beta.kubernetes.io/aws-load-balancer-subnets: <aws_subnet>1 service.beta.kubernetes.io/aws-load-balancer-target-node-labels: <key_name>=<value>2 spec: ports: - name: http port: 80 protocol: TCP targetPort: 8080 selector: app: <application_name> type: LoadBalancer다음 명령을 실행하여
ServiceCR을 생성합니다.$ oc create -f <file_name>.yaml
검증
다음 명령을 실행하여 프로비저닝된 Classic Load Balancer의 호스트를 표시하도록
서비스리소스의 상태를 확인합니다.$ HOST=$(oc get service <application_name> -n <application_namespace> --template='{{(index .status.loadBalancer.ingress 0).hostname}}')다음 명령을 실행하여 프로비저닝된 Classic Load Balancer 호스트의 상태를 확인합니다.
$ curl $HOST- AWS 콘솔에서 레이블이 지정된 인스턴스만 로드 밸런서의 대상 인스턴스로 표시되는지 확인합니다.
16.6.2. AWS VPC 클러스터에서 AWS Load Balancer Operator 사용으로 확장됨 링크 복사링크가 클립보드에 복사되었습니다!
AWS VPC 클러스터에서 AWS Application Load Balancer를 프로비저닝하도록 AWS Load Balancer Operator를 구성할 수 있습니다. AWS Outposts는 AWS Network Load Balancer를 지원하지 않습니다. 결과적으로 AWS Load Balancer Operator는 Outpost에서 네트워크 로드 밸런서를 프로비저닝할 수 없습니다.
클라우드 서브넷 또는 Outpost 서브넷에서 AWS Application Load Balancer를 생성할 수 있습니다. 클라우드의 애플리케이션 로드 밸런서는 클라우드 기반 컴퓨팅 노드에 연결할 수 있으며, Outpost의 Application Load Balancer는 엣지 컴퓨팅 노드에 연결할 수 있습니다. 외부 서브넷 또는 VPC 서브넷으로 Ingress 리소스에 주석을 달어야 하지만 둘 다 해당되지는 않습니다.
사전 요구 사항
- AWS VPC 클러스터를 Outpost로 확장했습니다.
-
OpenShift CLI(
oc)가 설치되어 있습니다. - AWS Load Balancer Operator를 설치하고 AWS Load Balancer 컨트롤러를 생성했습니다.
프로세스
지정된 서브넷을 사용하도록
Ingress리소스를 구성합니다.Ingress리소스 구성의 예apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: <application_name> annotations: alb.ingress.kubernetes.io/subnets: <subnet_id>1 spec: ingressClassName: alb rules: - http: paths: - path: / pathType: Exact backend: service: name: <application_name> port: number: 80- 1
- 사용할 서브넷을 지정합니다.
- Outpost에서 Application Load Balancer를 사용하려면 Outpost 서브넷 ID를 지정합니다.
- 클라우드에서 Application Load Balancer를 사용하려면 다른 가용성 영역에 두 개 이상의 서브넷을 지정해야 합니다.