주:
- 이 자습서는 Oracle에서 제공하는 무료 실습 환경에서 사용할 수 있습니다.
- Oracle Cloud Infrastructure 자격 증명, 테넌시 및 구획에 예제 값을 사용합니다. 실습을 완료했으면 이러한 값을 자신의 클라우드 환경과 관련된 값으로 대체하십시오.
Oracle Linux Automation Engine에서 OCI Dynamic Inventory 사용
소개
프로비저닝 및 구성 관리를 위한 오픈 소스 소프트웨어인 Oracle Linux Automation Engine은 인벤토리 파일을 사용하여 인프라 내의 관리형 노드 또는 호스트에 대해 작동합니다. 이 인벤토리 파일에는 서버 목록, 해당 IP 주소 및 기타 선택적 연결 정보가 포함됩니다.
정적 인벤토리 파일은 Infrastructure가 거의 변경되지 않는 경우에 제대로 작동합니다.
그러나 클라우드를 사용할 때 인프라는 지속적으로 변할 수 있습니다. 따라서 호스트가 추가 및 제거될 때 인벤토리를 동적으로 갱신하는 것이 좋습니다.
목표
이 자습서에서는 다음 내용을 학습합니다.
- Oracle Linux Automation Engine 설정
- OCI 동적 인벤토리 생성
- 플레이북과 함께 OCI 동적 인벤토리 사용
필요 조건
-
다음 구성이 포함된 최소 2개의 Oracle Linux 시스템:
- sudo 권한이 있는 비루트 사용자
- 비루트 사용자에 대한 ssh 키 쌍
- 암호 없는 SSH 로그인을 사용하여 호스트 간에 SSH를 지정하는 기능
Oracle Linux Automation Engine 배포
주: 고유 테넌시에서 실행 중인 경우 랩 환경을 배치하기 전에 linux-virt-labs
GitHub 프로젝트 README.md을 읽고 필요 조건을 완료하십시오.
-
Luna Desktop에서 터미널을 엽니다.
-
linux-virt-labs
GitHub 프로젝트를 복제합니다.git clone https://github.com/oracle-devrel/linux-virt-labs.git
-
작업 디렉토리로 변경합니다.
cd linux-virt-labs/olam
-
필요한 모음을 설치합니다.
ansible-galaxy collection install -r requirements.yml
-
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
-
재고 파일을 생성합니다.
cat << EOF | tee hosts > /dev/null localhost ansible_connection=local ansible_connection=local ansible_python_interpreter=/usr/bin/python3.6 EOF
-
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 패키지를 설치해야 합니다.
-
컨트롤 노드의 IP 주소와 같은 변수를 설정합니다.
export CONTROL="<ip_address_of_ol-control-node>"
-
터미널을 열고 SSH 키 쌍을 제어 노드에 복사합니다.
scp -rp ~/.ssh/id_rsa* oracle@$CONTROL:~/.ssh/
-
SSH 개인 키에 대한 권한을 설정합니다.
ssh oracle@$CONTROL "chmod 600 ~/.ssh/id_rsa"
-
SSH를 통해 ol-control-node 시스템에 연결합니다.
ssh oracle@$CONTROL
-
Oracle Linux Automation Engine 패키지 및 종속성을 설치합니다.
sudo dnf install -y ansible-core
ansible-core 패키지는 AppStream 저장소에서 제공됩니다.
-
패키지 설치를 테스트합니다.
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를 설치할 수 있습니다.
-
PIP를 사용하여 OCI SDK for Python을 설치합니다.
-
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
-
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
명령을 실행하여 도움말에서 확인할 수 있습니다.
-
-
해당 버전을 인쇄하여 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__)"
-
OCI SDK 기본 구성 디렉토리를 생성합니다.
mkdir -p ~/.oci
-
SDK 기본 구성 파일 생성
무료 실습에서는
scp
를 사용하여 ol-control-node 시스템에 복사할 수 있는 사전 생성된 SDK 구성을 제공합니다.-
데스크탑 환경에서 새 터미널을 엽니다.
-
모든 SDK 구성 파일을 ol-control-node 시스템으로 복사합니다.
scp ~/.oci/* oracle@<ip_address_of_instance>:~/.oci/.
exit
무료 실습 환경 외부에서 이 자습서를 따르는 경우 OCI Documentation의 SDK and CLI Configuration File 및 Required Keys and OCIDs 섹션 내에 제공된 지침을 참조하여 OCI 구성 파일을 생성합니다.
-
-
ol-control-node 시스템에 연결된 터미널 창으로 전환합니다.
-
SDK 구성 파일에서
key_file
의 위치를 업데이트합니다.데스크탑 환경에서 SDK 구성 파일을 복사할 때 제어 시스템의 사용자 이름과 일치하도록
key_file
의 사용자 홈 디렉토리 부분을 수정해야 합니다.sed -i 's/luna.user/oracle/g' ~/.oci/config
-
테스트 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 테넌시 및 컴파트먼트에 대한 오브젝트 스토리지 네임스페이스를 표시합니다. -
스크립트를 실행합니다
Oracle Linux 8:
python3.12 test.py
Oracle Linux 9:
python3.9 test.py
테스트 스크립트가 구성된 테넌시의 고유 네임스페이스를 성공적으로 인쇄합니다.
Oracle Cloud Infrastructure Ansible Collection 설치
OCI Ansible Collection에는 클라우드 인프라 프로비저닝 및 구성을 자동화하고, 복잡한 운영 프로세스를 조정하고, 소프트웨어 자산을 배포 및 업데이트하는 모듈 집합이 포함되어 있습니다.
-
프로젝트 디렉토리를 만듭니다.
mkdir ~/myproject
-
요구 사항 파일을 만듭니다.
cat << EOF | tee ~/myproject/requirements.yml > /dev/null --- collections: - name: oracle.oci EOF
-
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에 동적 인벤토리 플러그인을 포함합니다.
-
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
-
Inventory 그래프를 생성하여 Inventory 플러그인을 테스트합니다.
ansible-inventory -i ~/myproject/myproject.oci.yml --graph
출력에는 일련의 경고 및 오류가 표시됩니다. 무엇이 잘못되었습니까?
플러그인이 컴파트먼트 OCID를 알고 있어야 하므로 오류가 발생합니다. 컴파트먼트 OCID가 아닌 테넌시 OCID를 제공하고 올바른 권한이 있으면 플러그인이 전체 테넌시에 대한 인벤토리를 생성합니다.
플러그인이 SDK 구성 파일에서 직접 컴파트먼트 OCID 정보를 읽을 수 없으므로 플러그인 구성 소스 파일에 추가합니다.
-
SDK 구성 파일에서 컴파트먼트 OCID를 잡고 comp_ocid 변수에 지정합니다.
comp_ocid=$(grep -i compartment ~/.oci/config | sed -e 's/compartment-id=//g')
-
플러그인 소스 파일에 컴파트먼트 매개변수를 추가합니다.
cat << EOF | tee -a ~/myproject/myproject.oci.yml > /dev/null compartments: - compartment_ocid: "$comp_ocid" fetch_compute_hosts: true EOF
fetch_compute_hosts
를true
로 설정하면 컴퓨트 호스트의 인벤토리 수집 정보만 생성되고 컴파트먼트 내에 배치된 다른 인스턴스 유형은 무시됩니다. -
테스트를 다시 실행합니다.
ansible-inventory -i ~/myproject/myproject.oci.yml --graph
예제에서는 구획 내에서 사용 가능한 컴퓨트 인스턴스를
@
문자로 지정된 인벤토리 그룹 목록으로 표시하고 인스턴스의 공용 IP 주소를 표시합니다.전용 IP 주소를 원하면 어떻게 해야 합니까?
클라우드 기반구조 내에서 구성된 네트워크 토폴로지 또는 컨트롤러 노드의 물리적 위치에 따라 개인 IP 주소를 확보해야 합니다. 전용 IP 주소를 확보하는 또 다른 이유는 요청된 컴퓨트 인스턴스에 전용 IP 주소만 있는 경우입니다.
-
플러그인 구성 소스 파일을 업데이트하여 플러그인 호스트 이름 형식 매개변수를 변경합니다.
cat << EOF | tee -a ~/myproject/myproject.oci.yml > /dev/null hostname_format_preferences: - "private_ip" - "public_ip" EOF
위의 예제 형식은 공용 IP 주소를 통해 시스템의 전용 IP 주소의 우선 순위를 지정합니다. 이 구성에 대한 자세한 내용은 설명서의 호스트 이름 형식 환경설정을 참조하십시오.
-
플러그인을 다시 테스트합니다.
ansible-inventory -i ~/myproject/myproject.oci.yml --graph
이제 출력에 개인 IP 주소가 표시됩니다.
플레이북 실행
동적 인벤토리 설정 및 구성을 사용하여 간단한 플레이북을 실행할 수 있습니다. 제어 노드와 원격 노드 간에 SSH 액세스를 사용으로 설정했는지 확인합니다.
-
호스트를 핑하는 플레이북을 만듭니다.
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:
항목에 입력하여 그래프 출력과 다른 그룹을 사용하도록 이 플레이북을 수정할 수 있습니다. -
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를 참조하십시오.
Use an OCI Dynamic Inventory with Oracle Linux Automation Engine
F55855-03
Copyright ©2022, Oracle and/or its affiliates.