用 WebSphere CloudBurst 實現定製: 使用指令碼包定製超級模式

CloudSpace發表於2010-03-01

轉自:http://www.ibm.com/developerworks/cn/websphere/techjournal/0911_stelzer/0911_stelzer.html

簡介

IBM WebSphere CloudBurst Appliance 是一個新的促進私有云環境建立和管理的 IBM 硬體裝置。WebSphere CloudBurst 模式表示可共享、可重複的部署的拓撲定義,它在私有云建立中具有重要作用。WebSphere CloudBurst 包含幾個基於行業最佳實踐的預載入 WebSphere Application Server 模式。WebSphere CloudBurst 不僅提供這些模式以幫助您快速構建帶有不同拓撲的虛擬系統,它還允許您定製雲以滿足您的業務要求。

您可以使用一些定製技術,比如,您可以:

  • 定製預載入虛擬映像和模式。
  • 使用管理控制檯直接配置已部署 WebSphere Application Server 環境。
  • 定義自己的指令碼以配置已部署環境。

本系列的 第 1 部分 重點介紹了這些和其他一些技術。本文主要關注指令碼包,內容涉及:

  • 一個典型指令碼包的格式和構成。
  • 如何在此裝置中上傳並管理指令碼包。
  • 如何關聯指令碼包和模式。
  • 如何在虛擬系統中傳輸和執行指令碼包。

    指令碼包

    指令碼包設計用於定製模式中的各個部件的行為。使用指令碼包的目的是在 WebSphere CloudBurst 提供的標準定製之外進一步定製您的 WebSphere Application Server 環境。一個典型的場景是將一個 WebSphere Application Server 應用程式安裝到 WebSphere CloudBurst 提供的伺服器或叢集環境中,如本系列 第 1 部分 所述。

    指令碼包是包含要執行的工件和要在其上執行的工件的歸檔檔案(.zip)。指令碼包可以簡單到只包含一個指令碼檔案,也可以複雜到包含一個全新的產品。WebSphere CloudBurst 沒有定義或限制指令碼包的內容。包含在指令碼包中的指令碼定義指令碼包的要求。圖 1 展示一個樣例指令碼包的內容。


    圖 1. 樣例指令碼包的典型內容
    圖 1. 樣例指令碼包的典型內容

    如圖所示,這個樣例指令碼包名為 MyLabApplication.zip,包含兩類檔案:

    • J2EE™ 應用程式 EAR 檔案,表示要安裝的應用程式。
    • 可執行的 Jython 指令碼檔案(副檔名為 .jy),包含對單個 WebSphere Application Server 例項或一個 WebSphere Application Server 例項叢集執行應用程式安裝的邏輯。

    模式由虛擬映像部件組成,每個虛擬映像部件部署後都在自己的虛擬機器內執行。每個指令碼包與一個虛擬映像部件關聯。部署時,虛擬映像部件變成一個虛擬機器,與該虛擬映像部件關聯的指令碼包在那個虛擬機器上執行。關聯指令碼包和虛擬映像部件非常簡單,只需將指令碼包拖放到虛擬映像部件上。

    在部署過程中,WebSphere CloudBurst 首先為每個虛擬映像部件建立並配置一個虛擬機器。一旦這個拓撲配置完成並執行,WebSphere CloudBurst 將作為根上下文通過 SSH 連線到指令碼包指向的虛擬機器。然後,WebSphere CloudBurst 將解壓縮指令碼包歸檔檔案並執行其中的指令碼。


    一個端到端指令碼包場景

    本小節介紹建立一個指令碼包並將其部署到雲的步驟。

    建立一個包含可執行指令碼和支援工件的歸檔檔案(.zip)後,您就可以在 WebSphere CloudBurst 中建立一個指令碼包。

    1. 導航到 Catalog => Script. Packages,要建立一個指令碼包,單擊綠色加號圖示。圖 2 展示了一個名為 My Demo Script. Package 的指令碼包。
    2. 將您的歸檔檔案上傳到 WebSphere CloudBurst。單擊 Browse... 按鈕,從您的本地檔案系統選擇您的歸檔檔案,然後單擊 Upload。這個操作花費的時間取決於歸檔檔案的大小和您的網路連線的速度。這個步驟完成後,您將在 Upload 按鈕下接收到一條操作成功確認訊息。

      圖 2. 上傳 .zip 或 .tar 歸檔檔案
      圖 2. 上傳 .zip 或 .tar 歸檔檔案

    3. 定義想要 WebSphere CloudBurst 呼叫的可執行檔案。由於本示例的目的是安裝一個應用程式,因此將您的 Executable 欄位指向圖 3 中的 wsadmin.sh 命令。(這個可執行檔案不一定是 wsadmin.sh,它可以是在駐留在目標環境或歸檔檔案中的任何可執行檔案)。

      指令碼包上也沒有人為限制。您的指令碼包可以安裝應用程式,配置 WebSphere Application Server,調優作業系統和安裝全新的產品等。儘管沒有限制,但有一些關於指令碼包的用法的最佳實踐,本系列 第 1 部分 介紹了相關的最佳實踐。



      圖 3. 定義要執行的可執行檔案
      圖 3. 定義要執行的可執行檔案

    4. 定義引數。Arguments 欄位在圖 4 中突出顯示,這裡定義的引數將在可執行檔案執行時傳送到該可執行檔案。在本例中,歸檔檔案包含兩個檔案,一個 EAR 檔案和一個 Jython 指令碼 appInstall.jy。該指令碼檔案安裝歸檔檔案中包含的 EAR 檔案。

      圖 4. 定義可執行檔案的引數
      圖 4. 定義可執行檔案的引數

    5. 定義工作目錄。圖 5 展示了 Working directory 欄位,該欄位的值表明您的指令碼包中的內容的解壓縮目錄。

      圖 5. 定義工作目錄
      圖 5. 定義工作目錄

    6. 圖 6 中的 Logging directory 欄位告訴 WebSphere CloudBurst 用於儲存執行指令碼包產生的日誌的目錄;這不是告訴可執行檔案何處放置日誌的輸入。由於您在這裡定義了日誌位置,您將能夠使用 WebSphere CloudBurst 來檢視這些日誌(稍後將進行展示)。

      圖 6. 定義日誌目錄
      圖 6. 定義日誌目錄

    您可能已經注意到,這個示例的許多指令碼包欄位使用了變數。這裡有兩類變數:

    • 使用者定義變數在 Environment 欄位中定義(見圖 7)。這些變數特定於定義它們的指令碼包。一個變數在 Environment 欄位中定義後,它就可以用於歸檔檔案中定義的指令碼或指令碼包本身的定義。您可以輸入一個鍵及其預設值或只輸入一個鍵。如果您只輸入鍵(或者甚至只輸入一個值),您就有機會在模式建立或部署時輸入或覆蓋那個值。這個示例定義一個不帶關聯值的 DB2_HOSTNAME 變數,因此該值需要在部署前定義。
    • WebSphere CloudBurst 定義自己的變數組並使用 os.environ[‘…’](即 os.environ[‘CELL_NAME’])命令使它們對歸檔檔案內部定義的指令碼可用。這些變數也可用於指令碼包的定義。這些變數是所有指令碼包都通用的,但變數值是執行指令碼包的上下文特定的。

      為了更好地理解這一點,請看看圖 7 中的 Arguments 欄位,注意 ${WAS_PASSWORD} 的使用。部署時,您需要為該環境輸入一個密碼,這個密碼將在指令碼包執行期間使用。不推薦使用硬編碼密碼方法,否則您的指令碼包將繫結到使用相同密碼的部署。


    圖 7. 定義環境變數
    圖 7. 定義環境變數

    表 1 顯示了一些經常使用的變數(WebSphere CloudBurst 定義的變數的完整列表可以在 WebSphere CloudBurst Information Center 找到)。記住,您不能使用 WebSphere CloudBurst 定義的變數名稱建立使用者定義變數。


    表 1. 部分預定義 WebSphere Application Server 環境變數
    變數 說明
    CELL_NAME 單元名
    NODE_NAME 節點名
    WAS_INSTALL_ROOT 安裝根目錄(例如 C:/WebSphere/AppServer
    WAS_PROFILE_ROOT 配置根目錄(例如 C:/WebSphere/AppServer/profiles/DefaultProfile
    PROFILE_NAME 配置檔案簡短名稱(例如 DefaultProfile
    HOSTNAME 託管 WebSphere Application Server 例項的虛擬機器的名稱
    WAS_USERNAME 使用者名稱
    WAS_PASSWORD 密碼

    除 Web 控制檯之外,WebSphere CloudBurst 提供一個命令列工具和一些 HTTP REST 介面來上傳指令碼包並操作該裝置內已存在的指令碼包。

    這裡有兩個由命令列工具定義的與指令碼包相關的物件:

    • 表示當前駐留在裝置上的指令碼包的容器的指令碼物件,提供建立、刪除、迭代、列示和搜尋這些指令碼包的屬性和方法。
    • 表示上傳到 WebSphere CloudBurst 的單個指令碼包的指令碼物件,提供配置特定指令碼包的屬性和方法。

    圖 8 展示如何使用命令列工具建立 My Demo Script. Package 指令碼包(已使用 Web 控制檯在前面的插圖中定義)。


    圖 8. 建立 My Demo Script. Package 的命令列
    圖 8. 建立 My Demo .. Package 的命令列

    圖 9 展示列示、查詢和更新此裝置中包含的指令碼包的屬性的典型命令。


    圖 9. 列示、查詢和更新指令碼包的屬性
    圖 9. 列示、查詢和更新指令碼包的屬性

    您還可以利用命令列介面來更改指令碼包的訪問控制配置,甚至使用指令碼包的 ID 從此裝置刪除一個指令碼包,如圖 10 所示。


    圖 10. 更改 ACL 和刪除指令碼包
    圖 10. 更改 ACL 和刪除指令碼包

    模式建立的細節超出了本文的範圍,但是讓我們看看與指令碼包相關的幾個問題。

    當您使用一個帶有使用者定義變數的指令碼包建立您的模式時,將有機會為沒有關聯值的鍵定義值,或者修改那些已經定義值的變數的值(見圖 11)。

    如前所述,模式由虛擬映像部件組成,每個虛擬映像部件在部署時將在自己的虛擬機器中執行。指令碼包應該關聯到執行該指令碼包的虛擬機器。通過使用者介面建立模式時,您應該將指令碼包拖放到虛擬映像部件之上。


    圖 11. 為使用者定義變數指定值
    圖 11. 為使用者定義變數指定值

    也可以使用命令列工具關聯指令碼包和虛擬映像部件,您可以通過訪問模式物件而不是使用指令碼物件完成這個任務。圖 12 展示了關聯到一個模式的指令碼包。


    圖 12. 使用命令列介面關聯指令碼包和虛擬映像部件
    圖 12. 使用命令列介面關聯指令碼包和虛擬映像部件

    在部署過程中,WebSphere CloudBurst 首先為每個虛擬映像部件建立並配置一個虛擬機器。一旦這個拓撲配置完成並執行,WebSphere CloudBurst 將作為根上下文 SSH 到指令碼包對應的虛擬機器,並將歸檔檔案解壓縮到該指令碼包的 Working directory 欄位定義的位置。接下來,它將執行 Executable 欄位定義的命令,傳遞 Arguments 欄位定義的引數。圖 13 展示了這個簡單的流程。


    圖 13. 指令碼包執行流
    圖 13. 指令碼包執行流

    如果您在指令碼包的 Logging directory 中定義了日誌位置,WebSphere CloudBurst 將在該指令碼包執行後開始收集日誌,您可以通過虛擬系統檢視檢視這些日誌。圖 14 突出顯示了指令碼包日誌的位置。每個已執行的指令碼包都有獨立的日誌。


    圖 14. 指令碼包日誌
    圖 14. 指令碼包日誌

    其他問題

    • 使用 cbscript.json 的主指令碼包

      有時您可能需要改善一個指令碼包的配置。指令碼包格式允許您將一個名為 cbscript.json 的檔案新增到歸檔檔案的根目錄。這個配置檔案包含您的指令碼包定義。通過將 cbscript.json 直接新增到您的歸檔檔案中,您無需在建立指令碼包時輸入這個資訊,這不僅有助於避免管理控制檯上的排版錯誤,還有助於在多個裝置間共享指令碼包。

      圖 15 展示上述示例指令碼包的 cbscript.json。



      圖 15. 示例 cbscript.json 檔案
      圖 15. 示例 cb..json 檔案

    • 指令碼包環境

      執行指令碼包內定義的指令碼時,WebSphere CloudBurst 擁有對多個環境變數的訪問權,表 1 展示了部分這樣的變數。這些預定義變數可以通過在要訪問的變數的虛擬機器上查詢 /etc/virtualimage.properties 檔案來訪問。找到該檔案後,您就可以利用 WebSphere CloudBurst 定義的所有變數。要取查詢屬性檔案,您需要輸入 ./etc/virtualimage.properties。圖 16 展示了一個查詢屬性檔案的示例,後面用幾個 echo 語句展示預定義變數現已可用。



      圖 16. 查詢 /etc/virtualimage.properties 的示例
      圖 16. 查詢 /etc/virtualimage.properties 的示例

      結束語

      指令碼包允許您進一步增強和定製您的 WebSphere Application Server 環境。可以定製的設定小到單個 WebSphere Application Server 屬性,大到一個全新產品的安裝和配置。如您所見,指令碼包概念的設計具有通用性和靈活性,這大大增加了指令碼包的用途。因模式所提供的功能不能滿足需求而需要進行額外的定製和增強時,這種靈活性使指令碼包可以發揮相應作用。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/14789789/viewspace-628278/,如需轉載,請註明出處,否則將追究法律責任。

相關文章