本頁說明您在封裝 Kubernetes 應用程式時須滿足的需求,以及這些需求的相關規範。
應用程式套件是由容器映像檔和設定檔集合而成,系統會將這些檔案部署至使用者的 Kubernetes 叢集。如要支援透過 Google Cloud 主控台將應用程式部署至 Google Kubernetes Engine,應用程式套件必須含有「部署容器」。部署容器會向 Kubernetes API 推送設定檔及顯示中繼資料。
應用程式套件可讓 Google Cloud 使用者執行下列操作:
- 在 Cloud Marketplace 目錄中發掘您的應用程式
- 使用 Google Cloud 控制台將應用程式部署至 GKE 或 GKE Enterprise 叢集
- 透過 Google Cloud 控制台與正在執行的應用程式互動
除了支援透過 Google Cloud 控制台部署外,您的套件也必須逐步引導使用者操作 kubectl 或 Helm 等工具,透過指令列介面 (CLI) 部署應用程式。
如需應用程式套件範例,請參閱 Google 點擊部署解決方案的 GitHub 存放區。其中含有 WordPress 和 Elasticsearch 等熱門的開放原始碼應用程式套件。
事前準備
- 確認您已設定 Google Cloud 環境。
- 針對設定檔、使用手冊和執行應用程式所需的其他資源建立公開 Git 存放區。您可以將存放區託管於 GitHub、Cloud Source Repositories 等供應商或自己的伺服器。建議您為即將發佈的各項產品分別建立專屬存放區。
總覽
應用程式必須符合下列規定:
Git 存放區必須含有 LICENSE 檔案,其中包含存放區的開放原始碼授權。
Git 存放區必須含有用於部署應用程式的設定檔。這個檔案可以是 Kubernetes YAML 資訊清單或 Helm chart。
設定作業必須涵蓋用於說明應用程式的應用程式自訂資源。
詳情請參閱設定的需求一節。
應用程式必須在採用 x86 處理器的節點上執行。
如要讓應用程式與 Istio 相容,請視需要查看執行 Istio 的叢集限制。
如果您的應用程式是商業應用程式 (非 BYOL),則必須將用量回報給 Google,以便準確向客戶收費。建議您將應用程式與根據用量計費的代理程式整合,這類程式會傳送用量報表給 Google。
詳情請參閱計費代理程式的整合需求一節。
您必須將應用程式的所有容器映像檔上傳至 Artifact Registry 或 Container Registry 中的登錄檔。您的登錄檔也必須包括「部署者」映像檔;當使用者透過 Google Cloud 主控台部署應用程式時,該映像檔會將應用程式設定推送至 Kubernetes API。
詳情請參閱「應用程式映像檔的建構需求」一節。
您必須對應用程式執行整合測試。
請參閱「驗證程序規定」。
您必須添加使用手冊,針對應用程式逐步說明如何透過指令列部署,以及設定和使用方式。
詳情請參閱使用手冊的需求一節。
設定的需求
您可以透過 Kubernetes 資訊清單或 Helm chart 形式提供自己需要的設定。
您的設定必須滿足下列需求:
僅採用測試版或正式發佈版的 Kubernetes 資源,保護使用者免於不穩定 API 的威脅。
您的設定必須部署應用程式自訂資源。應用程式資源含有使用者在透過 Cloud Marketplace UI 部署應用程式時看到的資訊。
應用程式資源屬於自訂資源,可匯總與應用程式相關聯的 Kubernetes 元件,並讓使用者以群組為單位管理這些資源。
如要瞭解如何建立應用程式資源並查看相關範例,請參閱應用程式 GitHub 存放區。
您的設定必須透過
envsubst
使用可取代的參數,或將這類參數做為標記使用。下列參數必須可供取代:
命名空間:您設定中的所有資源都必須同屬於單一命名空間。Cloud Marketplace 使用者會在部署應用程式時設定這個命名空間。請避免在資訊清單中以硬式編碼方式設定命名空間,這樣系統就會在使用者選取的命名空間中建立您指定的資源。資源定義中有時也會出現命名空間 (例如參照
RoleBinding
中的ServiceAccount
時),這類參照皆須經過參數化處理。應用程式名稱:應用程式資源的執行個體名稱。應用程式的每個資源名稱都必須包含這個字串,以免在單一命名空間中部署多個應用程式執行個體時發生名稱衝突。
容器映像檔:每個映像檔參照 (例如
PodSpec
中的參照) 都必須可供取代,這樣 Cloud Marketplace 才能覆寫這些參照,指向發布於 Artifact Registry 中的映像檔。也能讓客戶取代經過修改的映像檔。授權密鑰:如果您的應用程式是基於商業用途執行計量,則必須接受將 Secret 資源視為參數。Secret 含有用量報表憑證,可讓應用程式向 Google 傳送用量資料。
如要進一步瞭解設定參數,請前往 GitHub。
您的應用程式必須能夠透過用戶端工具部署。舉例來說,如果您是使用 Helm,部署作業就必須搭配
--client-only
指令列標記執行。
Istio 叢集的限制
如要讓應用程式與 Istio 相容,請參閱本節所述的限制。如需 Istio 總覽,請參閱「什麼是 Istio?」。
如果客戶在叢集中執行 Istio,系統預設會透過 Istio 控制應用程式 Pod 之間的網路流量。在下列情況中,這可能會封鎖網路通訊:
如果 Pod 執行使用叢集 IP 位址的
kubectl
指令,指令可能會失敗。如果應用程式使用 Pod 對 Pod 或以 IP 為基礎的通訊,叢集形成步驟可能會失敗。
連至第三方服務 (例如作業系統套件存放區) 的外部連線可能會遭到封鎖。客戶必須設定 Istio 輸出流量,才能存取外部服務。
建議使用 Istio Gateway 設定連入連線,而非 LoadBalancer 或 Ingress 資源。
如果您是透過 Helm 進行設定,請在部署映像檔的結構定義中使用 x-google-marketplace ISTIO_ENABLED
屬性。如果這個屬性為 true
,部署人員必須修改部署作業,例如等待 Istio 補充資訊容器準備就緒。
為協助顧客設定應用程式 Pod 之間的通訊,建議您在說明文件的部署後章節中新增步驟。
計費代理程式的整合需求
如果您是販售商業應用程式,建議您將應用程式與根據用量計費 (UBB) 的代理程式整合。
代理程式會處理驗證作業,以及傳送給 Service Control 這個 Google 用量回報端點的報表。 提交定價模式後,Cloud Marketplace 團隊會為您的應用程式建立服務,以便產生相關報表,並提供用來評估用量的帳單指標。
代理程式也會管理本機匯總、當機救援,以及重新嘗試執行的作業。對於按小時計算用量的指標而言,代理程式可設為自動回報活動訊號。
代理程式也會公開報表狀態,讓應用程式偵測代理程式是否成功回報用量資料。
客戶會透過 Cloud Marketplace 購買應用程式,藉此取得在部署時隨附於應用程式的授權。
整合計費代理程式時,請考慮應用程式在用量報告失敗時的行為,這可能表示下列其中一種情況:
顧客已取消訂閱。
顧客可能不小心停用了回報管道。舉例來說,客戶可能會在無意間移除代理程式或將其設定錯誤,網路也可能禁止代理程式存取 Google 回報端點。
請按照最佳做法回報用量,並處理 Google 未收到用量資料,因此未向客戶收費的情況。
整合計費代理程式
您可以將代理程式整合為「補充」容器,在與應用程式相同的 Pod 中執行;也能透過 SDK 執行代理程式。
藉由補充做法,代理程式會在與應用程式容器相同的 Kubernetes Pod 中執行自己的容器。您的應用程式會與代理程式的本機 REST 介面通訊。
如果您採用 SDK 做法,則必須將代理程式編譯或連結至應用程式二進位檔。SDK 在實作方面對 Go 語言是屬於原生性質,對於 Python 語言則採繫結形式。
一般來說,補充做法較易於整合,而 SDK 做法較能有效防止誤遭停用。
如需詳細的整合步驟,請在根據用量計費的代理程式 GitHub 存放區中參閱 README。如要查看實作範例,請參閱範例應用程式和工具存放區。
用於回報用量的憑證
計費代理程式需要憑證才能向 Google 傳送用量報表。使用者從 Cloud Marketplace 部署應用程式時,Cloud Marketplace 會產生這些憑證,並確保憑證能以 Secret
形式存在於目標 Kubernetes 命名空間中,然後再部署應用程式。系統會將這個 Secret 的名稱傳送給應用程式做為 REPORTING_SECRET
結構定義屬性。
如需使用報表 Secret 的資訊清單範例,請參閱 GitHub 中的 WordPress 應用程式範例。
Secret 含有下列欄位:
|
這個 ID 代表客戶同意購買及使用軟體。 |
|
系統會將這個與授權相關聯的 ID 連同用量報表一起傳送給 Google Service Control。 |
|
用於向 Google Service Control 進行驗證的 Google Cloud 服務帳戶 JSON 金鑰。 |
如果您的產品除了應用程式外也提供軟體即服務 (SaaS) 元件,您可以使用 Cloud Marketplace 採購服務,選擇讓該元件定期檢查授權 ID 是否有效。如要取得採購服務的存取權,請與合作夥伴工程師聯絡。
如要瞭解系統傳送至應用程式的其他參數,請參閱本節下文中的「傳送至應用程式的參數」。
容器映像檔的建構需求
您的應用程式是由一或多個應用程式容器映像檔組成。此外,您的存放區也必須含有使用者透過 Cloud Marketplace UI 部署應用程式時會用到的「部署容器」。
您通常可以利用 Dockerfile 和 docker
build
指令列工具建構容器映像檔。建議您將 Dockerfile 和容器建構說明發布在應用程式的公開存放區,發布這些映像檔後,客戶就能修改或重新建構映像檔,這對於驗證企業實作環境的映像檔來說有時是必要的操作。
如果您的應用程式映像檔是根據 Debian 這類基本映像檔,或者 Python 或 OpenJDK 等語言執行階段映像檔所建構,強烈建議您選用 Cloud Marketplace 的其中一項經過認證的容器映像檔。如此一來,您即可確保基本映像檔獲得定期更新,尤其是安全性修補程式。
建構應用程式映像檔後,請將映像檔推送至您在設定環境時建立於 Artifact Registry 或 Container Registry 中的暫存登錄檔。
您的 Artifact Registry 或 Container Registry 存放區必須具備以下結構:
應用程式的主要映像檔必須位於存放區的根目錄。舉例來說,如果 Artifact Registry 或 Container Registry 存放區為
gcr.io/exampleproject/exampleapp
,則應用程式的映像檔應位在gcr.io/exampleproject/exampleapp
中。部署容器的映像檔必須位於名為
deployer
的資料夾中。在上述範例中,部署容器必須位於gcr.io/exampleproject/exampleapp/deployer
。如果應用程式會使用額外的容器映像檔,每個額外映像檔都必須位於主要映像檔下的專屬資料夾中。舉例來說,如果應用程式需要
proxy
圖片,請將圖片新增至gcr.io/exampleproject/exampleapp/proxy
。應用程式的所有映像檔都必須標示發布管道和目前版本。舉例來說,如果您要在
2.0
發布管道中發布2.0.5
版本,所有圖片都必須標記為2.0
和2.0.5
。瞭解如何整理發行內容。所有應用程式圖片的圖片資訊清單都必須包含下列註解:
com.googleapis.cloudmarketplace.product.service.name=services/SERVICE_NAME
將 SERVICE_NAME 改為您的服務名稱。如要找出服務名稱,請參閱 Producer Portal「總覽」頁面上的產品表格。如要進一步瞭解註解,請參閱 GitHub 上 Open Container Initiative 的註解說明文件。
舉例來說,下圖顯示 Grafana Cluster Kubernetes 應用程式的 Artifact Registry 和 Container Registry 存放區。發布管道為 5.3
,應用程式包含主要應用程式映像檔、部署者映像檔 (位在其專屬資料夾中),以及 debian9
中的 Debian 9 映像檔。存放區中的所有映像檔都已加上相同的測試群組標記 5.3
,以及該測試群組中的版本 5.3.4
。這也必須與部署工具中宣告的「應用程式」資源自訂資源定義 (CRD) 的「版本」欄位相符。
存放區位於 gcr.io/cloud-marketplace/google/grafana
。
請使用您先前選擇產品 ID 時選取的容器映像檔 ID。
如要將映像檔上傳至 Artifact Registry 或 Container Registry,請先加上登錄檔名稱的標記,然後利用 gcloud
進行推送。舉例來說,您可以利用以下指令推送 example-pro
的映像檔:
docker build -t gcr.io/my-project/example-pro:4.0 # release track 4.0
docker tag gcr.io/my-project/example-pro:4.0 gcr.io/my-project/example-pro:4.0.3 # release version 4.0.3
docker push gcr.io/my-project/example-pro:4.0
docker push gcr.io/my-project/example-pro:4.0.3
如需瞭解如何將映像檔加上標記並推送至登錄檔的詳細步驟,請參閱 Artifact Registry 或 Container Registry 說明文件。
部署容器的需求
客戶透過 Cloud Marketplace 部署您的產品時,會使用部署容器,而這個容器又稱「部署者」。部署者映像檔會將多個項目封裝成套件,包括應用程式的 Kubernetes 設定,以及用於將設定推送至 Kubernetes API 的 kubectl
或 Helm 等用戶端工具。一般而言,部署者使用的指令列指令組合應與使用者在部署應用程式時執行的內容相同。
如要建立部署者,請在工具存放區的市集目錄選用部署容器的其中一個基本映像檔:
- 如果您是透過
kubectl
進行設定,請使用 kubectl 基本映像檔。 - 如果您是透過 Helm chart 進行設定,請使用 Helm 基本映像檔。
基本映像檔內建一些公用程式,可用於指派擁有者參照、產生密碼,以及在部署完成後進行清理等工作。
如需建構部署者映像檔的步驟,請參閱建構應用程式部署者。
傳送至應用程式的參數
您的部署容器必須宣告要在客戶選取應用程式時向他們收集的參數,接著系統會在使用者部署應用程式時將這些參數提供給部署容器。
如要設定這些參數,您的部署容器必須在下列路徑含有 YAML 格式的 JSON 結構定義:/data/schema.yaml
。
如要瞭解如何建立 schema.yaml
,請參閱部署人員結構定義。
GPU 叢集要求
如果應用程式有特定的 GPU 需求,或是需要大量 GPU 資源,可以使用部署工具架構,在叢集中指定 GPU 類型和數量。如果您指定 GPU 需求,系統會停用輔助叢集建立功能。
應用程式可能會要求使用一般 Nvidia GPU,或特定 Nvidia 平台。
驗證程序規定
應用程式會在驗證系統中執行,確保:
- 安裝成功:所有資源都已套用,並等待進入良好的健康狀態。
- 功能測試通過:部署者會啟動測試者 Pod,並監控其結束狀態。零表示成功,非零表示失敗。
- 解除安裝成功:應用程式和所有資源已從叢集中移除。
應用程式必須通過測試,才能發布至 Google Cloud Marketplace。
如要瞭解如何封裝、執行及驗證這些功能測試,請參閱「驗證整合」說明文件。
使用手冊的需求
您的使用手冊必須包括下列資訊:
總覽
- 一般應用程式總覽,涵蓋基本功能和設定選項。這個區段也必須連結至您在 Cloud Marketplace 發布的產品。
一次設定
- 設定
kubectl
或 Helm 等用戶端工具 (如果有的話)。 - 安裝應用程式 CustomResourceDefinition (CRD),以便讓您的叢集管理應用程式資源。
- 如果您是販售商業應用程式,則需逐步說明如何透過 Cloud Marketplace 取得及部署授權 Secret。
安裝
- 用於部署應用程式的指令。
- 傳送 UI 設定中可用的參數。
- 將映像檔參照固定至不可變更的摘要。
如果您在部署工具架構中新增自訂輸入欄位,請視需要新增預期值相關資訊。
基本用法
- 連線至管理控制台 (如果適用)。
- 連線至用戶端工具並執行範例指令 (如果有的話)。
- 修改使用者名稱和密碼。
啟用輸入功能並安裝傳輸層安全標準 (TLS) 憑證 (如果有的話)。
備份與還原
- 備份應用程式狀態。
- 從備份還原應用程式狀態。
更新圖片
- 針對小幅更新或修補程式更新應用程式映像檔。
擴大運用
- 調度應用程式資源 (如果適用)。
刪除
- 刪除應用程式。
- 清理任何可能刻意被設為無主的資源,例如 PersistentVolumeClaims。