附註:

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

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

    免費實驗室環境需要額外的 localhost ansible_python_interpreter 變數,因為它會為 Python 適用的 Oracle Cloud Infrastructure SDK 安裝 RPM 套件。安裝此套裝軟體的位置位於以您 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 適用的 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 的套裝軟體和相依性。

      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. 列印版本以測試適用於 Python 的 OCI SDK 安裝。

    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 預設組態檔

    免費實驗室提供預先產生的 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. 執行命令檔

    Oracle Linux 8:

    python3.12 test.py
    

    Oracle Linux 9:

    python3.9 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 存取。

  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