附註:
- 此教學課程需要存取 Oracle Cloud。若要註冊免費帳戶,請參閱開始使用 Oracle Cloud Infrastructure Free Tier 。
- 它使用 Oracle Cloud Infrastructure 憑證、租用戶及區間的範例值。完成實驗室時,請以雲端環境特有的值取代這些值。
根據 OCI 負載平衡器 HTTP 要求自動調整 Oracle Cloud Infrastructure 執行處理集區
簡介
在本教學課程中,我們將瞭解如何根據 OCI 負載平衡器收到的 HTTP 要求數目自動調整 Oracle Cloud Infrastructure (OCI) 執行處理集區。我們將涵蓋三個主要主題。
- OCI 監控警示度量:監控您的負載平衡器,並根據 HTTP 要求度量設定警示。
- OCI 通知服務:觸發警示時傳送通知。
- OCI 函數:建立並使用函數,根據收到的通知來調整執行處理集區的大小。
OCI 監控:使用 OCI 監控服務,使用度量和警訊功能主動和被動監控雲端資源。OCI Monitoring 服務使用指標監控資源和警報,以在這些指標符合警報指定的觸發器時通知您。
OCI 通知:當您在 OCI 中的資源發生問題時,您可以使用警訊、事件規則和連接器,透過支援的端點 (包括電子郵件和簡訊 (SMS) 取得可讀訊息。您也可以透過自訂 HTTPS 端點和 OCI 函數將工作自動化。
OCI 函數: OCI Functions 是一個完全託管的多租用戶,可高度擴展,可隨選函數即服務平台。它是以企業級 OCI 為基礎,由 Fn Project 開放原始碼引擎提供技術支援。當您想要專注於撰寫程式碼以滿足業務需求時,請使用 OCI Functions (有時縮寫為 Functions,之前稱為 Oracle Functions)。
高階架構
注意:
本教程僅供教育和學習之用。它為學員提供一個實驗環境,並在受控制的環境中獲得實際經驗。請注意,本教學課程中使用的安全組態和實務可能不適用於實際情況。
真實世界應用程式的安全考量通常更複雜且動態。因此,在實際執行環境中實行此處示範的任何技術或組態之前,必須先進行全面性的安全評估和複查。此複查應涵蓋安全的所有層面,包括存取控制、加密、監督以及規範,以確保系統符合組織的安全原則和標準。
從實驗室環境轉換成實際部署時,安全性應始終是首要任務。
目標
-
設定 OCI 執行處理集區的自動調整機制。此自動調整機制將根據 OCI 負載平衡器收到的 HTTP 要求數目而定。您將瞭解如何:
-
監督 HTTP 要求度量:設定 OCI 監控以追蹤負載平衡器的 HTTP 要求度量。
-
建立並設定警示:定義並設定根據特定 HTTP 要求臨界值觸發的警示。
-
設定事件通知:建立事件通知以在觸發警示時向您發出警示。
-
導入 OCI 函數:建立並部署函數,以自動調整執行處理集區的大小,以回應觸發的警示。
-
必要條件
-
OCI 環境
-
具備管理員權限的 Oracle 帳戶。
-
建立資源的區間。
注意:請注意區間名稱和區間 ID。
-
具有專用子網路的 VCN。如需詳細資訊,請參閱建立虛擬雲端網路。
-
連附至執行處理集區的 OCI 負載平衡器,其 backendSet 指向集區上的執行處理。如需詳細資訊,請參閱建立負載平衡器。
-
至少有一個執行處理的執行處理集區,其簡單 HTTP 應用程式是在連接埠
80
上執行。如需詳細資訊,請參閱使用執行處理組態和執行處理集區。
-
-
區域機器環境
-
專用子網路上的 Oracle Linux 運算執行處理。這對於存取專用子網路上的資源很重要,例如將在本教學課程期間部署的 OCI Streaming 和 OCI Functions。
-
連線至 Oracle Linux 運算執行處理並執行教學課程作業的 OCI 堡壘主機。如需詳細資訊,請參閱堡壘主機總覽。
-
設定本機 Oracle Cloud Infrastructure 命令行介面 (OCI CLI)。如需詳細資訊,請參閱 Installing the CLI 。
-
若要能夠建置映像檔的本機 Docker,如果您使用 Oracle Linux,請參閱 Docker:Install Docker on Oracle Linux 8 (OL8) 。
-
本機 FN CLI 可將您的功能部署到 OCI。如需詳細資訊,請參閱安裝 Fn 專案 CLI 。
-
作業 1:設定動態群組
移至您的網域,按一下動態群組並建立下列群組。
動態群組名稱:MyFunctions
。
ALL {resource.type = 'fnfunc', resource.compartment.id = 'pasteYourCompartmentOCID'}
作業 2:建立原則
請前往原則並建立下列原則。
原則名稱: FunctionsPolicies
。
Allow dynamic-group MyFunctions to read repos in compartment YOUR-COMPARTMENT-NAME
Allow dynamic-group MyFunctions to manage compute-management-family in compartment YOUR-COMPARTMENT-NAME
Allow dynamic-group MyFunctions to manage load-balancers in compartment YOUR-COMPARTMENT-NAME
Allow dynamic-group MyFunctions to read metrics in compartment YOUR-COMPARTMENT-NAME
Allow dynamic-group MyFunctions to read alarms in compartment YOUR-COMPARTMENT-NAME
Allow dynamic-group MyFunctions to manage instance-pools in compartment YOUR-COMPARTMENT-NAME
Allow dynamic-group MyFunctions to manage instance-family in compartment YOUR-COMPARTMENT-NAME
Allow dynamic-group MyFunctions to read app-catalog-listing in compartment YOUR-COMPARTMENT-NAME
Allow dynamic-group MyFunctions to use volume-family in compartment YOUR-COMPARTMENT-NAME
Allow dynamic-group MyFunctions to use virtual-network-family in compartment YOUR-COMPARTMENT-NAME
作業 3:建立 OCI 容器登錄
-
前往開發人員服務,按一下容器登錄,然後為 Fn 映像檔建立專用儲存區域。
儲存庫名稱:
lab/fn-autoscale-instance-pool
。 -
檢查儲存區域並記下命名空間。
-
開啟已安裝 OCI CLI 和 Docker 的終端機 Shell,然後繼續登入登錄。請檢查您區域的正確 URL。在本教學課程中,我們正在使用登錄 URL 為
gru.ocir.io
的巴西東部 (聖保羅) 區域。docker login gru.ocir.io Username: <your container namespace>/youruser Password: YOUR_AUTH_TOKEN_CREATED_EARLIER
作業 4:建立 Python OCI 函數以自動調整執行處理集區
注意: 請確定您選取的專用子網路與串流集區的子網路相同。
-
移至 OCI 主控台,然後按一下開發人員服務。在函數下方,按一下應用程式和建立應用程式。
-
建立一些組態以設定調整大小。
注意:這些組態變數是用來決定函數用來橫向縮減及橫向擴展執行處理集區的值。
加密密碼名稱 數值 INSTANCE_POOL_TARGET_SIZE 設定新執行處理集區大小的值 INSTANCE_POOL_DESIRED_SIZE 設定執行處理集區的一般大小 本教學課程使用 1 個執行處理的執行處理集區並擴展至
2
。 -
移至已安裝 Docker、OCI CLI、Fn Project CLI 的終端機 Shell,然後執行下列命令來初始化函數。
注意:如果您遵循這些作業,現在已經執行您的 Docker 登入命令 (如果沒有的話),請繼續執行作業 3.3 中的 Docker 日誌。
mkdir lab cd lab fn create context oci-cloud --provider oracle fn use context oci-cloud fn update context oracle.compartment-id PASTE_YOUR_COMPARTMENT_OCID fn update context api-url https://functions.sa-saopaulo-1.oraclecloud.com fn update context registry gru.ocir.io/PASTE_YOUR_REGISTRY_NAMESPACE/lab fn init --runtime python fn-autoscale-instance-pool cd fn-autoscale-instance-pool ls -lrt
注意:在本教學課程中,我們將使用 Brazil East (Sao Paulo) 區域,如果您使用其他區域,則需要變更
api-url
和registry
位置。init
命令會在func.py
上建立 Hello World 函數。我們將覆寫此驗證碼。 -
從此處取得 Python 函數範例程式碼:func.py 並覆寫在函數
init
命令期間建立的本機func.py
。# Copy the function code from this lab and save it on /tmp/func.py in your shell machine ls -lrt /tmp/func.py # Overwrite the func.py with tha lab's code cp /tmp/func.py func.py # Add the OCI package on the requirements.txt file, this will be needed to work with OCI. echo -e "\noci" >> requirements.txt # Check if requirements.txt has two lines cat requirements.txt
-
建立新程式碼並部署函數。
ls -lrt fn deploy --app MyApp
作業 5:建立 OCI 通知
-
移至 OCI 主控台,然後按一下開發人員服務。在應用程式整合下,選取通知,然後按一下建立主題。
名稱:
AutoScaleTopic
。 -
按一下訂閱以建立新訂閱,然後選取在「任務 4」中建立的函數。
工作 6:建立要橫向擴展的警示定義 (將執行處理集區大小調整為目標值)
-
前往 OCI 主控台,然後按一下可觀測性與管理。在監督底下,選取警示定義,然後按一下建立警示。
注意:此警示的臨界值 (間隔) 是針對教學課程所定義,您可以根據應用程式,根據自己的需求加以自訂。
警示名稱:
instance_pool_scale_OUT
。 -
輸入下列資訊以定義警示。
-
在測量結果描述段落中,輸入下列資訊。
- 測量結果命名空間:
oci_lbaas
。 - 測量結果名稱:
HttpRequests
。 - 間隔:
1 minute
。 - 統計資料:
Max
。
- 測量結果命名空間:
-
在測量結果維度區段中,輸入下列資訊。
-
第一個測量結果維度:
- 維度名稱:
resourceID
。 - 維度值:選取您的負載平衡器 OCID。
- 維度名稱:
-
第二個測量結果維度:
- 維度名稱:
backendSetName
。 - 維度值:選取您的 backendSet 名稱。
- 維度名稱:
-
-
在觸發程式規則 1 區段中,輸入下列資訊。
- 運算子:
greater than
。 - 值:
30
。 - 警示主體:連線數目高於預期,起始調整處理作業。
- 運算子:
-
-
輸入下列資訊以定義警示通知。
-
在目標區段中,輸入以下資訊。
- 目的地服務:選取通知。
- 區間:選取您的區間。
- 主題:選取您的主題。
-
在訊息格式區段中,選取傳送 Pretty JSON 訊息 (含分行符號的原始文字) ,並選取重複通知? (含通知頻率的 1 分鐘)。
-
-
按一下進階選項,然後新增標記。
備註:此為必要標記,以定義縮放類型 (進出)。
標記命名空間:選取無 (套用自由格式標記) 。
標記金鑰:autoscaling_type
。值:out
。
工作 7:建立縮放的警示定義 (將執行處理集區大小調整回想要的大小)
-
前往 OCI 主控台,然後按一下可觀測性與管理。在監督底下,選取警示定義,然後按一下建立警示。
注意:此警示的臨界值 (間隔) 是針對教學課程所定義,您可以根據應用程式,根據自己的需求加以自訂。
警示名稱:
instance_pool_scale_IN
。 -
輸入下列資訊以定義警示。
-
在測量結果描述段落中,輸入下列資訊。
- 測量結果命名空間:
oci_lbaas
。 - 測量結果名稱:
HttpRequests
。 - 間隔:
1 minute
。 - 統計資料:
Max
。
- 測量結果命名空間:
-
在測量結果維度區段中,輸入下列資訊。
-
第一個測量結果維度:
- 維度名稱:
resourceID
。 - 維度值:選取您的負載平衡器 OCID。
- 維度名稱:
-
第二個測量結果維度:
- 維度名稱:
backendSetName
。 - 維度值:選取您的 backendSet 名稱。
- 維度名稱:
-
-
在觸發程式規則 1 區段中,輸入下列資訊。
- 運算子:
less than
。 - 值:
30
。 - 警示主體:連線計數會回到可接受的值,呼叫縮減以將執行處理數目減少回所需的值。
- 運算子:
-
-
輸入下列資訊以定義警示通知。
-
在目標區段中,輸入以下資訊。
- 目的地服務:選取通知。
- 區間:選取您的區間。
- 主題:選取您的主題。
-
在訊息格式區段中,選取傳送 Pretty JSON 訊息 (含換行符號的原始文字) 。
-
-
按一下進階選項,然後新增標記。
備註:此為必要標記,以定義縮放類型 (進出)。
標記命名空間:選取無 (套用自由格式標記) 。
標記金鑰:autoscaling_type
。值:in
。
作業 8:建立裝貨並檢查警示作業中
-
取得您的 LoadBalancer IP,並在連接埠
80
上對應用程式執行數次呼叫。開啟您的 Shell 主控台,然後執行下列程式碼來呼叫您的負載平衡器。i=1 while true do echo "Request $i" curl http://your-ip-here ((i++)) echo "" # Prints a newline for better readability between requests done
簡單應用程式載入的輸出。
注意:這是示範分析藍本的簡單 HTTP Apache Web 伺服器。
-
檢查執行處理集區的實際大小和狀態。本教學課程的執行處理集區大小為
1
。 -
開啟警示定義以檢視度量,並檢查是否會觸發警示。
-
視度量間隔而定,經過數分鐘後,將會觸發橫向擴展函數。
開啟執行處理集區並檢查狀態 ( 調整規模和目標執行處理計數為
2
)。調整處理之後,您可以看到執行處理集區大小是
2
。 -
停止 Shell 命令檔,並等待橫向擴展轉換的警示回復至確定,然後觀察到縮減警示。等待數分鐘,直到兩個警示都更新為止,並且觀察是否會觸發橫向縮減警示。
現在,縮小型警報處於火災狀態。
請注意,HttpRequests 已捨棄至低於
30
臨界值的數字。執行處理集區橫向縮減已啟動。
請注意,執行處理集區大小會回到想要的值
1
。
相關連結
認可
- 作者 - Joao Tarla (Oracle LAD A 團隊解決方案工程師)
其他學習資源
瀏覽 docs.oracle.com/learn 的其他實驗室,或前往 Oracle Learning YouTube 頻道存取更多免費學習內容。此外,請造訪 education.oracle.com/learning-explorer 以成為 Oracle Learning Explorer。
如需產品文件,請造訪 Oracle Help Center 。
Autoscale an Oracle Cloud Infrastructure Instance Pool based on OCI Load Balancer HTTP Requests
F99763-01
May 2024