Интеграция с развертыванием 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 с активной подпиской. Создайте ее бесплатно.
- Установленный интерфейс командной строки Azure версии 2.4.0 или более поздней.
- Установленный Helm версии 2.14.0 или более поздней.
- Хранилище Конфигурация приложений. Создайте хранилище.
- Кластер Kubernetes.
Добавление ключевых значений
Добавьте следующие ключевые значения в хранилище Конфигурация приложений и оставьте метку и тип контента со значениями по умолчанию. Дополнительные сведения о добавлении значений ключей в хранилище с помощью портал Azure или ИНТЕРФЕЙСА командной строки см. в разделе "Создание значения ключа".
Ключ | Значение |
---|---|
settings.color | Белый |
settings.message | Данные из Конфигурация приложений Azure |
Добавление ссылки на Key Vault в службу "Конфигурация приложений Azure"
Войдите на портал Azure и добавьте в Key Vault секрет с именем Password и значением myPassword.
Выберите экземпляр хранилища службы "Конфигурация приложений", который вы создали в предыдущем разделе.
Выберите Обозреватель конфигураций.
Выберите + Создать>Ссылка на хранилище ключей и укажите следующие значения:
- Ключ. Выберите 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 из службы "Конфигурация приложений" успешно перенесены в переменные среды контейнера.
Один из секретов с именем password, который хранит в службе "Конфигурация приложений" ссылку на Key Vault, также был добавлен в секреты Kubernetes.
Очистка ресурсов
Если вы не планируете в дальнейшем использовать ресурсы, созданные при работе с этой статьей, удалите созданную группу ресурсов, чтобы избежать расходов.
Внимание
Удаление группы ресурсов — процесс необратимый. Группа ресурсов и все содержащиеся в ней ресурсы удаляются без возможности восстановления. Будьте внимательны, чтобы случайно не удалить не те ресурсы или группу ресурсов. Если ресурсы для работы с этой статьей созданы в группе ресурсов, которая содержит другие нужные ресурсы, удалите каждый ресурс отдельно в соответствующей области ресурса, чтобы не удалять группу ресурсов.
- Войдите на портал Azure и выберитеГруппы ресурсов.
- Введите имя группы ресурсов в поле Фильтровать по имени.
- В списке результатов выберите имя группы ресурсов, чтобы просмотреть общие сведения.
- Выберите команду Удалить группу ресурсов.
- Подтвердите операцию удаления группы ресурсов. Введите имя группы ресурсов, которую необходимо удалить, и нажмите Удалить.
Через некоторое время группа ресурсов и все ее ресурсы будут удалены.
Следующие шаги
Из этого руководства вы узнали, как экспортировать данные из службы "Конфигурация приложений Azure", чтобы использовать их в Helm при развертывании Kubernetes. Чтобы узнать больше об использовании службы "Конфигурация приложений", перейдите к примерам скриптов Azure CLI.