Integrar com a Implantação do Kubernetes usando o Helm
Os aplicativos hospedados no Kubernetes podem acessar os dados na Configuração de Aplicativos usando a biblioteca do provedor de Configuração de Aplicativos. O provedor de Configuração de Aplicativos possui recursos de cache e atualização internos para que os aplicativos possam ter configuração dinâmica sem reimplantação. Se você preferir não atualizar o aplicativo, este tutorial mostrará como trazer os dados da Configuração de Aplicativos para o Kubernetes usando o Helm por meio de implantação. Dessa forma, o aplicativo poderá continuar acessando a configuração de segredos e variáveis do Kubernetes. Você executará a atualização do Helm quando quiser que o aplicativo obtenha as novas alterações de configuração.
Dica
Confira as opções de cargas de trabalho hospedadas no Kubernetes para acessar a Configuração de Aplicativos do Azure.
O Helm fornece uma forma de definir, instalar e atualizar aplicativos em execução no Kubernetes. Um gráfico do 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 valores.yaml podem ser referenciadas como variáveis de ambiente dentro dos contêineres em execução. O Helm também dá suporte à 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 baseados em YAML adicionais na linha de comando ao executar o Helm. A Configuração de Aplicativos do Azure dá suporte à exportação de valores de configuração para arquivos YAML. A integração dessa funcionalidade de exportação à sua implantação permite que seus aplicativos Kubernetes aproveitem os valores de configuração armazenados na Configuração de Aplicativos.
Neste tutorial, você aprenderá como:
- Use valores da Configuração de Aplicativos ao implantar um aplicativo no Kubernetes usando o Helm.
- Criar um Segredo do Kubernetes com base em uma referência do Key Vault na Configuração de Aplicativos.
Este tutorial pressupõe uma compreensão básica do gerenciamento de Kubernetes com o Helm. Saiba mais sobre como instalar aplicativos com o Helm no Serviço de Kubernetes do Azure.
Pré-requisitos
- Uma conta do Azure com uma assinatura 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)
- Um repositório de Configuração de Aplicativos. Criar um repositório.
- Um cluster do Kubernetes.
Adicionar valores-chave
Adicione os seguintes valores-chave ao repositório de Configuração de Aplicativos e deixe o Rótulo e Tipo de Conteúdo com seus valores padrão. Para mais informações sobre como adicionar valores-chave a um repositório usando o portal do Azure ou a CLI, acesse Criar um valor-chave.
Chave | Valor |
---|---|
settings.color | Branca |
settings.message | Dados da Configuração de Aplicativo do Azure |
Adicionar uma referência do Key Vault à Configuração de Aplicativos
Entre no portal do Azure e adicione um segredo ao Key Vault com o nome Password e o valor myPassword.
Selecione a instância do repositório da Configurações de Aplicativos que você criou na seção anterior.
Selecione Gerenciador de Configurações.
Clique em + Criar>Referência do Key Vault e especifique os seguintes valores:
- Chave: Selecione secrets.password.
- Rótulo: deixe esse valor em branco.
- Assinatura, Grupo de recursos e Cofre de chaves: insira os valores correspondentes àqueles no cofre de chaves criado na etapa anterior.
- Segredo: selecione o segredo chamado Password criado na seção anterior.
Criar gráfico do Helm
Primeiro, crie um gráfico do Helm de exemplo com o seguinte comando:
helm create mychart
O Helm cria um diretório chamado mychart com a estrutura mostrada abaixo.
Dica
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 snippet 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 ter a aparência mostrada 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 à pasta de modelos.
Dica
Saiba mais sobre como usar Segredos do Kubernetes.
apiVersion: v1
kind: Secret
metadata:
name: mysecret
type: Opaque
data:
password: {{ .Values.secrets.password | b64enc }}
Por fim, atualize o arquivo values.yaml com o conteúdo a seguir para, opcionalmente, fornecer valores padrão dos parâmetros 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 de Aplicativos.
# settings will be overwritten by App Configuration
settings:
color: red
message: myMessage
Passar a configuração da Configuração de Aplicativos na instalação do Helm
Primeiro, baixe a configuração da Configuração de Aplicativos para um arquivo myConfig.yaml. Use um filtro de chave para baixar apenas as chaves que começam com settings. . Se, no seu caso, o filtro de chave não for suficiente para excluir chaves das referências do Key Vault, use o argumento --skip-keyvault para excluí-las.
Dica
Saiba mais sobre o comando export.
az appconfig kv export -n myAppConfiguration -d file --path myConfig.yaml --key "settings.*" --separator "." --format yaml
Em seguida, baixe os segredos para um arquivo chamado mySecrets.yaml. O argumento de linha de comando --resolve-keyvault resolve as referências do Key Vault recuperando os valores reais no Key Vault. Você precisará executar esse comando com credenciais que têm permissões de acesso ao Key Vault correspondente.
Aviso
Como ele contém informações confidenciais, mantenha o arquivo com cuidado e limpe-o quando ele 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 de atualização do Helm para passar os dois arquivos de configuração que foram criados. Eles substituirão os valores de configuração definidos em values.yaml pelos valores exportados da Configuração de Aplicativos.
helm upgrade --install -f myConfig.yaml -f mySecrets.yaml "example" ./mychart
Você também pode usar o argumento --set de atualização do Helm 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 de Aplicativos foram populados nas variáveis de ambiente do contêiner.
Um segredo, password, armazenado como uma referência do Key Vault na Configuração de Aplicativos, também foi adicionado aos Segredos do Kubernetes.
Limpar os recursos
Se não deseja continuar usando os recursos criados neste artigo, exclua o grupo de recursos que você criou aqui para evitar encargos.
Importante
A exclusão de um grupo de recursos é irreversível. O grupo de recursos e todos os recursos contidos nele são excluídos permanentemente. Não exclua acidentalmente grupo de recursos ou recursos incorretos. Se tiver criado os recursos para este artigo dentro de um grupo de recursos que contém outros recursos que você deseja manter, exclua cada um individualmente do respectivo painel em vez de excluir o grupo de recursos.
- Entre no portal do Azure e selecione Grupos de recursos.
- Na caixa Filtrar por nome..., digite o nome do seu grupo de recursos.
- Na lista de resultados, selecione o nome do grupo de recursos para conferir uma visão geral.
- Selecione Excluir grupo de recursos.
- Você receberá uma solicitação para confirmar a exclusão do grupo de recursos. Insira o nome do grupo de recursos para confirmar e selecione Excluir.
Após alguns instantes, o grupo de recursos e todos os recursos dele são excluídos.
Próximas etapas
Neste tutorial, você exportou os dados da Configuração de Aplicativos do Azure para uso em uma implantação do Kubernetes com o Helm. Para saber mais sobre como usar a Configuração de Aplicativo, continue para ver as amostras da CLI do Azure.