Интеграция с развертыванием Kubernetes с помощью Helm

Приложения, размещенные в Kubernetes, могут получать доступ к данным в Конфигурации приложений с помощью библиотеки поставщиков Конфигурации приложений. Поставщик Конфигурации приложений имеет встроенные возможности кэширования и обновления, чтобы приложения могли иметь динамическую конфигурацию без повторного развертывания. Если вы предпочитаете не обновлять приложение, в этом руководстве показано, как перенести данные из Конфигурации приложения в Kubernetes с помощью Helm посредством развертывания. Таким образом, приложение может продолжать получать доступ к конфигурации из переменных и секретов Kubernetes. Запустите обновление Helm, когда понадобится, чтобы ваше приложение приняло новые изменения конфигурации.

Совет

См. параметры рабочих нагрузок, размещенных в Kubernetes, для доступа к Конфигурация приложений Azure.

Helm предоставляет способ для определения, установки и обновления приложений, работающих в Kubernetes. Чарт Helm содержит важные сведения для создания экземпляра приложения Kubernetes. Эта конфигурация хранится вне чарта, в файле с именем values.yaml.

В процессе выпуска Helm объединяет чарт с правильной конфигурацией для запуска приложения. Например, определенные в файле values.yaml переменные можно использовать как переменные среды в выполняющихся контейнерах. Также Helm поддерживает создание секретов Kubernetes, которые можно подключать как тома данных или предоставлять как переменные среды.

Вы можете переопределить значения, сохраненные в values.yaml, предоставив дополнительные файлы конфигурации на основе YAML в командной строке при запуске Helm. Служба "Конфигурация приложений Azure" поддерживает экспорт значений конфигурации в YAML-файлы. Интеграция этой функции экспорта в развертывание позволяет приложениям Kubernetes использовать значения конфигурации, хранящиеся в службе "Конфигурация приложений".

В этом руководстве описано следующее:

  • использование значений из службы "Конфигурация приложений" при развертывании приложения в Kubernetes с помощью Helm;
  • создание секрета Kubernetes на основе ссылки на Key Vault в службе "Конфигурация приложений".

В этом руководстве предполагается, что у вас есть базовое понимание принципов управления Kubernetes с помощью Helm. Дополнительные сведения об установке приложений с помощью Helm в Службе Azure Kubernetes см. здесь.

Необходимые компоненты

Добавление ключевых значений

Добавьте следующие ключевые значения в хранилище Конфигурация приложений и оставьте метку и тип контента со значениями по умолчанию. Дополнительные сведения о добавлении значений ключей в хранилище с помощью портал Azure или ИНТЕРФЕЙСА командной строки см. в разделе "Создание значения ключа".

Ключ Значение
settings.color Белый
settings.message Данные из Конфигурация приложений Azure

Добавление ссылки на Key Vault в службу "Конфигурация приложений Azure"

  1. Войдите на портал Azure и добавьте в Key Vault секрет с именем Password и значением myPassword.

  2. Выберите экземпляр хранилища службы "Конфигурация приложений", который вы создали в предыдущем разделе.

  3. Выберите Обозреватель конфигураций.

  4. Выберите + Создать>Ссылка на хранилище ключей и укажите следующие значения:

    • Ключ. Выберите secret.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

Затем обновите раздел spec:template:spec:containers в файле deployment.yaml. Следующий фрагмент кода добавляет для контейнера две переменные среды. Значения вы будете задавать динамически во время развертывания.

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 в папку templates.

Совет

См. дополнительные сведения об использовании секретов 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. Чтобы скачать только те ключи, которые начинаются со строки settings., примените фильтр ключей. Если для вашего случая фильтр ключей не может исключить все упомянутые в 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

Используйте аргумент -f для обновления Helm, чтобы передать два созданных файла конфигурации. Они переопределят значения конфигурации, определенные в файле 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. Вы увидите, что значения color и message из службы "Конфигурация приложений" успешно перенесены в переменные среды контейнера.

Quickstart app launch local

Один из секретов с именем password, который хранит в службе "Конфигурация приложений" ссылку на Key Vault, также был добавлен в секреты Kubernetes.

Screenshot that highlights the password in the Data section.

Очистка ресурсов

Если вы не планируете в дальнейшем использовать ресурсы, созданные при работе с этой статьей, удалите созданную группу ресурсов, чтобы избежать расходов.

Внимание

Удаление группы ресурсов — процесс необратимый. Группа ресурсов и все содержащиеся в ней ресурсы удаляются без возможности восстановления. Будьте внимательны, чтобы случайно не удалить не те ресурсы или группу ресурсов. Если ресурсы для работы с этой статьей созданы в группе ресурсов, которая содержит другие нужные ресурсы, удалите каждый ресурс отдельно в соответствующей области ресурса, чтобы не удалять группу ресурсов.

  1. Войдите на портал Azure и выберитеГруппы ресурсов.
  2. Введите имя группы ресурсов в поле Фильтровать по имени.
  3. В списке результатов выберите имя группы ресурсов, чтобы просмотреть общие сведения.
  4. Выберите команду Удалить группу ресурсов.
  5. Подтвердите операцию удаления группы ресурсов. Введите имя группы ресурсов, которую необходимо удалить, и нажмите Удалить.

Через некоторое время группа ресурсов и все ее ресурсы будут удалены.

Следующие шаги

Из этого руководства вы узнали, как экспортировать данные из службы "Конфигурация приложений Azure", чтобы использовать их в Helm при развертывании Kubernetes. Чтобы узнать больше об использовании службы "Конфигурация приложений", перейдите к примерам скриптов Azure CLI.