附註:

搭配 Oracle Linux Automation Engine 使用 OCI 動態產品目錄

簡介

Oracle Linux Automation Engine (用於佈建和組態管理的開放原始碼軟體) 使用產品目錄檔案來處理基礎架構中的受管理節點或主機。此產品目錄檔案包含伺服器清單、它們的 IP 位址以及其他選擇性的連線資訊。

如果您的基礎架構強制變更,靜態產品目錄檔案就可以正常運作。

不過,使用雲端時,您的基礎架構可能會持續流通。因此,當主機出現並開始時,最好能夠動態更新庫存。

目標

在本教學課程中,您將學習到:

必要條件

部署 Oracle Linux Automation Engine

注意:如果在您自己的租用戶中執行,請先閱讀 linux-virt-labs GitHub 專案 README.md 並完成先決條件,再部署實驗室環境。

  1. 在 Luna 桌面上開啟終端機。

  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"
    EOF
    
  6. 部署實驗室環境。

    ansible-playbook create_instance.yml -e localhost_python_interpreter="/usr/bin/python3.6" -e "@instances.yml"
    

    自由實驗室環境需要額外的變數 local_python_interpreter,此變數會設定 ansible_python_interpreter 代表在 localhost 上執行的播放。環境會安裝 Oracle Cloud Infrastructure SDK for Python 的 RPM 套裝程式 (位於 python3.6 模組底下),因此需要此變數。

    預設部署資源配置使用 AMD CPU 和 Oracle Linux 8。若要使用 Intel CPU 或 Oracle Linux 9,請在部署命令中新增 -e instance_shape="VM.Standard3.Flex"-e os_version="9"

    重要事項:等待手冊順利執行並到達暫停工作。在此階段的手冊中,Oracle Linux 的安裝已完成,且執行處理已就緒。請注意先前的播放,其會列印部署節點的公用和專用 IP 位址,以及執行實驗室時所需的任何其他部署資訊。

安裝 Oracle Linux Automation Engine Control Node

控制節點是執行 Oracle Linux Automation Engine 手冊的系統。執行手冊之前,必須先安裝 Oracle Linux Automation Engine 套件。

  1. 開啟新終端機,並透過 SSH 連線至 ol-control-node 系統。

    ssh oracle@<ip_address_of_instance>
    
  2. 安裝 Oracle Linux Automation Engine 套裝程式和相依性。

    sudo dnf install -y ansible-core
    

    ansible-core 套裝軟體可於 ol8_appstream 儲存庫中取得。

  3. 測試套裝軟體安裝。

    ansible --version
    

    複查輸出並尋找預設版本的 Python Oracle Linux Automation Manager。這就是必須安裝 Python 適用的 Oracle Cloud Infrastructure (OCI) SDK 的環境。

    注意:如果輸出顯示錯誤:Ansible 需要將地區設定編碼設為 UTF-8;偵測到「無」。,代表 ansible 的地區設定設定不正確。設定這兩個環境變數來修正問題:

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

設定 Python 適用的 Oracle Cloud Infrastructure SDK

OCI 動態產品目錄 Plugin 需要在控制節點上使用 OCI SDK 進行 Python 組態設定。我們可以使用 Python 套裝程式安裝程式 Oracle Linux RPM 或 PIP 安裝 OCI SDK。

  1. 使用 PIP 安裝適用於 Python 的 OCI SDK。

    1. 安裝 PIP 的套裝軟體和相依性。

      sudo dnf install -y python3.12-pip python3.12-setuptools
      
    2. 安裝 Python 套裝軟體

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

      如果您位於代理伺服器後方,請增加 --proxy 選項。執行 python3.12 -m pip help install 命令可在說明中取得詳細資訊。

  2. Test the OCI SDK for Python installation by printing its version.

    python3.12 -c "import oci;print(oci.__version__)"
    
  3. 建立 OCI SDK 預設組態目錄。

    mkdir -p ~/.oci
    
  4. 建立 SDK 預設組態檔

    免費實驗室提供預先產生的 SDK 組態,我們可以複製到使用 scp 的 ol-control-node 系統。

    1. 從桌面環境開啟一個 new 終端機。

    2. 將所有 SDK 組態檔複製到 ol-control-node 系統。

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

    如果您在免費實驗室環境之外遵循此教學課程,請參閱 OCI 文件的 SDK 和 CLI 組態檔必要的金鑰和 OCID 區段中提供的指示,以產生您的 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. 執行命令檔

    python3.12 test.py
    

    測試命令檔已順利列印所設定租用戶的唯一命名空間。

安裝 Oracle Cloud Infrastructure Ansible 集合

OCI Ansible 集合包含一組模組,可將雲端基礎架構的佈建和組態自動化、協調複雜的作業處理作業,以及部署和更新軟體資產。

  1. 建立專案目錄。

    mkdir ~/myproject
    
  2. 建立必修課程檔案。

    cat << EOF | tee ~/myproject/requirements.yml > /dev/null
    ---
    collections:
      - name: oracle.oci
    EOF
    
  3. 安裝 OCI Ansible 集合。

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

    如果您已安裝舊版本,請使用 --force 選項執行指令,以取得最新版本。

    ansible-galaxy collection install --force oracle.oci
    

使用 OCI 動態產品目錄

Oracle 在 OCI Ansible 集合中包括其動態產品目錄 Plugin。

  1. 建立 YAML 組態來源以設定產品目錄 Plugin。

    來源檔案名稱必須為 <filename>.oci.yml<filename>.oci.yaml。其中 <filename> 是使用者定義的實用 ID。

    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. 建立產品目錄圖表以測試產品目錄 Plugin。

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

    輸出會顯示一系列的警告與錯誤。什麼東西不對勁?

    發生此錯誤的原因是 Plugin 需要知道區間 OCID。如果您提供租用戶 OCID (而非區間 OCID) 且具備正確的權限,Plugin 將會產生整個租用戶的產品目錄。

    Plugin 無法直接從 SDK 組態檔讀取區間 OCID 資訊,請將它加到 Plugin 組態來源檔案。

  3. 從 SDK 組態檔擷取區間 OCID,然後將其指定給 comp_ocid 變數。

    comp_ocid=$(grep -i compartment ~/.oci/config | sed -e 's/compartment-id=//g')
    
  4. 將區間參數附加至 Plugin 來源檔案。

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

    fetch_compute_hosts 若設為 true,產品目錄只會收集運算主機上的資訊,並忽略區間內部署的其他執行處理類型。

  5. 重新執行測試。

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

    我們的範例將區間內可用的運算執行處理顯示為以 @ 字元指定的產品目錄群組清單,並顯示執行處理的公用 IP 位址。

    如果我們想要私有 IP 位址,該怎麼辦?

    必須根據控制器節點的實體位置或雲端基礎架構內設定的網路拓樸,擷取專用 IP 位址。另一個擷取專用 IP 位址的原因是要求的運算執行處理只有專用 IP 位址時。

  6. 更新 Plugin 組態來源檔案,以變更 Plugin 主機名稱格式參數。

    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 存取。我們已在第一次部署執行處理時,使用無密碼 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. 執行此手冊 。

    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 頻道上的更多免費學習內容。此外,請造訪 education.oracle.com/learning-explorer 以成為 Oracle Learning Explorer。

如需產品文件,請造訪 Oracle Help Center