주:

Oracle Linux Automation Engine에서 OCI Dynamic Inventory 사용

소개

프로비저닝 및 구성 관리를 위한 오픈 소스 소프트웨어인 Oracle Linux Automation Engine은 인벤토리 파일을 사용하여 인프라 내의 관리형 노드 또는 호스트에 대해 작동합니다. 이 인벤토리 파일에는 서버 목록, 해당 IP 주소 및 기타 선택적 연결 정보가 포함됩니다.

정적 인벤토리 파일은 Infrastructure가 거의 변경되지 않는 경우에 제대로 작동합니다.

그러나 클라우드를 사용할 때 인프라는 지속적으로 변할 수 있습니다. 따라서 호스트가 추가 및 제거될 때 인벤토리를 동적으로 갱신하는 것이 좋습니다.

목표

이 자습서에서는 다음 내용을 학습합니다.

필요 조건

Oracle Linux Automation Engine 배포

주: 고유 테넌시에서 실행 중인 경우 랩 환경을 배치하기 전에 linux-virt-labs GitHub 프로젝트 README.md을 읽고 필요 조건을 완료하십시오.

  1. Luna Desktop에서 터미널을 엽니다.

  2. linux-virt-labs GitHub 프로젝트를 복제합니다.

    git clone https://github.com/oracle-devrel/linux-virt-labs.git
    
  3. 작업 디렉토리로 변경합니다.

    cd linux-virt-labs/olam
    
  4. 필요한 모음을 설치합니다.

    ansible-galaxy collection install -r requirements.yml
    
  5. Oracle Linux 인스턴스 구성을 업데이트합니다.

    cat << EOF | tee instances.yml > /dev/null
    compute_instances:
      1:
        instance_name: "ol-control-node"
        type: "control"
      2:
        instance_name: "ol-host"
        type: "remote"
    olam_type: none
    EOF
    
  6. 재고 파일을 생성합니다.

    cat << EOF | tee hosts > /dev/null
    localhost ansible_connection=local ansible_connection=local ansible_python_interpreter=/usr/bin/python3.6
    EOF
    
  7. lab 환경을 배치합니다.

    ansible-playbook create_instance.yml -i hosts -e "@instances.yml"
    

    무료 실습 환경에서는 Python용 Oracle Cloud Infrastructure SDK에 대한 RPM 패키지를 설치하므로 localhost에 대한 추가 변수 ansible_python_interpreter가 필요합니다. 이 패키지 설치 위치는 사용 중인 Oracle Linux 버전을 기반으로 하는 시스템의 기본 Python 모듈 아래에 있습니다. 인벤토리 변수를 사용하면 localhost 이외의 호스트에서 실행되는 재생에 영향을 주지 않습니다.

    기본 배치 구성은 AMD CPU를 사용합니다. 명령행에서 새 쉐이프 변수 정의를 전달하여 인스턴스의 쉐이프를 변경할 수 있습니다.

    예: -e instance_shape="VM.Standard3.Flex"

    마찬가지로 Oracle Linux 이미지의 기본 버전은 `default_vars.yml 파일에 정의된 os_version 변수를 사용합니다. 명령줄에서 Oracle Linux 주 버전을 전달하여 이 값을 수정할 수 있습니다.

    예: -e os_version="9"

    중요: 플레이북이 성공적으로 실행될 때까지 기다렸다가 일시 중지 작업에 도달합니다. 플레이북의 이 단계에서 Oracle Linux 설치가 완료되고 인스턴스가 준비됩니다. 이전 플레이에서 배포하는 노드의 공용 및 전용 IP 주소를 인쇄합니다.

Oracle Linux Automation Engine 제어 노드 설정

제어 노드는 Oracle Linux Automation Engine 플레이북을 실행하기 위한 시스템입니다. 플레이북을 실행하려면 Oracle Linux Automation Engine 패키지를 설치해야 합니다.

  1. 컨트롤 노드의 IP 주소와 같은 변수를 설정합니다.

    export CONTROL="<ip_address_of_ol-control-node>"
    
  2. 터미널을 열고 SSH 키 쌍을 제어 노드에 복사합니다.

    scp -rp ~/.ssh/id_rsa* oracle@$CONTROL:~/.ssh/
    
  3. SSH 개인 키에 대한 권한을 설정합니다.

    ssh oracle@$CONTROL "chmod 600 ~/.ssh/id_rsa"
    
  4. SSH를 통해 ol-control-node 시스템에 연결합니다.

    ssh oracle@$CONTROL
    
  5. Oracle Linux Automation Engine 패키지 및 종속성을 설치합니다.

    sudo dnf install -y ansible-core
    

    ansible-core 패키지는 AppStream 저장소에서 제공됩니다.

  6. 패키지 설치를 테스트합니다.

    ansible --version
    

    출력을 검토하고 기본 버전의 Python Oracle Linux Automation Manager를 찾습니다. Python용 OCI(Oracle Cloud Infrastructure) SDK를 설치해야 하는 환경입니다.

    주: 출력에 ERROR: Ansible이 로케일 인코딩을 UTF-8, Detected None으로 표시하는 경우 ansible에 대해 잘못된 로케일 설정을 나타냅니다. 다음 두 가지 환경 변수를 설정하여 문제를 해결합니다.

    export LC_ALL="en_US.UTF-8"
    export LC_CTYPE="en_US.UTF-8"
    

Python용 Oracle Cloud Infrastructure SDK 설치

OCI 동적 인벤토리 플러그인은 제어 노드에서 Python용 작동 중인 OCI SDK 구성이 필요합니다. Python용 패키지 설치 프로그램인 Oracle Linux RPM 또는 PIP를 사용하여 OCI SDK를 설치할 수 있습니다.

  1. PIP를 사용하여 OCI SDK for Python을 설치합니다.

    1. PIP에 대한 패키지 및 종속성을 설치합니다.

      Oracle Linux 8:

      sudo dnf install -y python3.12-pip python3.12-setuptools
      

      Oracle Linux 9:

      sudo dnf install -y python3.9-pip python3.9-setuptools
      
    2. Python 패키지 설치

      Oracle Linux 8:

      /usr/bin/python3.12 -m pip install oci
      

      Oracle Linux 9:

      /usr/bin/python3.9 -m pip install oci
      

      프록시 뒤에 있는 경우 --proxy 옵션을 추가합니다. 자세한 내용은 python3.12 -m pip help install 명령을 실행하여 도움말에서 확인할 수 있습니다.

  2. 해당 버전을 인쇄하여 OCI SDK for Python 설치를 테스트합니다.

    Oracle Linux 8:

    python3.12 -c "import oci;print(oci.__version__)"
    

    Oracle Linux 9:

    python3.9 -c "import oci;print(oci.__version__)"
    
  3. OCI SDK 기본 구성 디렉토리를 생성합니다.

    mkdir -p ~/.oci
    
  4. SDK 기본 구성 파일 생성

    무료 실습에서는 scp를 사용하여 ol-control-node 시스템에 복사할 수 있는 사전 생성된 SDK 구성을 제공합니다.

    1. 데스크탑 환경에서 터미널을 엽니다.

    2. 모든 SDK 구성 파일을 ol-control-node 시스템으로 복사합니다.

      scp ~/.oci/* oracle@<ip_address_of_instance>:~/.oci/.
      
      exit
      

    무료 실습 환경 외부에서 이 자습서를 따르는 경우 OCI Documentation의 SDK and CLI Configuration FileRequired Keys and OCIDs 섹션 내에 제공된 지침을 참조하여 OCI 구성 파일을 생성합니다.

  5. ol-control-node 시스템에 연결된 터미널 창으로 전환합니다.

  6. SDK 구성 파일에서 key_file의 위치를 업데이트합니다.

    데스크탑 환경에서 SDK 구성 파일을 복사할 때 제어 시스템의 사용자 이름과 일치하도록 key_file의 사용자 홈 디렉토리 부분을 수정해야 합니다.

    sed -i 's/luna.user/oracle/g' ~/.oci/config
    
  7. 테스트 Python 스크립트를 생성하여 SDK가 작동 중인지 확인합니다.

    cat << EOF | tee test.py > /dev/null
    import oci
    object_storage_client = oci.object_storage.ObjectStorageClient(oci.config.from_file())
    result = object_storage_client.get_namespace()
    print("Current object storage namespace: {}".format(result.data))
    EOF
    

    test.py 스크립트는 구성된 OCI 테넌시 및 컴파트먼트에 대한 오브젝트 스토리지 네임스페이스를 표시합니다.

  8. 스크립트를 실행합니다

    Oracle Linux 8:

    python3.12 test.py
    

    Oracle Linux 9:

    python3.9 test.py
    

    테스트 스크립트가 구성된 테넌시의 고유 네임스페이스를 성공적으로 인쇄합니다.

Oracle Cloud Infrastructure Ansible Collection 설치

OCI Ansible Collection에는 클라우드 인프라 프로비저닝 및 구성을 자동화하고, 복잡한 운영 프로세스를 조정하고, 소프트웨어 자산을 배포 및 업데이트하는 모듈 집합이 포함되어 있습니다.

  1. 프로젝트 디렉토리를 만듭니다.

    mkdir ~/myproject
    
  2. 요구 사항 파일을 만듭니다.

    cat << EOF | tee ~/myproject/requirements.yml > /dev/null
    ---
    collections:
      - name: oracle.oci
    EOF
    
  3. OCI Ansible Collection을 설치합니다.

    ansible-galaxy collection install -r ~/myproject/requirements.yml
    

    이전 버전을 설치한 경우 --force 옵션과 함께 명령을 실행하여 최신 릴리스를 가져옵니다.

    ansible-galaxy collection install --force oracle.oci
    

OCI Dynamic Inventory 작업

Oracle은 OCI Ansible Collection에 동적 인벤토리 플러그인을 포함합니다.

  1. YAML 구성 소스를 생성하여 인벤토리 플러그인을 구성합니다.

    소스 파일 이름은 <filename>.oci.yml 또는 <filename>.oci.yaml이어야 합니다. 여기서 <filename>는 사용자가 정의한 유용한 식별자입니다.

    cat << EOF | tee ~/myproject/myproject.oci.yml > /dev/null
    ---
    plugin: oracle.oci.oci
    
    # Optional fields to specify oci connection config:
    config_file: ~/.oci/config
    config_profile: DEFAULT
    EOF
    
  2. Inventory 그래프를 생성하여 Inventory 플러그인을 테스트합니다.

    ansible-inventory -i ~/myproject/myproject.oci.yml --graph
    

    출력에는 일련의 경고 및 오류가 표시됩니다. 무엇이 잘못되었습니까?

    플러그인이 컴파트먼트 OCID를 알고 있어야 하므로 오류가 발생합니다. 컴파트먼트 OCID가 아닌 테넌시 OCID를 제공하고 올바른 권한이 있으면 플러그인이 전체 테넌시에 대한 인벤토리를 생성합니다.

    플러그인이 SDK 구성 파일에서 직접 컴파트먼트 OCID 정보를 읽을 수 없으므로 플러그인 구성 소스 파일에 추가합니다.

  3. SDK 구성 파일에서 컴파트먼트 OCID를 잡고 comp_ocid 변수에 지정합니다.

    comp_ocid=$(grep -i compartment ~/.oci/config | sed -e 's/compartment-id=//g')
    
  4. 플러그인 소스 파일에 컴파트먼트 매개변수를 추가합니다.

    cat << EOF | tee -a ~/myproject/myproject.oci.yml > /dev/null
    
    compartments:
      - compartment_ocid: "$comp_ocid"
        fetch_compute_hosts: true
    EOF
    

    fetch_compute_hoststrue로 설정하면 컴퓨트 호스트의 인벤토리 수집 정보만 생성되고 컴파트먼트 내에 배치된 다른 인스턴스 유형은 무시됩니다.

  5. 테스트를 다시 실행합니다.

    ansible-inventory -i ~/myproject/myproject.oci.yml --graph
    

    예제에서는 구획 내에서 사용 가능한 컴퓨트 인스턴스를 @ 문자로 지정된 인벤토리 그룹 목록으로 표시하고 인스턴스의 공용 IP 주소를 표시합니다.

    전용 IP 주소를 원하면 어떻게 해야 합니까?

    클라우드 기반구조 내에서 구성된 네트워크 토폴로지 또는 컨트롤러 노드의 물리적 위치에 따라 개인 IP 주소를 확보해야 합니다. 전용 IP 주소를 확보하는 또 다른 이유는 요청된 컴퓨트 인스턴스에 전용 IP 주소만 있는 경우입니다.

  6. 플러그인 구성 소스 파일을 업데이트하여 플러그인 호스트 이름 형식 매개변수를 변경합니다.

    cat << EOF | tee -a ~/myproject/myproject.oci.yml > /dev/null
    
    hostname_format_preferences:
      - "private_ip"
      - "public_ip"
    EOF
    

    위의 예제 형식은 공용 IP 주소를 통해 시스템의 전용 IP 주소의 우선 순위를 지정합니다. 이 구성에 대한 자세한 내용은 설명서의 호스트 이름 형식 환경설정을 참조하십시오.

  7. 플러그인을 다시 테스트합니다.

    ansible-inventory -i ~/myproject/myproject.oci.yml --graph
    

    이제 출력에 개인 IP 주소가 표시됩니다.

플레이북 실행

동적 인벤토리 설정 및 구성을 사용하여 간단한 플레이북을 실행할 수 있습니다. 제어 노드와 원격 노드 간에 SSH 액세스를 사용으로 설정했는지 확인합니다.

  1. 호스트를 핑하는 플레이북을 만듭니다.

    cat << EOF | tee ~/myproject/ping.yml > /dev/null
    ---
    - hosts: all,!$(hostname -i)
      tasks:
      - name: Ansible ping test
        ansible.builtin.ping:
    EOF
    

    Oracle Linux Automation Engine은 - hosts: 항목 뒤에 콤마로 구분된 호스트 또는 그룹 목록이 필요하며, !은 해당 항목을 제외해야 함을 나타냅니다. all 항목은 인벤토리에 표시된 각 호스트를 최상위 레벨 그룹 내에 @all로 핑합니다. 이름에서 @ 문자를 제거하고 해당 이름을 - hosts: 항목에 입력하여 그래프 출력과 다른 그룹을 사용하도록 이 플레이북을 수정할 수 있습니다.

  2. Playbook을 실행합니다.

    ansible-playbook -u opc -i ~/myproject/myproject.oci.yml ~/myproject/ping.yml
    

    메시지가 표시되면 ECDSA 키 지문을 수락합니다.

    -i 옵션은 사용되는 동적 인벤토리 파일을 설정합니다.

    -u 옵션은 연결을 시도할 때 원격 SSH 사용자를 설정합니다.

다음 단계

ok 상태로 플레이북 실행을 완료하면 Oracle Linux Automation Engine이 OCI 동적 인벤토리를 성공적으로 사용하여 컴파트먼트 내에서 발견한 원격 인스턴스와 통신할 수 있습니다. 계속해서 학습하고 이 기능을 사용하여 OCI 인스턴스 플리트를 관리하고 Oracle Linux에서 일상적인 관리 작업을 수행할 수 있습니다.

추가 학습 자원

docs.oracle.com/learn에서 다른 실습을 탐색하거나 Oracle Learning YouTube 채널에서 더 많은 무료 학습 콘텐츠에 액세스하세요. 또한 Oracle Learning Explorer가 되려면 education.oracle.com/learning-explorer을 방문하십시오.

제품 설명서는 Oracle Help Center를 참조하십시오.