Share via


使用 Helm 與 Kubernetes 部署整合

在 Kubernetes 中裝載的應用程式可以使用應用程式組態提供者程式庫來存取應用程式組態中的資料。 應用程式組態提供者具有內建的快取和重新整理功能,讓應用程式可以在不重新部署的情況下擁有動態設定。 如果您不想更新應用程式,本教學課程顯示如何透過部署,將資料從應用程式組態帶入 Kubernetes。 如此一來,您的應用程式就可以繼續從 Kubernetes 變數和祕密存取設定。 當您想要讓應用程式挑選新的設定變更時,您可以執行 Helm 升級。

提示

請參閱 Kubernetes 中裝載的工作負載選項,以存取 Azure 應用程式組態。

Helm 提供一種方式來定義、安裝及升級在 Kubernetes 中執行的應用程式。 Helm 圖表包含建立 Kubernetes 應用程式執行個體所需的資訊。 組態會儲存在圖表本身的外部,在名為 values.yaml 的檔案中。

在發行流程期間,Helm 會將圖表與適當的組態合併,以執行應用程式。 例如,values.yaml 中定義的變數,可以在執行中的容器內,以環境變數的形式來參考。 Helm 也支援建立 Kubernetes 秘密,其可裝載為資料磁碟區或公開為環境變數。

您可以在執行 Helm 時,在命令列上提供其他 YAML 型的設定檔,以覆寫儲存在 values.yaml 中的值。 Azure 應用程式組態支援將組態值匯出至 YAML 檔案。 將此匯出功能整合到您的部署,可讓 Kubernetes 應用程式利用儲存在應用程式組態中的設定值。

在本教學課程中,您會了解如何:

  • 將應用程式部署至使用 Helm 的 Kubernetes 時,請使用應用程式組態中的值。
  • 根據應用程式組態中的 Key Vault 參考,建立 Kubernetes 秘密。

本教學課程假設您已具備使用 Helm 管理 Kubernetes 的基本知識。 在 Azure Kubernetes Service 中使用 Helm 安裝應用程式。

必要條件

新增金鑰值

將下列金鑰值新增至應用程式組態存放區,並保留標籤內容類型的預設值。 如需如何使用 Azure 入口網站或 CLI 將金鑰值新增至存放區的詳細資訊,請移至建立金鑰值

機碼
settings.color 白色
settings.message Azure 應用程式組態的值

將 Key Vault 參考新增至應用程式組態

  1. 登入 Azure 入口網站 並將秘密新增至 Key Vault,包括名稱 Password 和值 myPassword

  2. 選取您上一節中建立的應用程式組態存放區執行個體。

  3. 選取 [組態總管]

  4. 選取 [+ 建立]>[金鑰保存庫參考],然後指定下列值:

    • 金鑰:選取 secrets.password
    • 標籤:將此值保留空白。
    • 訂用帳戶資源群組金鑰保存庫:輸入與您在上一個步驟中建立的金鑰保存庫對應的值。
    • 祕密:選取您在上一節中所建立,名為 Password 的祕密。

建立 Helm 圖表

首先,使用下列命令建立樣本 Helm 圖表:

helm create mychart

Helm 會使用如下所示的結構,建立名為 mychart 的新目錄。

提示

若要深入了解,請遵循本圖表指南

mychart
|-- Chart.yaml
|-- charts
|-- templates
|   |-- NOTES.txt
|   |-- _helpers.tpl
|   |-- deployment.yaml
|   |-- ingress.yaml
|   `-- service.yaml
`-- values.yaml

接下來,更新 deployment.yaml 檔案的 spec:template:spec:containers 區段。 下列程式碼片段會將兩個環境變數新增至容器。 您會在部署時動態設定其值。

env:
- name: Color
    value: {{ .Values.settings.color }}
- name: Message
    value: {{ .Values.settings.message }}

更新後,完整的 deployment.yaml 檔案應該如下所示。

apiVersion: apps/v1beta2
kind: Deployment
metadata:
  name: {{ include "mychart.fullname" . }}
  labels:
    app.kubernetes.io/name: {{ include "mychart.name" . }}
    helm.sh/chart: {{ include "mychart.chart" . }}
    app.kubernetes.io/instance: {{ .Release.Name }}
    app.kubernetes.io/managed-by: {{ .Release.Service }}
spec:
  replicas: {{ .Values.replicaCount }}
  selector:
    matchLabels:
      app.kubernetes.io/name: {{ include "mychart.name" . }}
      app.kubernetes.io/instance: {{ .Release.Name }}
  template:
    metadata:
      labels:
        app.kubernetes.io/name: {{ include "mychart.name" . }}
        app.kubernetes.io/instance: {{ .Release.Name }}
    spec:
      containers:
        - name: {{ .Chart.Name }}
          image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
          imagePullPolicy: {{ .Values.image.pullPolicy }}
          env:
            - name: Color
              value: {{ .Values.settings.color }}
            - name: Message
              value: {{ .Values.settings.message }}
          ports:
            - name: http
              containerPort: 80
              protocol: TCP
          livenessProbe:
            httpGet:
              path: /
              port: http
          readinessProbe:
            httpGet:
              path: /
              port: http
          resources:
{{ toYaml .Values.resources | indent 12 }}
    {{- with .Values.nodeSelector }}
      nodeSelector:
{{ toYaml . | indent 8 }}
    {{- end }}
    {{- with .Values.affinity }}
      affinity:
{{ toYaml . | indent 8 }}
    {{- end }}
    {{- with .Values.tolerations }}
      tolerations:
{{ toYaml . | indent 8 }}
    {{- end }}

若要將機密資料儲存為 Kubernetes 秘密,請在範本資料夾下新增 secrets.yaml 檔案。

提示

深入了解如何使用 Kubernetes 祕密

apiVersion: v1
kind: Secret
metadata:
  name: mysecret
type: Opaque
data:
  password: {{ .Values.secrets.password | b64enc }}

最後,請使用下列內容來更新 values.yaml 檔案,以選擇性地提供組態設定的預設值,以及 deployment.yaml 和 secrets.yaml 檔案中所參考的祕密。 從應用程式組態提取的組態將會覆寫其實際值。

# settings will be overwritten by App Configuration
settings:
  color: red
  message: myMessage

在 Helm 安裝中從應用程式組態傳遞組態

首先,將組態從應用程式組態下載至 myConfig.yaml 檔案。 使用金鑰篩選器,只下載開頭為設定的金鑰。 如果您摸金鑰篩選不足以排除 Key Vault 參考的金鑰,可以使用引數 --skip-keyvault 將其排除。

提示

深入了解 export 命令

az appconfig kv export -n myAppConfiguration -d file --path myConfig.yaml --key "settings.*"  --separator "." --format yaml

接下來,將秘密下載到名為 mySecrets.yaml 的檔案。 命令列引數 --resolve-keyvault 會藉由擷取 Key Vault 中的實際值來解析 Key Vault 參考。 您必須使用具有對應 Key Vault 之存取權限的認證來執行此命令。

警告

當此檔案包含機密資訊時,請小心處理檔案,並在不再需要時加以清除。

az appconfig kv export -n myAppConfiguration -d file --path mySecrets.yaml --key "secrets.*" --separator "." --resolve-keyvault --format yaml

使用 Helm 升級的 -f 引數來傳入您所建立的兩個組態檔。 這兩個組態檔會使用從應用程式組態中匯出的值,覆寫 values.yaml 中所定義的組態值。

helm upgrade --install -f myConfig.yaml -f mySecrets.yaml "example" ./mychart

您也可以使用 --set 引數升級 Helm,以傳遞常值金鑰值。 使用 --set 引數是避免將敏感性資料保存到磁碟的好方法。

$secrets = az appconfig kv list -n myAppConfiguration --key "secrets.*" --resolve-keyvault --query "[*].{name:key, value:value}" | ConvertFrom-Json

foreach ($secret in $secrets) {
  $keyvalues += $secret.name + "=" + $secret.value + ","
}

if ($keyvalues){
  $keyvalues = $keyvalues.TrimEnd(',')
  helm upgrade --install --set $keyvalues "example" ./mychart
}
else{
  helm upgrade --install "example" ./mychart
}

存取 Kubernetes 儀表板,確認已成功設定組態和祕密。 您會看到來自應用程式組態的色彩訊息值已填入容器的環境變數中。

Quickstart app launch local

儲存為應用程式組態中 Key Vault 參考的祕密,Password,也已新增至 Kubernetes 祕密。

Screenshot that highlights the password in the Data section.

清除資源

如果您不想繼續使用本文中建立的資源,請刪除在此處建立的資源群組,以避免產生費用。

重要

刪除資源群組是無法回復的動作。 資源群組和其中的所有資源都將被永久刪除。 請確定您不會誤刪錯誤的資源群組或資源。 如果您是在包含需保留其他資源的資源群組內部,建立本文的資源,則可以從每個資源各自的窗格中個別刪除每個資源,而不必刪除整個資源群組。

  1. 登入 Azure 入口網站,然後選取 [資源群組]
  2. 在 [依名稱篩選] 方塊中,輸入您資源群組的名稱。
  3. 在結果清單中,選取資源群組名稱以查看概觀。
  4. 選取 [刪除資源群組]
  5. 系統將會要求您確認是否刪除資源群組。 輸入您資源群組的名稱以進行確認,然後選取 [刪除]

不久後,系統便會刪除該資源群組及其所有的資源。

下一步

在本教學課程中,您已匯出要透過 Helm Kubernetes 部署中使用的 Azure 應用程式組態資料。 若要深入了解「應用程式組態」的使用方式,請繼續進行 Azure CLI 範例。