OCI에서 ARM Kubernetes 클러스터 프로비저닝 및 Nginx 웹 사이트 배포에 대해 알아보기

OCI에서 ARM Kubernetes 클러스터를 프로비저닝한 다음 Terraform 스크립트를 사용하여 Nginx 웹 사이트를 수동 또는 자동으로 배포할 수 있습니다. 배포한 후에는 웹 사이트를 로컬 브라우저에서 간단하게 테스트합니다.

ARM 풀을 사용하여 OKE 클러스터 수동 프로비전

Kubernetes 클러스터를 쉽게 프로비저닝하고 OCI에 이기종 풀 세트를 만든 다음 OCI 콘솔에서 Nginx 웹 사이트를 배포할 수 있습니다. 이 방법은 인프라 자동화에 익숙하지 않고 콘솔을 대신 사용하려는 경우에 유용합니다.

OCI 콘솔에서 다음을 수행합니다.
  1. 먼저 OKE 클러스터를 프로비전합니다.
    1. Developers Services 섹션에서 Kubernetes Clusters (OKE)를 선택합니다.

      [클러스터 생성] 페이지가 나타납니다.

    2. 필요한 Kubernetes 클러스터 인프라를 신속하고 안전하게 프로비전하려면 빠른 생성을 선택합니다.

      [빠른 생성] 페이지가 나타납니다.

    3. 작업자 노드에 대한 ARM 구성(VM.Standard.A1.Flex)을 선택합니다. 이 구성을 통해 OCPU 수와 할당된 메모리 양을 모두 구성할 수 있으므로 특정 요구사항에 맞게 리소스를 미세 조정(및 가격의 약식 조정)할 수 있습니다.

      참고:

      HA(고가용성) 웹 사이트에 대해 이 클러스터를 빌드하는 경우 리소스를 최소한으로 유지하십시오. 필요한 경우 나중에 노드 수를 확장할 수 있습니다.
    4. 클러스터가 프로비전되면 배치 파일의 특정 이미지에 바인드할 수 있는 전문 시스템을 사용하여 풀을 추가할 수 있습니다. 예를 들어, 웹 사이트에서 수행하는 ML 작업(예: 콘텐츠 권장 또는 얼굴 인식 백엔드)에 대해 GPU 지원 노드 풀을 설정할 수 있습니다.

      노드 풀을 추가하려면 Cluster Details(클러스터 세부정보) 페이지에서 Node Pool(노드 풀) 섹션의 Shape(구성)를 업데이트하면 됩니다.

      1. 리소스 메뉴로 이동합니다.
      2. 노드 풀, 새 풀 추가를 차례로 누릅니다.
      3. 노드 구성을 추가/변경하여 필요에 따라 풀을 수정합니다.
  2. 이제 배치 파일을 사용하여 클러스터에 액세스하고 Nginx 환경 배치를 시작합니다.
    1. 클러스터로 이동하고 클러스터 액세스를 누릅니다.

      Quick Access 화면이 나타납니다. 계속하려면 1단계와 2단계(화면에 표시됨)를 따릅니다. Cloud Shell 액세스를 사용하는 경우 시스템에서 kubectl 환경을 설정 및 구성할 필요가 없습니다. 이 프로세스는 웹 터미널 에뮬레이터를 실행하고 사용자 환경에 맞게 구성합니다. 화면의 2단계에서 설명한 대로 제공된 OCI CLI 명령을 붙여넣으면 kubectl이 새 클러스터에 액세스하도록 구성됩니다.

    2. 그런 다음 Pod가 프로비전되었는지 확인하고 다음을 입력합니다.

      참고:

      이 플레이북의 모든 명령을 편리하게 사용할 수 있도록 예제에서 Copy(복사)를 누르고 프롬프트에 직접 명령을 붙여 넣을 수 있습니다.
      kubectl get nodes -o wide
      다음과 같이 두 개의 노드와 ARM에서 실행 중임을 나타내는 시스템 구성이 표시됩니다.
      NAME        STATUS ROLES AGE     VERSION   INTERNAL-IP   EXTERNAL-IP   OS-IMAGE              KERNEL-VERSION                   CONTAINER-RUNTIME 
      10.0.10.129 Ready  node  3m57s   v.1.19.7  10.0.10.129   <none>        Oracle Linux Server   7.9 5.4.17-2102.el7uek.aarch64   docker://19.3.11 
      10.0.10.153 Ready  node  3m17s   v.1.19.7  10.0.10.153   <none>        Oracle Linux Server   7.9 5.4.17-2102.el7uek.aarch64   docker://19.3.11
      노드 수를 스케일 업해야 하는 경우 Node Pool 화면에서 Scale을 누르고 Number of Nodes에서 필요한 노드 수를 입력합니다. OCI가 시작되면 등록합니다.
  3. 마지막으로 Nginx 웹 사이트를 배치하고 로드 밸런서를 통해 Expose합니다.
    1. 서비스 수신 집합이 포트 80으로 설정된 두 개의 복제본 Nginx 배치를 배치합니다. 다음을 입력합니다.
       kubectl apply -f https://k8s.io/examples/application/deployment.yaml 
    2. 배치를 확인합니다. 다음을 입력합니다.
      kubectl describe deployment nginx-deployment
      다음과 같은 출력이 표시됩니다.
      ----
      kubectl describe deployment nginx-deployment
      
      Name:                   nginx-deployment
      Namespace:              default
      CreationTimestamp:      Tue, 03 Jan 2023 17:41:27 +0000
      Labels:                 <none>
      Annotations:            deployment.kubernetes.io/revision: 1
      Selector:               app=nginx
      Replicas:               2 desired | 2 updated | 2 total | 2 available | 0 unavailable
      StrategyType:           RollingUpdate
      MinReadySeconds:        0
      RollingUpdateStrategy:  25% max unavailable, 25% max surge
      Pod Template:
        Labels:  app=nginx
        Containers:
         nginx:
          Image:        nginx:1.14.2
          Port:         80/TCP
          Host Port:    0/TCP
          Environment:  <none>
          Mounts:       <none>
        Volumes:        <none>
      Conditions:
        Type           Status  Reason
        ----           ------  ------
        Available      True    MinimumReplicasAvailable
        Progressing    True    NewReplicaSetAvailable
      OldReplicaSets:  <none>
      NewReplicaSet:   nginx-deployment-6595874d85 (2/2 replicas created)
      Events:
        Type    Reason             Age   From                   Message
        ----    ------             ----  ----                   -------
        Normal  ScalingReplicaSet  15s   deployment-controller  Scaled up replica set nginx-deployment-6595874d85 to 2
      
      ----
      
    3. 로드 밸런서를 통해 인터넷으로 서비스를 Expose하고 다음을 입력합니다.
      kubectl expose deployment nginx-deployment --type=LoadBalancer --name=my-service 
    4. 로드 밸런서에 공용 IP가 있는지 확인하고 다음을 입력합니다.
      kubectl get services
      OCI가 로드 밸런서를 실행하고 공용 IP를 지정합니다. 잠시 후 다음과 같은 출력이 표시됩니다.
      NAME        TYPE          CLUSTER-IP     EXTERNAL-IP    PORT(S)              AGE 
      kubernetes  ClusterIP     10.96.0.1      <none>         443/TCP, 12250/TCP   16m 
      nginx-lb    LoadBalancer  10.96.224.64   138.2.218.135  80:30343/TCP         3m1s

Ampere A1를 사용하여 ARM 풀을 사용하여 OKE 클러스터 프로비전 및 배치

ARM 풀을 사용하여 OKE 클러스터를 자동으로 프로비전한 다음 GitHub에 제공된 Terraform 스크립트를 사용하여 Nginx 웹 사이트를 배치할 수 있습니다. 이 스크립트는 두 개의 OCPU에 두 개의 노드(동일한 가용성 도메인에 있음)를 가진 클러스터를 프로비저닝합니다. 구성 단계에서는 노드 및 OCPU 수를 수정하는 방법을 보여줍니다. 그런 다음 이 스크립트는 Nginx(2포트)를 프로비저닝하고 로드 밸런서 뒤에 표시합니다.
클러스터를 프로비전하고 웹 사이트를 배치하려면 다음 절차를 수행하십시오.
  1. 먼저 클러스터를 구성해야 합니다.
    1. OCI 구획이 있는 OCI 테넌시가 있는지 확인하십시오.
    2. OCI 콘솔에 로그인하여 명령 셸을 열고 다음 명령을 실행합니다.
      git clone https://github.com/badr42/OKE_A1
      cd OKE_A1
      export TF_VAR_tenancy_ocid='tenancy-ocid'
      export TF_VAR_compartment_ocid='comparment-ocid'
      export TF_VAR_region='home-region'
      <optional>
      ### Select Availability Domain, zero based, if not set it defaults to 0, 
      ### this allows you to select an AD that has available A1 chips
      export TF_VAR_AD_number='0'
      
      ### Select number of nodes
      export TF_VAR_node_count='2'
      
      ### Set OCPU count per node
      export TF_VAR_ocpu_count='2'

    tenancy-ocid, comparment-ocidhome-region에 대해 특정 값을 사용합니다.

  2. 클러스터를 작성하고 다음을 입력합니다.
    terraform init
    terraform plan
    terraform apply

    terraform apply를 실행한 후 서비스 시작에 대해 약 25분이 소요됩니다.

  3. 서비스가 시작되면 Nginx 로드 밸런서를 시작하고 다음을 입력합니다.
    kubectl --kubeconfig kubeconfig get service
    다음과 같은 시스템 출력이 표시됩니다.
    NAME        TYPE           CLUSTER-IP      EXTERNAL-IP      PORT(S)              AGE
    kubernetes  ClusterIP      10.96.0.1       <none>           443/TCP, 12250/TCP   16m
    nginx-lb    LoadBalancer   10.96.224.64    138.2.218.135    80:30343/TCP       3m1s
  4. 배치가 완료되면 환경을 종료합니다. 다음을 입력합니다.
    terraform destroy

배치 테스트

배치를 테스트하려면 웹 브라우저를 열고 주소 표시줄에 공용 IP 주소를 입력합니다. 웹 페이지를 성공적으로 배치한 경우 새 Nginx 서버 시작 페이지에 액세스할 수 있어야 합니다.