Ingress 리소스를 엣지 워커 노드로 분리하기

ALB 포드를 엣지 워커 노드에 할당하려면, 각 존당 최소 두 개의 엣지 워커 노드가 포함된 워커 풀을 생성하거나 기존 풀을 사용해야 합니다. 이를 통해 ALB 포드가 스케줄링될 수 있도록 에지 노드가 항상 확보됩니다.

ALB 포드를 업데이트하면, 기존 포드를 대체하기 위해 새로운 포드가 순차적으로 배포됩니다. 업데이트 중에도 ALB를 계속 사용할 수 있도록, 롤링 업데이트를 통해 한 번에 하나의 포드만 교체함으로써 항상 최소 한 개의 ALB 포드가 활성화된 상태를 유지합니다. 그러나 ALB 포드에는 두 개의 ALB 포드가 동일한 워커에서 동시에 실행되는 것을 방지하는 상호 배타성 규칙이 적용됩니다. 한 구역에 에지 노드가 두 개 이상 있는 경우, 다른 하나는 계속 실행되는 동안 새로운 ALB 포드를 그중 하나에 배치할 수 있습니다.

ALB의 고가용성을 보장하기 위해, 각 리전에 에지 노드가 충분하지 않은 경우 에지 노드 레이블은 무시되며, ALB 파드도 에지 노드가 아닌 노드에 스케줄링됩니다.

ALB 워크로드를 엣지 노드로 분리하는 단계는 클래식 인프라와 VPC 인프라 모두에서 동일합니다. 그러나 ALB 외부 IP의 명명 규칙은 유형마다 다릅니다. 기존 인프라에 구축된 ALB의 경우, 외부 IP는 169.46.17.2 과 같은 표준 IP 주소입니다. VPC 인프라에 있는 ALB의 경우, 외부 IP는 f3bee8b5-us-south.lb.appdomain.cloud 과 같은 호스트 이름입니다.

시작하기 전에

워크로드를 엣지 워커 노드로 분리하기

워크로드를 엣지 워커 노드로 분리하려면:

  1. dedicated=edge 라는 레이블이 지정된 워커 풀을 생성하거나, 기존 워커 풀 중 하나에 해당 레이블을 추가하십시오.

    • 클래식 워커 풀을 생성하려면 worker-pool create classic 명령어를 사용할 수 있습니다.
        ibmcloud oc worker-pool create classic --name POOL_NAME --cluster CLUSTER --flavor FLAVOR --size-per-zone WORKERS_PER_ZONE --hardware ISOLATION --label dedicated=edge
        ```
    * VPC 워커 풀을 생성하려면 ` `worker-pool create vpc-gen2` ` [명령어를](/docs/containers?topic=containers-kubernetes-service-cli#worker-pool-create-vpc-gen2-cli) 사용할 수 있습니다.
    ```sh {: pre}
        ibmcloud oc worker-pool create vpc-gen2 --name POOL_NAME --cluster CLUSTER --flavor FLAVOR --size-per-zone WORKERS_PER_ZONE --hardware ISOLATION --label dedicated=edge
        ```
    * 기존 작업자 풀에 레이블을 지정하려면 ` `worker-pool label set` ` [명령](/docs/containers?topic=containers-kubernetes-service-cli#worker-pool-label-set-cli) 을 사용할 수 있습니다.
    ```sh {: pre}
        ibmcloud oc worker-pool label set --cluster CLUSTER --worker-pool POOL --label dedicated=edge
        ```
    
  2. 작업자 풀 및 작업자 노드에 dedicated=edge 레이블이 있는지 확인하십시오.

    • 워커 풀을 확인하려면 get 명령을 사용하십시오.
        ibmcloud ks worker-pool get --cluster CLUSTER_NAME_OR_ID --worker-pool WORKER_POOL_NAME_OR_ID
        ```
    * 개별 작업자 노드를 확인하려면 다음 명령의 출력에서 **Labels** 필드를 검토하십시오.
    ```sh {: pre}
        kubectl describe node <worker_node_private_IP>
        ```
    
    
    
  3. 클러스터에 있는 기존의 모든 ALB를 검색하십시오. 명령 출력을 검토하십시오. 상태가 ‘활성화됨’으로 설정된 각 ALB에 대해 ALB ID와 빌드 번호를 기록해 두십시오.

    ibmcloud ks ingress alb ls --cluster CLUSTER_NAME_OR_ID
    

    출력 예

    ALB ID                                Enabled   State     Type      Load Balancer Hostname                      Zone         Build                                  Status
    private-crc81nk5l10gfhdql4i3qg-alb1   true      enabled   private   e9dd35e6-us-south.lb.appdomain.cloud   us-south-3   3.7.4_348800920_iks   enabled
    public-crc81nk5l10gfhdql4i3qg-alb1    true      enabled   public    38daf55c-us-south.lb.appdomain.cloud   us-south-3   3.7.4_348800920_iks   healthy
    
  4. 이전 단계의 출력을 사용하여, 사용 가능한 각 ALB에 대해 ibmcloud ks ingress alb update 명령을 실행하십시오. 이 명령은 ALB를 에지 작업자 노드에 다시 배치합니다.

    이 명령을 실행하여 ALB를 에지 작업자 노드에 재배치하면, ALB 역시 최신 버전으로 업데이트됩니다. ALB를 최신 버전으로 업데이트하지 않으려면, --version 옵션을 포함하고 이전 단계의 출력 결과에서 ‘Build’ 항목 아래에 나열된 버전을 지정하십시오.

    ibmcloud ks ingress alb update -c <cluster_name_or_ID> --alb <ALB_ID> [--version <build_version>]
    

    출력 예

    Updating ALB pods for private-crc81nk5l10gfhdql4i3qg-alb1 to version '3.7.4_348800920_iks' in cluster crc81nk5l10gfhdql4i3qg...
    OK
    
  5. Confirm that all ALB pods are deployed to edge nodes. Each public and private ALB that is enabled in your cluster has two pods.

    kubectl describe nodes -l dedicated=edge | grep alb
    

    출력 예

    kube-system                private-crc81nk5l10gfhdql4i3qg-alb1-d5dd478db-27pv4    0 (0%)        0 (0%)      0 (0%)           0 (0%)
    kube-system                private-crc81nk5l10gfhdql4i3qg-alb1-d5dd478db-7p9q6    0 (0%)        0 (0%)      0 (0%)           0 (0%)
    kube-system                public-crc81nk5l10gfhdql4i3qg-alb1-5ff8cdff89-s77z6    0 (0%)        0 (0%)      0 (0%)           0 (0%)
    kube-system                public-crc81nk5l10gfhdql4i3qg-alb1-5ff8cdff89-kvs9f    0 (0%)        0 (0%)      0 (0%)           0 (0%)
    
  6. 에지 노드가 아닌 노드에 배치된 ALB 팟(Pod)이 없는 것을 확인하십시오.

    kubectl describe nodes -l dedicated!=edge | grep alb
    

    ALB 팟(Pod)이 올바르게 에지 노드에 배치된 경우에는 ALB 팟(Pod)이 리턴되지 않습니다. 이는 ALB가 에지 워커 노드에만 성공적으로 재할당되었음을 의미합니다.

다음 단계

dedicated=edge 를 사용하여 워커 풀 내의 워커 노드에 레이블을 지정하고, 기존 ALB를 모두 엣지 노드에 재배포했으므로, 이후 클러스터에 추가되는 모든 ALB도 엣지 워커 풀 내의 엣지 노드에 배포됩니다. 다음으로, 다른 엣지 워커 노드에서 실행되는 워크로드 를 차단할 수 있습니다.