Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Neste início rápido, você implantará um aplicativo Django no cluster do AKS (Serviço de Kubernetes do Azure) com o servidor flexível do Banco de Dados do Azure para PostgreSQL usando a CLI do Azure.
O AKS é um serviço gerenciado do Kubernetes que você usa para implantar e gerenciar rapidamente clusters. O servidor flexível do Banco de Dados do Azure para PostgreSQL é um serviço de banco de dados totalmente gerenciado, projetado para proporcionar um controle mais granular e flexibilidade nas funções de gerenciamento de banco de dados e definições de configuração.
Observação
Este guia de início rápido pressupõe uma compreensão básica dos conceitos do Kubernetes, do Django e do PostgreSQL.
Pré-requisitos
Se você ainda não tiver uma conta do Azure, crie uma conta gratuita antes de começar.
- Inicie o Azure Cloud Shell em uma nova janela do navegador. Você também pode instalar a CLI do Azure no computador local. Se você estiver usando uma instalação local, entre usando o comando az login . Para concluir o processo de autenticação, siga as etapas exibidas em seu terminal.
- Execute o comando az version para localizar a versão e as bibliotecas dependentes que estão instaladas. Para atualizar para a versão mais recente, execute az upgrade. Este artigo exige a versão mais recente da CLI do Azure. Se você está usando o Azure Cloud Shell, a última versão já está instalada.
Criar um grupo de recursos
Um grupo de recursos do Azure é um grupo lógico no qual você implanta e gerencia recursos do Azure. Crie um grupo de recursos chamado django-project usando o comando az-group-create na localização eastus.
az group create --name django-project --location eastus
Observação
O local do grupo de recursos armazena os metadados do grupo de recursos. Também é onde seus recursos são executados no Azure se você não especificar outra região durante a criação de recursos.
A seguinte saída de exemplo mostra o grupo de recursos criado com êxito:
{
"id": "/subscriptions/<guid>/resourceGroups/django-project",
"location": "eastus",
"managedBy": null,
"name": "django-project",
"properties": {
"provisioningState": "Succeeded"
},
"tags": null
}
Criar cluster AKS
Use o comando az aks create para criar um cluster do AKS. O exemplo a seguir cria um cluster chamado djangoappcluster com um nó. A criação do cluster leva vários minutos para ser concluída.
az aks create --resource-group django-project --name djangoappcluster --node-count 1 --generate-ssh-keys
Após alguns minutos, o comando será concluído e retornará informações no formato JSON sobre o cluster.
Observação
Ao criar um cluster do AKS, o comando cria automaticamente um segundo grupo de recursos para armazenar os recursos do AKS. Para obter mais informações, confira Por que dois grupos de recursos são criados com o AKS?
Conectar-se ao cluster
Para gerenciar um cluster Kubernetes, use kubectl, o cliente de linha de comando Kubernetes. Se você usar o Azure Cloud Shell, o kubectl já estará instalado.
Observação
Se você estiver executando a CLI do Azure localmente, execute o comando az aks install-cli para instalar kubectl.
Para configurar o kubectl para se conectar ao cluster do Kubernetes, use o comando az aks get-credentials. Este comando baixa as credenciais e configura a CLI do Kubernetes para usá-las.
az aks get-credentials --resource-group django-project --name djangoappcluster
Para verificar a conexão com o cluster, use o comando kubectl get para retornar uma lista dos nós de cluster.
kubectl get nodes
A saída de exemplo a seguir mostra o único nó criado nas etapas anteriores. Verifique se o status do nó é Pronto:
NAME STATUS ROLES AGE VERSION
aks-nodepool1-31718369-0 Ready agent 6m44s v1.12.8
Criar uma instância de servidor flexível
Crie uma instância de servidor flexível do Banco de Dados do Azure para PostgreSQL com o comando az postgreSQL flexible-server create O seguinte comando criará um servidor usando valores e padrões de serviço do contexto local da CLI do Azure:
az postgres flexible-server create --public-access all
O servidor tem os seguintes atributos:
- Um novo banco de dados vazio nomeado
postgresé criado quando o servidor é provisionado pela primeira vez. Este início rápido usa opostgresbanco de dados. - Nome do servidor gerado automaticamente, nome de usuário do administrador, senha de administrador, nome do grupo de recursos (se você ainda não especificou no contexto local) e o mesmo local do grupo de recursos.
- Usando o argumento de acesso público, você cria um servidor com acesso público para qualquer cliente com o nome de usuário e a senha corretos.
- Como o comando usa o contexto local, ele cria o servidor no grupo
django-projectde recursos e na regiãoeastus.
Criar sua imagem do Docker do Django
Crie um aplicativo Django ou use seu projeto Django existente. Verifique se o código está nesta estrutura de pastas.
└───my-djangoapp
└───views.py
└───models.py
└───forms.py
├───templates
. . . . . . .
├───static
. . . . . . .
└───my-django-project
└───settings.py
└───urls.py
└───wsgi.py
. . . . . . .
└─── Dockerfile
└─── requirements.txt
└─── manage.py
Atualize ALLOWED_HOSTS em settings.py para garantir que a aplicação Django use o IP externo que é atribuído ao aplicativo Kubernetes.
ALLOWED_HOSTS = ['*']
Atualize a seção DATABASES={ } no arquivo settings.py. O trecho de código lê o host do banco de dados, o nome de usuário e a senha do arquivo de manifesto do Kubernetes.
DATABASES={
'default':{
'ENGINE':'django.db.backends.postgresql_psycopg2',
'NAME':os.getenv('DATABASE_NAME'),
'USER':os.getenv('DATABASE_USER'),
'PASSWORD':os.getenv('DATABASE_PASSWORD'),
'HOST':os.getenv('DATABASE_HOST'),
'PORT':'5432',
'OPTIONS': {'sslmode': 'require'}
}
}
Gerar um arquivo requirements.txt
Crie um requirements.txt arquivo para listar as dependências do aplicativo Django. Veja um arquivo requirements.txt de exemplo. Você pode usar pip freeze > requirements.txt para gerar um arquivo requirements.txt para seu aplicativo existente.
Django==2.2.17
postgres==3.0.0
psycopg2-binary==2.8.6
psycopg2-pool==1.1
pytz==2020.4
Criar um Dockerfile
Crie um novo arquivo nomeado Dockerfile e copie o snippet de código a seguir. Esse Dockerfile configura o Python 3.8 e instala todos os requisitos listados no requirements.txt arquivo.
# Use the official Python image from the Docker Hub
FROM python:3.8.2
# Make a new directory to put our code in.
RUN mkdir /code
# Change the working directory.
WORKDIR /code
# Copy to code folder
COPY . /code/
# Install the requirements.
RUN pip install -r requirements.txt
# Run the application:
CMD python manage.py runserver 0.0.0.0:8000
Crie sua imagem
Verifique se você está no my-django-app diretório em um terminal usando o cd comando. Execute o seguinte comando para criar sua imagem de painel de anúncios:
docker build --tag myblog:latest .
Implante sua imagem no Docker Hub ou no Registro de Contêiner do Azure.
Importante
Se você estiver usando o ACR (Registro de Contêiner do Azure), execute o az aks update comando para anexar a conta do ACR ao cluster do AKS.
az aks update --name djangoappcluster --resource-group django-project --attach-acr <your-acr-name>
Criar o arquivo de manifesto do Kubernetes
Um arquivo de manifesto do Kubernetes define um estado desejado para o cluster, como as imagens de contêiner a serem executadas. Crie um arquivo de manifesto nomeado djangoapp.yaml e copie na seguinte definição YAML.
Importante
Atualize a seção env com seus valores SERVERNAME, YOUR-DATABASE-USERNAME e YOUR-DATABASE-PASSWORD para sua instância de servidor flexível do Banco de Dados do Azure para PostgreSQL.
apiVersion: apps/v1
kind: Deployment
metadata:
name: django-app
spec:
replicas: 1
selector:
matchLabels:
app: django-app
template:
metadata:
labels:
app: django-app
spec:
containers:
- name: django-app
image: [DOCKER-HUB-USER-OR-ACR-ACCOUNT]/[YOUR-IMAGE-NAME]:[TAG]
ports:
- containerPort: 8000
env:
- name: DATABASE_HOST
value: "SERVERNAME.postgres.database.azure.com"
- name: DATABASE_USER
value: "YOUR-DATABASE-USERNAME"
- name: DATABASE_PASSWORD
value: "YOUR-DATABASE-PASSWORD"
- name: DATABASE_NAME
value: "postgres"
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: "app"
operator: In
values:
- django-app
topologyKey: "kubernetes.io/hostname"
---
apiVersion: v1
kind: Service
metadata:
name: python-svc
spec:
type: LoadBalancer
ports:
- protocol: TCP
port: 80
targetPort: 8000
selector:
app: django-app
Implantar Django no cluster AKS
Implante o aplicativo usando o comando kubectl apply . Especifique o nome do manifesto YAML:
kubectl apply -f djangoapp.yaml
A seguinte saída de exemplo mostra as Implantações e os Serviços criados com êxito:
deployment "django-app" created
service "python-svc" created
Uma implantação com um nome específico django-app descreve detalhes da sua implantação, como quais imagens usar para o aplicativo, o número de pods e a configuração dos pods. Você cria um serviço nomeado python-svc para expor o aplicativo por meio de um IP externo.
Testar o aplicativo
Quando o aplicativo é executado, um serviço de Kubernetes expõe o front-end do aplicativo à Internet. A conclusão desse processo pode levar alguns minutos.
Para monitorar o andamento, use o comando kubectl get service com o argumento --watch.
kubectl get service python-svc --watch
Inicialmente, o EXTERNAL-IP para o serviço django-app é mostrado como pendente.
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
django-app LoadBalancer 10.0.37.27 <pending> 80:30572/TCP 6s
Quando o endereço EXTERNAL-IP for alterado de pendente para um endereço IP público real, use CTRL-C para interromper o processo de inspeção do kubectl. A seguinte saída de exemplo mostra um endereço IP público válido atribuído ao serviço:
django-app LoadBalancer 10.0.37.27 52.179.23.131 80:30572/TCP 2m
Agora abra um navegador da Web para o endereço IP externo do seu serviço (http://<service-external-ip-address>) e exiba o aplicativo Django.
Observação
- No momento, o site do Django não está usando HTTPS. Para obter mais informações sobre HTTPS e como configurar o roteamento de aplicativos para o AKS, confira Entrada do NGINX gerenciado com o complemento de roteamento de aplicativos.
Executar migrações de banco de dados
Para qualquer aplicativo Django, você precisa executar uma migração de banco de dados ou coletar arquivos estáticos. Você pode executar esses comandos de shell do Django usando $ kubectl exec <pod-name> -- [COMMAND]. Antes de executar o comando, você precisa encontrar o nome do pod usando kubectl get pods.
$ kubectl get pods
Você verá uma saída como esta:
NAME READY STATUS RESTARTS AGE
django-app-5d9cd6cd8-l6x4b 1/1 Running 0 2m
Depois de encontrar o nome do pod, execute as migrações de banco de dados do Django com o comando $ kubectl exec <pod-name> -- [COMMAND].
/code/ é o diretório de trabalho do projeto definido na Dockerfile seção acima.
$ kubectl exec django-app-5d9cd6cd8-l6x4b -- python /code/manage.py migrate
A saída se parece com isso:
Operations to perform:
Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:
Applying contenttypes.0001_initial... OK
Applying auth.0001_initial... OK
Applying admin.0001_initial... OK
Applying admin.0002_logentry_remove_auto_add... OK
Applying admin.0003_logentry_add_action_flag_choices... OK
. . . . . .
Se você tiver problemas, execute kubectl logs <pod-name> para ver qual exceção seu aplicativo gera. Se o aplicativo funcionar com êxito, você verá uma saída como esta ao executar kubectl logs.
Watching for file changes with StatReloader
Performing system checks...
System check identified no issues (0 silenced).
You have 17 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.
December 08, 2020 - 23:24:14
Django version 2.2.17, using settings 'django_postgres_app.settings'
Starting development server at http://0.0.0.0:8000/
Quit the server with CONTROL-C.
Limpar os recursos
Para evitar encargos do Azure, limpe os recursos desnecessários. Quando você não precisar mais do cluster, use o comando az group delete para remover o grupo de recursos, o serviço de contêiner e todos os recursos relacionados.
az group delete --name django-project --yes --no-wait
Observação
Ao excluir o cluster, a entidade de serviço Microsoft Entra usada pelo cluster AKS não é removida. Para obter as etapas para remover a entidade de serviço, confira Considerações sobre a entidade de serviço do AKS e sua exclusão. Se você usar uma identidade gerenciada, a plataforma gerenciará a identidade e ela não exigirá remoção.
Conteúdo relacionado
- Acessar recursos do Kubernetes usando o portal do Azure
- Implantações automatizadas para o Serviço de Kubernetes do Azure
- Dimensionar aplicativos no Serviço de Kubernetes do Azure
- Gerenciar o Banco de Dados do Azure para PostgreSQL usando o portal do Azure
- Configurar parâmetros de servidor no Banco de Dados do Azure para PostgreSQL