Terraform 모듈 구성

이 솔루션에 필요한 리소스는 Terraform 모듈에 정의되어 있습니다.

시작하기 전에

Terraform 모듈 구성을 시작하기 전에 다음 단계를 완료하십시오.

  1. Terraform의 기본 사항에 대해 알아봅니다.

    최소한 Terrraform 설명서의 소개를 읽어보십시오.

  2. 다음 정보를 준비해 둡니다.
    • 테넌시의 OCID입니다.

      Oracle Cloud Infrastructure 웹 콘솔에서 테넌시의 OCID를 찾을 수 있습니다. 서비스 메뉴에서 관리 를 선택한 다음 테넌시 세부정보 를 누릅니다.

    • Terraform에서 Oracle Cloud Infrastructure을 사용하여 인증하는 데 사용할 사용자의 OCID입니다.

      사용자의 OCID를 찾으려면 서비스 메뉴에서 id 를 선택한 다음 사용자 를 선택합니다. 목록에서 사용자 이름을 찾아 OCID를 복사합니다.

    • 리소스를 생성할 구획의 OCID입니다.

      구획의 OCID를 찾으려면 서비스 메뉴에서 id 를 선택한 다음 구획 을 선택합니다. 목록에 필요한 구획을 찾아 OCID를 복사합니다.

    • 리소스를 생성할 영역의 ID입니다.

      예를 들어, US East(Ashburn) 영역의 ID는 us-ashburn-1 입니다.

      지역 및 가용성 도메인 을 참조하십시오.

  3. 다음을 결정합니다.
    • Bastion 및 admin 호스트에 사용할 이미지의 OCID입니다.
      기본 호스트에 대한 Terraform 구성에서 정의된 기본 이미지는 Oracle Autonomous Linux 이미지입니다. 다른 이미지를 사용하려면 필요한 이미지의 OCID를 식별합니다.
      • 사용자 정의 이미지의 OCID를 찾으려면 Oracle Cloud Infrastructure 웹 콘솔에 사인인하고 서비스 메뉴에서 [계산 ] 을 선택한 다음 사용자 정의 이미지 를 선택합니다.
      • Oracle 제공 이미지의 OCID를 찾으려면 다음 단계를 수행하십시오.
        1. Oracle Cloud 이미지로 이동합니다.
        2. 왼쪽 탐색 창에서 이미지 모음(예: Oracle Linux 7 . x) 을 선택합니다.
        3. 결과 페이지에서 사용할 이미지 버전으로 스크롤하여 누릅니다(예: Oracle - Linux -7.7-2019.09.25-0).
        4. 결과 페이지에서 [이미지 Ocid] 섹션으로 스크롤합니다 .
        5. 기본 위치 호스트를 생성하려는 영역에 해당하는 OCID를 복사합니다.

          이미지 OCID는 이미지를 사용할 수 있는 지역의 ID를 포함합니다. 예를 들어, Germany Central(Frankfurt) 영역의 이미지 OCID는 ocid1.image.oc1.eu-frankfurt-1.aaaaaaaaxxx… 형식이어야 합니다. 리소스를 생성하려는 지역의 이미지 OCID를 복사해야 합니다.

    • 기본 및 관리 호스트에 대한 시간대입니다.

      Unix 유사 시스템에서는 timedatectl list-timezones 명령을 실행하여 시간대 목록을 가져올 수 있습니다.

    • 기본 호스트, 관리 호스트 및 Kubernetes 작업자 노드에 사용할 컴퓨트 구성입니다.

      컴퓨트 구성 을 참조하십시오.

  4. Oracle Cloud Infrastructure에서 Kubernetes 클러스터를 만들기 위한 필요 조건을 완료합니다. Preparing for Container Engine for Kubernetes를 참조하십시오.
  5. (선택사항) 이 단계는 컨테이너화된 응용 프로그램의 이미지를 Oracle Cloud Infrastructure Registry의 개인 저장소에서 끌어오려는 경우에 필요합니다.
    1. Oracle Cloud Infrastructure Registry에서 이미지를 끌어오는 데 사용해야 하는 사용자 이름에 대한 인증 토큰을 생성합니다. 인증 토큰 가져오기 를 참조하십시오.
    2. 생성한 인증 토큰을 Oracle Cloud Infrastructure Vault에 보안으로 저장합니다. Managing Secrets를 참조하십시오.

Terraform 코드 다운로드

이 솔루션에 대한 Terraform 코드는 GitHub에서 제공됩니다.

  1. 왼쪽 탐색 창에서 코드 다운로드 를 누릅니다.
  2. Git 저장소 를 누릅니다.
  3. 로컬 컴퓨터에 저장소를 복제하거나 다운로드합니다.

Terraform 코드 정보

이 솔루션에 대한 Terraform 코드는 각각 대상 토폴로지의 특정 구성 요소에 대한 리소스를 포함하는 재사용 가능한 모듈로 구성됩니다.

Terraform 구성 파일에서 클라우드 리소스를 코딩하면 토폴로지를 신속하게 프로비전하고 리소스를 효율적으로 관리할 수 있습니다.

Terraform 코드는 최상위 레벨의 다음 디렉토리 및 파일을 포함합니다.
  • docs 디렉토리 및 *.adoc: 코드에 대한 설명서 필요한 모든 정보 및 지침은 현재 읽고 있는 문서에 포함되어 있습니다. 코드에 포함된 설명서를 참조할 필요가 없습니다.
  • *.tf: 솔루션이 사용하는 Terraform 구성 파일입니다. 이러한 파일은 편집하지 마십시오.
  • terraform.tfvars.example: Terraform 변수 파일을 생성하는 데 사용할 템플리트입니다. 템플리트를 편집하거나 제거하지 마십시오. terraform.tfvars에 복사
  • modules: 이 솔루션을 사용하여 생성한 리소스에 대한 핵심 Terraform 구성이 포함된 디렉토리입니다. 편집하지 마십시오.
  • .github 디렉토리 및 .gitignore: 내부 Git 구성 파일입니다. 편집하지 마십시오.

Terraform 변수 설정

Terraform가 Oracle Cloud Infrastructure 테넌시에 연결하는 데 필요한 매개변수를 지정합니다. 또한 네트워킹 매개변수, 기본 호스트와 관리 호스트의 속성 및 Kubernetes 설정을 지정합니다.

  1. 다운로드하거나 복제된 코드의 최상위 레벨 디렉토리에서 다음 코드를 포함하는 provider.tf 라는 일반 텍스트 파일을 생성합니다.
    provider "oci" {
      tenancy_ocid         = var.tenancy_id
      user_ocid            = var.user_id
      fingerprint          = var.api_fingerprint
      private_key_path     = var.api_private_key_path
      region               = var.region
      disable_auto_retries = var.disable_auto_retries
    }
  2. 다운로드하거나 복제한 코드의 최상위 레벨 디렉토리에서 terraform.tfvars.example 파일을 찾아 terraform.tfvars로 복사합니다.

    주:

    여러 테넌시의 리소스를 관리하려면 각 테넌시에 대해 별도의 terraform.tfvars 파일을 유지 관리하십시오.
  3. 앞에서 설명한 필요 조건을 완료했는지 확인합니다. 시작하기 전에 를 참조하십시오.
  4. 일반 텍스트 편집기에서 terraform.tfvars을 열고 다음과 같이 변수 값을 설정합니다.
    변수 설명
    api_fingerprint(필수) 업로드한 API 서명 키의 지문입니다.
    api_private_key_path(필수) 전용 API 서명 키를 포함하는 파일의 전체 경로 및 이름입니다.
    compartment_id(필수) 리소스를 생성할 구획의 OCID입니다.
    tenancy_id(필수) 테넌시의 OCID입니다.
    user_id(필수) Terraform에서 Oracle Cloud Infrastructure을 사용하여 인증하는 데 사용할 사용자의 OCID입니다.
    ssh_private_key_path 기본 호스트에 대해 제공할 공용 키에 해당하는 전용 SSH 키를 포함하는 파일의 전체 경로 및 이름입니다.

    이 값은 기본 호스트에 액세스하는 데 사용할 수 있는 ssh 명령을 생성하는 데 사용됩니다. ssh 명령은 Terraform 구성을 적용할 때 출력에 표시됩니다. Terraform은 전용 키를 읽거나 복사하지 않습니다.

    ssh_public_key_path 기본 호스트에 대해 제공할 공용 SSH 키를 포함하는 파일의 전체 경로 및 이름입니다.
    label_prefix 리소스 이름에 접두어로 사용할 짧은 식별자입니다.

    이름을 확인하여 리소스의 목적이나 특성을 식별하는 데 도움이 되는 문자열을 사용합니다. 예를 들어, Terraform 구성을 사용하여 테스트 또는 스테이지 환경을 설정하려면 test 또는 staging 접두어를 사용하는 것이 좋습니다.

    영역 리소스를 생성할 영역의 ID입니다.

    예를 들어, US East(Ashburn) 영역의 ID는 us-ashburn-1 입니다.

    nat_gateway_enabled VCN에 대한 NAT 게이트웨이를 만들려면 true를 지정합니다.

    전용 컴퓨트 인스턴스(예: 관리 호스트 또는 Kubernetes 근로자 노드) 가 공용 인터넷의 호스트에 액세스해야 하는 경우 NAT 게이트웨이가 필요합니다.

    newbitsnetnum 구성을 적용하는 경우 Terraform는 newbitsnetnum 값을 인수로 Terraform 함수 cidrsubnet()에 전달합니다. 이 함수는 기본 호스트, 관리 호스트, 로드 밸런서 노드 및 Kubernetes 작업자 노드에 대한 서브넷의 CIDR 접두어를 계산합니다.
    • newbits는 서브넷의 크기를 결정하는 데 사용됩니다. 이 넷마스크는 VCN의 넷마스크와 기본 서브넷에 필요한 넷마스크의 차이입니다.

      예를 들어 /16 VCN에서 넷마스크 /29를 사용하여 서브넷을 생성하려면 13newbits 값(29 - 16) 으로 지정합니다.

      더 낮은 newbits 값을 지정하면 주소 공간이 더 큰 서브넷이 생성됩니다.

    • netnum는 서브넷의 경계를 결정하는 데 사용됩니다. 네트워크가 newbits로 마스크되는 경우 서브넷의 0기반 인덱스입니다.

      이전 예를 계속 진행하면서 newbits=13netnum=0를 지정하면 cidrsubnet() 함수는 10.0.0.0/16 VCN 내의 첫번째 /29 주소 공간인 서브넷 CIDR 접두어 10.0.0.0/29을 반환합니다.

    기본값:
    netnum = {
      admin   = 33
      bastion = 32
      int_lb  = 16
      pub_lb  = 17
      workers = 1
    }
    
    newbits = {
      admin   = 13
      bastion = 13
      lb      = 11
      workers = 2
    }
    이러한 변수를 기본값에서 종료하고 10.0.0.0/16을 VCN에 대한 CIDR 범위로 지정하면 Terraform 함수 cidrsubnet()가 서브넷에 대해 다음 CIDR 접두어를 계산합니다. 사용 가능한 주소는 괄호 안에 표시됩니다. 서브넷의 처음 두 주소와 마지막 주소는 네트워킹 서비스에 의해 예약되어 있습니다.
    • 기본 서브넷: 10.0.1.0/29(사용 가능한 주소: 10.0.1.2 - 10.0.1.6, 즉 5개 호스트)
    • 관리 서브넷: 10.0.1.8/29(10.0.1.10 - 10.0.1.14, 5개 호스트)
    • 내부 로드 밸런서 서브넷: 10.0.2.0/27(10.0.2.2 - 10.0.2.30, 29노드)
    • 공용 로드 밸런서 서브넷: 10.0.2.32/27(10.0.2.34 - 10.0.2.62, 29노드)
    • Kubernetes 작업자 노드 서브넷: 10.0.64.0/18(10.0.64.2 - 10.0.127.254, 16381노드)

    기본 설정과 주소 또는 크기가 다른 서브넷이 필요한 경우 newbitsnetnum에 적합한 값을 결정해야 합니다. 이렇게 하려면 클래스 없는 IP 주소에 대한 기본 지식이 있어야 합니다. cidrsubnet() 함수에 대한 Terraform 설명서도 참조하십시오.

    여기에서 지정한 CIDR 블록이 Kubernetes Pods(pods_cidr) 에 대해 지정한 CIDR 블록과 겹치지 않는지 확인하십시오.

    service_gateway_enabled VCN에 대한 서비스 게이트웨이를 생성하려면 true를 지정합니다.

    VCN의 컴퓨트 인스턴스가 Oracle Cloud Infrastructure Object Storage 와 같은 다른 Oracle 서비스에 액세스해야 하는 경우 서비스 게이트웨이가 필요합니다.

    vcn_cidr VCN에 대해 선택한 IPv4 CIDR 블록입니다.

    기본값은 10.0.0.0/16 입니다. 허용된 범위는 /16 ~ /30 입니다.

    여기에서 지정한 CIDR 블록이 Kubernetes 서비스에 대해 지정한 CIDR 블록(services_cidr) 과 겹치지 않는지 확인하십시오.

    vcn_dns_label VCN의 내부 DNS 이름에 대한 이름 접두어입니다.

    여기서 지정한 이름은 VCN의 DNS 도메인 이름을 구성하기 위해 oraclevcn.com 접두어가 붙습니다. 예를 들어, oke을 접두어로 지정할 경우 VCN의 DNS 도메인 이름은 oke.oraclevcn.com 입니다.

    vcn_name VCN 리소스의 이름입니다.
    bastion_access 기본 위치에 대한 SSH 액세스가 허용되어야 하는 IP 주소 범위(CIDR 표기법 사용) 입니다.

    임의의 호스트(0.0.0.0/0) 에서 SSH 액세스를 허용하려면 변수를 기본값 ANYWHERE로 남겨 둡니다.

    bastion_enabled true를 지정하여 기본 호스트를 생성합니다.
    bastion_image_id 기본 위치 호스트를 생성하는 데 사용할 이미지의 OCID입니다.

    이 변수를 기본값인 NONE로 남겨 두면 Oracle 자율 Linux 이미지가 사용됩니다.

    bastion_notification_enabled Oracle Cloud Infrastructure Notification Service를 사용하여 업데이트가 적용되거나 Oracle Ksplice에서 알려진 악용 시도가 감지된 경우 기본 호스트에서 상태 메시지를 받을 수 있습니다.
    기본 위치 호스트에 대한 통지 전송을 사용으로 설정하려면 true를 지정합니다.

    주:

    이 솔루션의 Terraform 코드는 기본 Oracle Autonomous Linux 이미지를 사용하는 경우에만 기본 호스트에 대한 통지를 구성합니다.
    bastion_notification_endpoint 통지를 전송해야 하는 대상 전자메일 주소입니다. 이 변수는 bastion_notification_enabledtrue로 설정한 경우 필수입니다.
    bastion_notification_protocol 이 변수를 EMAIL로 설정합니다.
    bastion_notification_topic 생성할 통지 항목의 이름입니다. 이 변수는 bastion_notification_enabledtrue로 설정한 경우 필수입니다.
    bastion_package_upgrade 호스트를 처음 부팅할 때 기본 호스트의 보안 패키지를 업그레이드하도록 하려면 true를 지정합니다.

    이 변수를 true로 설정하면 기본 호스트가 프로비전된 후 보안 패키지가 업그레이드되는 동안 잠시 동안 이 변수를 사용할 수 없습니다. 그러나 이 업그레이드를 사용으로 설정하면 기본 호스트에 대한 취약성이 최소화됩니다.

    bastion_shape 기본 호스트에 사용할 컴퓨트 구성입니다.
    bastion_timezone IANA 시간대 형식(예: America/Los_Angeles) 으로 기본 호스트에 대해 구성할 시간대입니다.
    admin_enabled true를 지정하여 관리 호스트를 생성합니다.
    admin_image_id 기본 위치 호스트를 생성하는 데 사용할 이미지의 OCID입니다.

    이 변수를 기본값인 NONE로 두면 Oracle에서 제공하는 Linux 이미지가 사용됩니다.

    admin_instance_principal 관리 호스트가 지정한 구획의 모든 리소스를 관리하도록 하려면 true를 지정합니다.
    CLI 명령을 실행하거나 관리 호스트에서 API를 호출하여 토폴로지의 리소스를 관리하려는 경우 이 기능을 사용합니다.

    주:

    SSH를 사용하여 컴퓨트 인스턴스에 연결할 수 있는 사용자는 인스턴스에 부여된 인스턴스 고유 권한을 상속합니다. 관리 호스트를 인스턴스 주체로 지정할지 여부를 결정할 때 이를 고려하십시오. 관리 호스트에 영향을 주지 않고 언제든지 이 기능을 해제하거나 설정할 수 있습니다.

    이 변수를 true로 설정하면 관리 호스트가 동적 그룹의 멤버로 설정되고 동적 그룹이 구획의 모든 리소스를 관리할 수 있도록 정책 명령문이 생성됩니다.

    admin_notification_enabled

    admin_notification_endpoint

    admin_notification_protocol

    admin_notification_topic

    이러한 변수는 기본값에서 그대로 둡니다. 관리 호스트에 대한 통지를 사용으로 설정하는 것은 현재 이 Terraform 코드에서 지원되지 않습니다.
    admin_package_upgrade 호스트를 처음 부트할 때 관리 호스트의 보안 패키지를 업그레이드하도록 하려면 true를 지정합니다.

    이 변수를 true로 설정하면 관리 호스트가 프로비저닝된 후 보안 패키지가 업그레이드되는 동안 잠시 동안 이 변수를 사용할 수 없습니다. 그러나 이 업그레이드를 사용으로 설정하면 관리 호스트의 취약성이 최소화됩니다.

    admin_shape 관리 호스트에 사용할 컴퓨트 구성입니다.
    admin_timezone IANA 시간대 형식(예: America/Los_Angeles) 으로 관리 호스트에 대해 구성할 시간대입니다.
    availability_domains 관리 및 기본 호스트를 프로비전할 가용성 도메인입니다.

    예를 들어, 두번째 가용성 도메인에서 기본 호스트를 프로비전하려면 bastion = 2를 설정합니다.

    지정한 영역에 가용성 도메인이 하나만 포함되어 있는 경우 이 변수를 기본값 1으로 남겨 두십시오.

    tagging 컴퓨트 및 네트워킹 리소스에 지정할 태그를 지정합니다.
    allow_node_port_access TCP 트래픽이 공용 모드로 배치될 때 Kubernetes 작업자 노드에 대한 TCP 트래픽을 허용하려면 true를 지정합니다.
    allow_worker_ssh_access 기본 위치 호스트를 통해 Kubernetes 작업자 노드에 대한 SSH 접속을 허용하려면 true를 지정합니다.

    작업자 노드가 공용 모드로 배치된 경우에도 SSH 접속은 기본 호스트를 거쳐야 합니다.

    이 변수를 true로 설정하는 경우 bastion_enabled = true도 설정해야 합니다.

    cluster_name Kubernetes 클러스터의 이름입니다.
    dashboard_enabled 기본 Kubernetes 대시보드를 생성하려면 true를 지정합니다.
    kubernetes_version 근로자 노드에 사용할 Kubernetes 버전입니다.

    이 변수를 기본값 LATEST로 남겨 두면 지원되는 최신 버전이 선택됩니다. 특정 버전을 사용하려면 해당 버전을 지정합니다.

    node_pools 생성할 노드 풀 수, 각 풀의 크기 및 작업자 노드에 사용할 컴퓨트 구성의 형식은 다음과 같습니다.
    node_pools = {
      "np1" = ["computeShape", numberOfNodes]
      "np2" = ["computeShape", numberOfNodes]
      "np3" = ["computeShape", numberOfNodes]
      ...
    }
    • np1, np2np3는 개별 노드 풀을 나타내는 임의의 이름입니다.
    • computeShape는 풀의 작업자 노드에 사용되는 컴퓨트 구성입니다.
    • numberOfNodes은 풀에 생성될 Kubernetes 작업자 노드 수입니다. 최소 3개의 노드가 각 풀에 생성됩니다(하한 값을 지정해도 됨).
    다음은 각각 다른 컴퓨트 구성을 사용하고 서로 다른 수의 Kubernetes 근로자 노드를 포함하는 2개의 풀로 구성된 클러스터에 대한 예입니다.
    node_pools = {
      "np1" = ["VM.Standard2.1", 3]
      "np2" = ["VM.Standard2.2", 5]
    }
    node_pool_name_prefix 노드 풀의 이름 접두어입니다.

    노드 풀의 이름은 label_prefix, node_pool_name_prefix 및 노드 풀 번호의 값을 연결하여 생성됩니다. 예를 들어, label_prefix = "prod"node_pool_name_prefix = "np"를 지정하면 노드 풀의 생성된 이름은 prod-np-1, prod-np-2, prod-np-3 등이 됩니다.

    node_pool_image_id Kubernetes 작업자 노드에 사용할 이미지의 OCID입니다.

    이 변수를 기본값인 NONE로 남겨 두면 node_pool_osnode_pool_os_version에 대해 지정한 값과 일치하는 이미지가 사용됩니다.

    node_pool_os Kubernetes 근로자 노드에 사용해야 하는 운영 체제(예: "Oracle Linux") 입니다.

    이 설정은 node_pool_image_id = "NONE"을 설정한 경우에만 고려됩니다.

    node_pool_os_version Kubernetes 근로자 노드에 사용해야 하는 운영 체제의 버전입니다(예: "7.7").

    이 설정은 node_pool_image_id = "NONE"을 설정한 경우에만 고려됩니다.

    pods_cidr Kubernetes Pod에 대한 선택 항목의 IPv4 CIDR 블록입니다.

    여기에서 지정한 CIDR 블록이 VCN에 대해 지정한 CIDR 블록(vcn_cidr) 과 겹치지 않는지 확인하십시오.

    services_cidr Kubernetes Pod에 대한 선택 항목의 IPv4 CIDR 블록입니다.

    여기에서 지정한 CIDR 블록이 VCN에 대해 지정한 CIDR 블록(vcn_cidr) 과 겹치지 않는지 확인하십시오.

    worker_mode 공용 인터넷에서 근로자 노드에 액세스할 수 있어야 하는 경우 public를 지정합니다. 그렇지 않으면 이 변수를 private로 설정합니다.

    worker_mode = "private"를 설정한 경우 nat_gateway_enabled = true를 설정합니다.

    lb_subnet_typepreferred_lb_subnets lb_subnet_typepreferred_lb_subnets에 대해 지정하는 값은 LoadBalancer 유형의 Kubernetes 서비스를 사용하여 배치한 모든 로드 밸런서 노드에 사용되어야 하는 서브넷 유형을 결정합니다.

    공용 로드 밸런서에는 공용 IP 주소가 있습니다. 내부 로드 밸런서는 전용 IP 주소만 가지며 공용 인터넷에서 액세스할 수 없습니다.

    • 공용 로드 밸런서를 사용하려면 preferred_lb_subnet = "public"subnet_type"both" 또는 "public"로 설정합니다.
    • 내부 로드 밸런서를 사용하려면 preferred_lb_subnet = "internal"subnet_type"both" 또는 "internal"로 설정합니다.

      로드 밸런서 서브넷을 내부로 설정한 경우에도 내부 로드 밸런서 서비스를 생성할 때 적절한 주석(예: service.beta.kubernetes.io/oci-load-balancer-internal: "true") 을 설정해야 합니다. 서브넷을 전용으로 설정하는 것만으로는 충분하지 않습니다.

      내부 로드 밸런서 생성에 대한 자세한 내용은 Oracle Cloud Infrastructure 설명서를 참조하십시오.

    secret_id Oracle Cloud Infrastructure Registry에서 애플리케이션 이미지를 가져오는 데 사용할 인증 토큰이 저장된 Oracle Cloud Infrastructure Vault 서비스의 보안 ID입니다.
    또한 다음을 설정해야 합니다.
    bastion_enabled = true
    admin_enabled = true
    admin_instance_principal = true
    email_address Docker 암호를 생성할 때 사용할 전자메일 주소입니다. 전자메일 주소는 필수이지만 지정하는 사항에 관계없이 필요하지 않습니다.

    이 변수는 secret_id을 지정하는 경우 필수입니다.

    tenancy_name Kubernetes 클러스터에 배치를 위해 이미지를 가져와야 하는 레지스트리를 포함하는 테넌시의 Oracle Cloud Infrastructure Object Storage 네임스페이스입니다.

    이 변수는 secret_id을 지정하는 경우 필수입니다.

    username secret_id에 저장된 인증 토큰을 생성한 사용자 이름입니다.

    이 변수는 secret_id을 지정하는 경우 필수입니다.

    install_helm Helm를 설치하려면 true를 지정합니다.

    Helm는 Kubernetes 용 패키지 관리자입니다.

    Helm를 설치하려면 admin_instance_principal = true도 설정해야 합니다.

    helm_version 설치될 Helm 클라이언트의 버전입니다.

    Tiller(Helm의 서버측 카운터) 는 자동으로 업그레이드됩니다.

    install_calico Calico를 설치하려면 true를 지정합니다.

    Calico를 사용하여 Kubernetes 클러스터에 배치된 컨테이너 작업 부하에 대한 네트워크 정책을 구현할 수 있습니다.

    install_calico = true를 설정한 경우 다음 도 설정해야 합니다.
    bastion_enabled = true
    admin_enabled = true
    admin_instance_principal = true
    calico_version 설치될 Calico 버전입니다.
    install_metricserver Kubernetes Metrics Server를 설치하려면 true를 지정하십시오.

    기본적으로 최신 버전은 kube-system 네임스페이스에 설치됩니다. Kubernetes Metrics Server는 클러스터 간에 리소스 사용량 데이터를 집계합니다.

    install_metricserver = true를 설정한 경우 다음 도 설정해야 합니다.
    bastion_enabled = true
    admin_enabled = true
    admin_instance_principal = true
    use_encryption Oracle Cloud Infrastructure Vault 서비스를 사용하여 Kubernetes 암호를 암호화하려면 이 변수를 true로 설정합니다.
    use_encryption = true를 설정한 경우 다음 도 설정해야 합니다.
    bastion_enabled = true
    admin_enabled = true
    admin_instance_principal = true
    existing_key_id Oracle Cloud Infrastructure Vault 서비스에 생성된 기존 키의 OCID입니다.

    이 변수는 use_encryptiontrue로 설정한 경우 필수입니다.

    create_service_account 외부 프로세스 및 툴(예: CI/CD 파이프라인) 에서 클러스터에 액세스하려면 이 변수를 true로 설정합니다. 자체 인증 토큰으로 서비스 계정이 생성됩니다.
    create_service_account = true를 설정한 경우 다음 도 설정해야 합니다.
    bastion_enabled = true
    admin_enabled = true
    admin_instance_principal = true
    service_account_name 생성할 서비스 계정의 이름입니다.
    service_account_namespace 계정이 생성되어야 하는 Kubernetes 네임스페이스입니다.
    service_account_cluster_role_binding 서비스 계정에 대한 클러스터 롤 바인딩의 이름입니다.

    다음은 완료된 terraform.tfvars 파일의 예입니다.

    # Identity and access parameters
    
    api_fingerprint = "d4:dc:...(truncated)"
    
    api_private_key_path = "/home/joe/.oci/oci_api_key.pem"
    
    compartment_id = "ocid1.compartment.oc1..aaaaaaaaxxx... (truncated)"
    
    tenancy_id = "ocid1.tenancy.oc1..aaaaaaaaxxx... (truncated)"
    
    user_id = "ocid1.user.oc1..aaaaaaaaxxx... (truncated)"
    
    ssh_private_key_path = "/home/joe/.ssh/id_rsa"
    
    ssh_public_key_path = "/home/joe/.ssh/id_rsa.pub"
    
    # general oci parameters
    label_prefix = "prod"
    
    region = "us-phoenix-1"
    
    # networking
    
    nat_gateway_enabled = true
    
    netnum = {
      admin   = 33
      bastion = 32
      int_lb  = 16
      pub_lb  = 17
      workers = 1
    }
    
    newbits = {
      admin   = 13
      bastion = 13
      lb      = 11
      workers = 2
    }
    
    service_gateway_enabled = true
    
    vcn_cidr = "10.0.0.0/16"
    
    vcn_dns_label = "oke"
    
    vcn_name = "oke vcn"
    
    # bastion
    
    bastion_access = "ANYWHERE"
    
    bastion_enabled = true
    
    bastion_image_id = "NONE"
    
    bastion_notification_enabled = true
    
    bastion_notification_endpoint = "joe@example.com"
    
    bastion_notification_protocol = "EMAIL"
    
    bastion_notification_topic = "bastion_server_notification"
    
    bastion_package_upgrade = true
    
    bastion_shape = "VM.Standard.E2.1"
    
    bastion_timezone = "America/Los_Angeles"
    
    admin_enabled = true
    
    admin_image_id = "NONE"
    
    admin_instance_principal = true
    
    admin_notification_enabled = false
    
    admin_notification_endpoint = "joe@example.com"
    
    admin_notification_protocol = "EMAIL"
    
    admin_notification_topic = "admin_server_notification"
    
    admin_package_upgrade = true
    
    admin_shape = "VM.Standard.E2.1"
    
    admin_timezone = "America/Los_Angeles"
    
    # availability_domains
    
    availability_domains = {
      bastion = 1
      admin   = 1
    }
    
    tagging = {
      computetag = {"Environment" = "dev" }
      networktag = { "Name" = "network" }
    }
    
    # oke
    
    allow_node_port_access = false
    
    allow_worker_ssh_access = false
    
    cluster_name = "oke"
    
    dashboard_enabled = true
    
    kubernetes_version = "LATEST"
    
    node_pools = {
      np1 = ["VM.Standard2.1", 3]
      #np2 = ["VM.Standard2.8", 4]
      #np3 = ["VM.Standard1.4", 5]
    }
    
    node_pool_name_prefix = "np"
    
    node_pool_image_id = "NONE"
    
    node_pool_os = "Oracle Linux"
    
    node_pool_os_version = "7.7"
    
    pods_cidr = "10.244.0.0/16"
    
    services_cidr = "10.96.0.0/16"
    
    worker_mode = "private"
    
    # oke load balancers
    
    lb_subnet_type = "public"
    
    preferred_lb_subnets = "public"
    
    # ocir
    
    secret_ocid = "ocid1.key.oc1..aaaaaaaaxxx... (truncated)"
    
    email_address = "joe@example.com"
    
    tenancy_name = "mytenancy"
    
    username = "joe_k8s_admin"
    
    # helm
    
    helm_version = "3.0.0"
    
    install_helm = false
    
    # calico
    
    calico_version = "3.9"
    
    install_calico = false
    
    # metrics server
    
    install_metricserver = false
    
    use_encryption = false
    
    existing_key_id = ""
    
    # service accountcreate_service_account = true
    service_account_name = "kubeconfigsa"
    service_account_namespace = "kube-system"
    service_account_cluster_role_binding = "myapps-manage-binding"
  5. terraform.tfvars을 저장하고 닫습니다.