共用方式為


工作負載組態管理

本文提供 Azure 作員服務管理員 (AOSM) 指導方針,以優化組態群組架構 (CGS) 的設計,以及組態群組值 (CGV) 的作業。 網路功能(NF)廠商、電信業者及其合作夥伴在上線和部署NF時,應牢記這些做法。

什麼是 JSON 架構?

JSON 架構是因特網工程工作組 (IETF) 標準,提供指定應用程式所需的 JSON 數據格式,以及如何與其互動。 針對 JSON 檔套用這類標準可讓您跨 JSON 數據強制執行一致性和數據有效性

JSON 架構用於哪些地方?

  • AOSM 使用 JSON 架構表示法作為 CGS ConfigurationGroupSchemaPropertiesFormat 物件 schemaDefinition 屬性內的中繼架構。
  • AOSM 可讓設計師和發行者指定 JSON 架構,其中運算符在具現化 SNS/NF 時必須提供數據(JSON 值)。
  • AOSM 允許中繼結構描述屬性是選用或必要的。 如果屬性標示為必要,則必須在 Json 值中指定它。

支援哪些 JSON 關鍵詞?

針對 CGS 中繼架構,AOSM 會依類型實作 JSON 標準關鍵詞的支援。

  • 針對物件類型,支援的關鍵詞受限於篩選原則。 請參閱 JSON 架構 - 物件
  • 針對字串類型,關鍵詞支援不受限制或篩選。 請參閱 JSON 架構 - 字串
  • 針對數值類型,關鍵詞支援不受限制或篩選。 請參閱 JSON 架構 - 數值

選擇性和必要欄位

屬性可以通過包含 required 關鍵字來聲明為選擇性,這樣可以省略該選擇性屬性。 required如果未指定 關鍵詞,則會將所有屬性視為必要。 至少需要一個必要的屬性類型,才能支持選擇性的屬性類型。

{
"type": "object",
"properties": {
  "abc": {
    "type": "integer",
     "default": 30
  },
  "xyz": {
    "type": "string",
    "default": "abc123"
  }
 }
"required":  ["abc"]
} 

JSON 架構中的預設值

針對選擇性屬性,AOSM 會實作預設值處理的自定義方法。 當在 CGS 中繼資料架構中定義預設值時,AOSM 會在輸入的 CGV 數據中屬性遺漏或未定義時使用該值。 當運算子未提供任何值時,AOSM 驗證程式邏輯基本上會使用預設值來凍結 CGV 值。

如何定義預設值

預設值必須指定在屬性或陣列項目內。 以下範例示範了具有整數與 trying 屬性類型的預設值。

{
"type": "object",
"properties": {
  "abc": {
    "type": "integer",
     "default": 30
  },
  "xyz": {
    "type": "string",
    "default": "abc123"
  }
 }
} 

定義預設值的規則

驗證預設值時會套用下列規則。 使用預設值以確保預期的結果時,請考慮這些規則:

  • 預設值不應該套用至必要的屬性。
  • 預設值會從首次出現關鍵字的位置開始,以由上至下的順序進行評估。
  • 當輸入 CGV 中存在屬性值時,則只有這些屬性的子項會針對預設值進行評估。
  • 如果輸入 CGV 中不存在屬性值,則會將其與任何子項目一起針對預設值進行評估。
  • 如果屬性值是類型物件,而且它或索引鍵都不存在於輸入 CGV 中,則不會評估對象的預設值。

CGS 考量

隨著時間的推移,最佳設計配置群組架構的建議方法有所改變。 雖然原始的 1-CGS 方法仍受到支援,但對於所有新的專案,我們現在建議使用 3-CGS 方法。 您可以要求從 1-CGS 轉換為 3-CGS 的進一步詳細數據。

1-CGS 方法

原本建議只針對整個 NF 使用單一 CGS。 這將站點特定、實例特定和安全性特定的參數整合成單一組組態群組物件。 除了一些罕見的情況外,例如服務由多個元件組成時,避免使用多組物件集。 許多合作夥伴已成功使用這種方法上線服務,並且該方法仍然受到支援。

3-CGS 方法

最近,建議針對整個NF使用至少三個CGS,將參數組織成站點特定、實例特定及安全性特定的配置組集。 網站特定參數的範例包括ip位址或唯一名稱。 實例特定參數的範例是逾時或偵錯層級。 安全性特定參數的範例為密碼或憑證。 使用安全性特定參數時,Azure Keyvault 會用來儲存安全值。

設計 3-CGS 物件集

設計 3-CGS 物件時,請考慮下列架構指導方針。

  • 選擇要公開的參數。
    • 經驗法則是使用直接作業來公開這些參數集,例如計算 SKU 或 helm 值。
    • 與由其他代理程式 (例如 cloudinit 使用者資料) 所處理的參數不同。
  • 將參數分類為站點特定、實例特定和安全性特定集合。
  • 定義必要參數與選擇性參數。
    • 針對選擇性參數,請定義合理的預設值。
  • 確定 CGS 對象之間沒有重疊的參數。

下列示例展示 CGS 和對應的 CGV 負載。

CGS 承載:

{ 
  "type": "object", 
  "properties": {
    "abc": { 
      "type": "integer", 
      "default": 30
    }, 
    "xyz": { 
      "type": "integer", 
      "default": 40
    },
    "qwe": {
      "type": "integer"
    }
   }
   "required": "qwe"
}

運算子傳遞的對應 CGV 承載:

{
"qwe": 20
}

Azure 運算子服務管理員所產生的 CGV 承載:

{
"abc": 30,
"xyz": 40,
"qwe": 20
}

設定群組值考量

在提交 CGV 資源建立前,您可以驗證基礎 YAML 或 JSON 檔案的結構描述和值是否符合對應的 CGS 所預期的結構描述和值。 若要達成此目的,其中一個選項是使用適用於 Visual Studio Code 的 YAML 延伸模組。