Integração com a implantação do Kubernetes usando o Helm

Os aplicativos hospedados no Kubernetes podem acessar dados na Configuração do Aplicativo usando a biblioteca do provedor de Configuração do Aplicativo. O provedor de Configuração de Aplicativo tem recursos internos de cache e atualização para que os aplicativos possam ter configuração dinâmica sem reimplantação. Se você preferir não atualizar seu aplicativo, este tutorial mostra como trazer dados da Configuração do Aplicativo para o Kubernetes usando o Helm via implantação. Dessa forma, seu aplicativo pode continuar acessando a configuração a partir de variáveis e segredos do Kubernetes. Você executa a atualização do Helm quando deseja que seu aplicativo receba novas alterações de configuração.

Gorjeta

Consulte as opções de cargas de trabalho hospedadas no Kubernetes para acessar a Configuração do Aplicativo do Azure.

O Helm fornece uma maneira de definir, instalar e atualizar aplicativos em execução no Kubernetes. Um gráfico Helm contém as informações necessárias para criar uma instância de um aplicativo Kubernetes. A configuração é armazenada fora do próprio gráfico, em um arquivo chamado values.yaml.

Durante o processo de lançamento, o Helm mescla o gráfico com a configuração adequada para executar o aplicativo. Por exemplo, as variáveis definidas em values.yaml podem ser referenciadas como variáveis de ambiente dentro dos contêineres em execução. O Helm também suporta a criação de segredos do Kubernetes, que podem ser montados como volumes de dados ou expostos como variáveis de ambiente.

Você pode substituir os valores armazenados em values.yaml fornecendo arquivos de configuração adicionais baseados em YAML na linha de comando ao executar o Helm. A Configuração de Aplicativo do Azure dá suporte à exportação de valores de configuração para arquivos YAML. A integração desse recurso de exportação em sua implantação permite que seus aplicativos Kubernetes aproveitem os valores de configuração armazenados na Configuração do aplicativo.

Neste tutorial, irá aprender a:

  • Use valores da Configuração do Aplicativo ao implantar um aplicativo no Kubernetes usando o Helm.
  • Crie um Segredo do Kubernetes com base em uma referência do Cofre da Chave na Configuração do Aplicativo.

Este tutorial pressupõe a compreensão básica do gerenciamento do Kubernetes com o Helm. Saiba mais sobre como instalar aplicativos com o Helm no Serviço Kubernetes do Azure.

Pré-requisitos

  • Uma conta do Azure com uma subscrição ativa. Crie um gratuitamente.
  • Instalar a CLI do Azure (versão 2.4.0 ou posterior)
  • Instalar o Helm (versão 2.14.0 ou posterior)
  • Uma loja de configuração de aplicativos. Crie uma loja.
  • Um cluster Kubernetes.

Adicionar valores-chave

Adicione os seguintes valores-chave à loja de Configuração de Aplicações e deixe Etiqueta e Tipo de Conteúdo com os respetivos valores predefinidos. Para obter mais informações sobre como adicionar valores-chave a uma loja usando o portal do Azure ou a CLI, vá para Criar um valor-chave.

Key valor
configurações.color Branco
configurações.mensagem Dados da Configuração do Aplicativo do Azure

Adicionar uma referência do Cofre da Chave à Configuração do Aplicativo

  1. Entre no portal do Azure e adicione um segredo ao Cofre de Chaves com o nome Senha e o valor myPassword.

  2. Selecione a instância da App Configuration Store que você criou na seção anterior.

  3. Selecione Configuration Explorer.

  4. Selecione + Criar>referência do cofre da chave e especifique os seguintes valores:

    • Chave: Selecione secrets.password.
    • Label: Deixe este valor em branco.
    • Assinatura, Grupo de recursos e Cofre de chaves: insira os valores correspondentes aos do cofre de chaves que você criou na etapa anterior.
    • Segredo: Selecione o segredo chamado Senha que você criou na seção anterior.

Criar gráfico de leme

Primeiro, crie um exemplo de gráfico de leme com o seguinte comando:

helm create mychart

Helm cria um novo diretório chamado mychart com a estrutura mostrada abaixo.

Gorjeta

Siga este guia de gráficos para saber mais.

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

Em seguida, atualize a seção spec:template:spec:containers do arquivo deployment.yaml . O trecho a seguir adiciona duas variáveis de ambiente ao contêiner. Você definirá seus valores dinamicamente no momento da implantação.

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

O arquivo deployment.yaml completo após a atualização deve ser parecido com o abaixo.

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 }}

Para armazenar dados confidenciais como Segredos do Kubernetes, adicione um arquivo secrets.yaml na pasta templates.

Gorjeta

Saiba mais sobre como usar o Kubernetes Secrets.

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

Por fim, atualize o arquivo values.yaml com o seguinte conteúdo para, opcionalmente, fornecer valores padrão das definições de configuração e segredos referenciados nos arquivos deployment.yaml e secrets.yaml . Seus valores reais serão substituídos pela configuração extraída da Configuração do aplicativo.

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

Passar a configuração da Configuração do aplicativo na instalação do Helm

Primeiro, baixe a configuração da Configuração do aplicativo para um arquivo myConfig.yaml . Use um filtro de chave para baixar apenas as chaves que começam com configurações.. Se, no seu caso, o filtro de chaves não for suficiente para excluir chaves de referências do Cofre de Chaves, você poderá usar o argumento --skip-keyvault para excluí-las.

Gorjeta

Saiba mais sobre o comando exportar.

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

Em seguida, baixe segredos para um arquivo chamado mySecrets.yaml. O argumento de linha de comando --resolve-keyvault resolve as referências do Cofre da Chave recuperando os valores reais no Cofre da Chave. Você precisará executar esse comando com credenciais que tenham permissões de acesso ao Cofre da Chave correspondente.

Aviso

Como esse arquivo contém informações confidenciais, mantenha o arquivo com cuidado e limpe quando não for mais necessário.

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

Use o argumento -f da atualização de leme para passar os dois arquivos de configuração que você criou. Eles substituirão os valores de configuração definidos em values.yaml pelos valores exportados da Configuração do aplicativo.

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

Você também pode usar o argumento --set para atualização de leme para passar valores-chave literais. Usar o argumento --set é uma boa maneira de evitar a persistência de dados confidenciais no disco.

$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
}

Verifique se as configurações e os segredos foram definidos com êxito acessando o Painel do Kubernetes. Você verá que os valores de cor e mensagem da Configuração do Aplicativo foram preenchidos nas variáveis de ambiente do contêiner.

Quickstart app launch local

Um segredo, senha, armazenado como referência do Cofre de Chaves na Configuração do Aplicativo também foi adicionado ao Kubernetes Secrets.

Screenshot that highlights the password in the Data section.

Clean up resources (Limpar recursos)

Se não quiser continuar a utilizar os recursos criados neste artigo, elimine o grupo de recursos que criou aqui para evitar cobranças.

Importante

A eliminação de um grupo de recursos é irreversível. O grupo de recursos e todos os recursos nele contidos são excluídos permanentemente. Certifique-se de não excluir acidentalmente o grupo de recursos ou recursos errados. Se você criou os recursos para este artigo dentro de um grupo de recursos que contém outros recursos que deseja manter, exclua cada recurso individualmente de seu respetivo painel em vez de excluir o grupo de recursos.

  1. Entre no portal do Azure e selecione Grupos de recursos.
  2. Na caixa Filtrar por nome, introduza o nome do seu grupo de recursos.
  3. Na lista de resultados, selecione o nome do grupo de recursos para ver uma visão geral.
  4. Selecione Eliminar grupo de recursos.
  5. É-lhe pedido que confirme a eliminação do grupo de recursos. Insira o nome do grupo de recursos a ser confirmado e selecione Excluir.

Após alguns momentos, o grupo de recursos e todos os seus recursos são excluídos.

Próximos passos

Neste tutorial, você exportou dados de Configuração do Aplicativo do Azure para serem usados em uma implantação do Kubernetes com o Helm. Para saber mais sobre como usar a Configuração do Aplicativo, continue para os exemplos da CLI do Azure.