概觀
應用
代表一個應用模型,用於定義應用的組成元件以及宣告所需的部署以及維運需求。「應用」以檔案形式存在的話,通常以 YAML 或 JSON 格式表示。「應用」是一組「元件」的集合體(collection),只是作為相關元件的交付單位但元件才是可部署單位(deployable unit)。也就是說:元件可以獨立部署到指定的叢集,因此,同一個應用的元件可以部署到不同的叢集。。
此平台讓 DevOps 工程師與平台工程師共同合作來完成應用的自動化部署與維運需求。而為了確保應用的可移植性,DevOps 工程師需要一個通用與抽象的方式來描述如何部署與管理應用元件。基於此目的,平台工程師定義一組抽象可擴展的應用元件描述語言,足以讓 DevOps 工程師描述應用部署的意圖,卻又讓平台工程師不過度暴露基礎設施細節。
元件元素
元件根據特性主要分為「工作負載(workload)」、「支援服務(backing service)」以及「組態設定(Configuration)」。
工作負載元件需要提供應用商務邏輯的程式碼以實現一個微服務、背景工作等功能。 支援服務元件代表其它元件所依賴的外部服務或者存儲,例如:資料庫、Object storage、訊息佇列等等。「支援服務」可以由雲供應商或者由其它應用提供。 組態設定元件提供可共用的設定資訊給其它元件使用。
支援服務元件通常有一個以上的實現,而同一種實現可以支援不同的規格或容量。例如:一個 PostgreSQL 資料庫服務,可以提供不同的服務方案(plan)。同一種元件實現的不同規格以ComponentClass 來表示。在某些情況下,可以支援元件實現過程中有限度的客製化參數(parameters)。
元件之間存在相依性,被依賴的元件需要先完成交付後,依賴的元件才能進行部署。
元件的型別可以擴展,每個元件的型別定義由一個 ComponentDefinition 物件描述。
特徵元素
「特徵」元素提供如何實現元件的宣告,會影響元件合成過程中產生的結果。
每個「特徵」都有一個型別(type)區分其綱要(schema)及語意,根據型別不同,每個「特徵」元素有不同的屬性(properties)。「特徵」的型別可以擴展,每個特徵的型別由一個 TraitDefinition 物件描述。
以下是「特徵」的一些規則:
- 「特徵」元素在「元件」宣告中的順序決定「特徵」處理的順序。
- 同型別的「特徵」在單一元件宣告中只能有一個。
- 特徵可以限定可作用的元件型別。
- 特徵之間可能存在衝突,也就是說某些特徵不能同時作用在同一個元件。
- 特徵之間存在相依性,被依賴的特徵需要同時存在於元件宣告中。
- 元件宣告中特徵列表第一個 (index 0)是該元件的主要或基礎特徵:
- 如果是支援服務元件:其型別是 Service。
- 如果是工作負載元件:其型別是 Container(目前是,但未來會支援其它工作負載)。
- 如果是組態設定元件:其型別是 Properties。
發布
「發布」代表一個應用交付工作,當在「環境」中建立或修改「應用」物件時就會產生一個「發布」。「發布」紀錄當下應用的元件組態以及發布中的狀態,由於每次「應用」變動都會產生一個新的「發布」物件,所以「發布」物件中的元件組態一旦建立就不會改變。
當一個新的「發布」產生時需要跟前一版本的「發布」比對來決定:
- 哪些新元件實例(Component 物件)需要建立。
- 哪些元件實例需要被調整。
- 哪些元件實例需要被移除。
被建立的元件會以 「元件」物件表示被發布的元件實例。因為,元件實例可以被多個「發布」物件參考,所以元件實例的名稱的產生規則需要是確定性的(deterministic),目前採用 “{應用名稱}_{元件名稱}” 格式。
環境
代表應用部署的目的地,又稱為部署環境。每個應用部署時都需要指定(有時是隱含方式)一個環境。「環境」表示一個軟體系統(Software system)的邏輯邊界(boundary),而軟體系統可以由多個應用所組成。另一方面,一個應用及其元件只能部署在同一環境。
標的
「標的」,或稱為部署標的,代表應用元件的部署目的地。在此平台只有「叢集」可以作為部署標的。「標的」物件定義一個環境中應用元件與叢集的綁定規則與關係,所以,「標的」跟叢集是不同的概念。
- 「標的」的作用範圍受到所屬環境限制,不同環境的「標的」可以有相同的名稱。當所屬環境刪除時,「標的」物件也會被刪除。
- 「標的」的規格定義環境中不同的部署標的與叢集的綁定規則,剛建立時, 「標的」的狀態尚未綁定叢集。
- 當「標的」物件被實際配置並被指派一個叢集後,進入綁定狀態。
- 當叢集被綁定時,該叢集物件不能被刪除。
- 當「標的」所綁定的叢集改變時,部署在之前綁定叢集的元件必須重新部署到新綁定的叢集(假如有的話)。
- 「標的」物件通常由 Application Operator 負責建立以滿足元件指定的部署需求。
叢集
「叢集」代表可以透過 API 來存取的網路服務。可作為「元件」部署標的的叢集稱為「目標叢集(Target Cluster)」,而「管理叢集(Management Cluster)」是由平台提供給租戶的「應用交付引擎」服務。
「叢集」可以由不同的「雲集」提供,也可以説:「雲集」包含多種的叢集服務。當叢集要由此平台動態整備時,需要指定要使用的「雲集」。「叢集」物件也可以由管理人員手動建立來代表已經存在的叢集服務。