Tutorial: Implantar o aplicativo Django no AKS com o Banco de Dados do Azure para PostgreSQL - Servidor Flexível
APLICA-SE A: Banco de Dados do Azure para PostgreSQL - Servidor Flexível
Neste início rápido, você implanta um aplicativo Django no cluster do Serviço Kubernetes do Azure (AKS) com o Servidor flexível do Banco de Dados do Azure para PostgreSQL usando a CLI do Azure.
O AKS é um serviço Kubernetes gerenciado que permite implantar e gerenciar clusters rapidamente. O servidor flexível do Banco de Dados do Azure para PostgreSQL é um serviço de banco de dados totalmente gerenciado projetado para fornecer controle e flexibilidade mais granulares sobre funções de gerenciamento de banco de dados e definições de configuração.
Nota
Este guia de início rápido pressupõe uma compreensão básica dos conceitos do Kubernetes, Django e PostgreSQL.
Pré-requisitos
Se não tiver uma subscrição do Azure, crie uma conta gratuita do Azure antes de começar.
- Inicie o Azure Cloud Shell na nova janela do navegador. Você também pode instalar a CLI do Azure em sua máquina local. Se estiver a utilizar uma instalação local, inicie sessão com a CLI do Azure utilizando o comando az login . Para concluir o processo de autenticação, siga os passos apresentados no seu terminal.
- Execute o comando az version para localizar a versão e as bibliotecas dependentes instaladas. Para atualizar para a versão mais recente, execute o comando az upgrade. Este artigo requer a versão mais recente da CLI do Azure. Se você estiver usando o Azure Cloud Shell, a versão mais recente já está instalada.
Criar um grupo de recursos
Um grupo de recursos do Azure é um grupo lógico, no qual os recursos do Azure são implementados e geridos. Vamos criar um grupo de recursos, django-project usando o comando az-group-create no local eastus .
az group create --name django-project --location eastus
Nota
O local do grupo de recursos é onde os metadados do grupo de recursos são armazenados. É 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 saída de exemplo a seguir 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 um cluster do AKS
Utilize o comando az aks create para criar um cluster AKS. O exemplo a seguir cria um cluster chamado djangoappcluster com um nó. Isso levará vários minutos para ser concluído.
az aks create --resource-group django-project --name djangoappcluster --node-count 1 --generate-ssh-keys
Após alguns minutos, o comando conclui e retorna informações formatadas em JSON sobre o cluster.
Nota
Ao criar um cluster AKS, um segundo grupo de recursos é criado automaticamente para armazenar os recursos do AKS. Consulte Por que dois grupos de recursos são criados com o AKS?
Ligar ao cluster
Para gerenciar um cluster Kubernetes, use kubectl, o cliente de linha de comando do Kubernetes. Se você usa o Azure Cloud Shell, kubectl
já está instalado.
Nota
Se estiver executando a CLI do Azure localmente, execute o comando az aks install-cli para instalar kubectl
o .
Para configurar kubectl
para se ligar ao cluster do Kubernetes, utilize o comando az aks get-credentials. Este comando baixa credenciais e configura a CLI do Kubernetes para usá-las.
az aks get-credentials --resource-group django-project --name djangoappcluster
Para verificar a ligação ao cluster, utilize o comando kubectl get para devolver uma lista de nós do cluster.
kubectl get nodes
A saída de exemplo seguinte mostra o nó único criado nos passos anteriores. Verifique se o status do nó está Pronto:
NAME STATUS ROLES AGE VERSION
aks-nodepool1-31718369-0 Ready agent 6m44s v1.12.8
Criar um Banco de Dados do Azure para instância de servidor flexível do PostgreSQL
Crie um Banco de Dados do Azure para instância de servidor flexível do PostgreSQL com o comando az postgreSQL flexible-server create . O comando a seguir cria um servidor usando padrões de serviço e valores do contexto local da CLI do Azure:
az postgres flexible-server create --public-access all
O servidor criado tem os seguintes atributos:
- Um novo banco de dados
postgres
vazio é criado quando o servidor é provisionado pela primeira vez. Neste guia de início rápido, usamos este banco de dados. - Nome do servidor gerado automaticamente, nome de usuário do administrador, senha do administrador, nome do grupo de recursos (se ainda não tiver sido especificado no contexto local) e no mesmo local do seu grupo de recursos.
- O uso do argumento de acesso público permite que você crie um servidor com acesso público a qualquer cliente com nome de usuário e senha corretos.
- Como o comando está usando contexto local, ele cria o servidor no grupo
django-project
de recursos e na regiãoeastus
.
Crie sua imagem do docker Django
Crie um novo aplicativo Django ou use seu projeto Django existente. Verifique se o código está nessa 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
para settings.py
garantir que o aplicativo Django use o IP externo que é atribuído ao aplicativo kubernetes.
ALLOWED_HOSTS = ['*']
Seção de atualização DATABASES={ }
no settings.py
arquivo. O trecho de código abaixo está lendo o host do banco de dados, nome de usuário e 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 para o Aplicativo Django. Aqui está um arquivo de exemplo requirements.txt
. 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 com o nome Dockerfile
e copie o trecho de código abaixo. Este Dockerfile na configuração do Python 3.8 e na instalação de todos os requisitos listados em 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
Construa a sua imagem
Verifique se você está no diretório my-django-app
em um terminal usando o cd
comando. Execute o seguinte comando para criar a imagem do quadro de avisos:
docker build --tag myblog:latest .
Implante sua imagem no hub do Docker ou no registro do Contêiner do Azure.
Importante
Se você estiver usando o Registro de contêiner do Azure (ACR), execute o comando para anexar a az aks update
conta ACR ao cluster AKS.
az aks update --name djangoappcluster --resource-group django-project --attach-acr <your-acr-name>
Criar arquivo de manifesto do Kubernetes
Um arquivo de manifesto do Kubernetes define um estado desejado para o cluster, como quais imagens de contêiner devem ser executadas. Vamos criar um arquivo de manifesto chamado djangoapp.yaml
e copiar na seguinte definição de YAML.
Importante
Atualize env
a seção abaixo com seu SERVERNAME
, YOUR-DATABASE-USERNAME
, YOUR-DATABASE-PASSWORD
da 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 o Django no cluster AKS
Implante o aplicativo usando o comando kubectl apply e especifique o nome do seu manifesto YAML:
kubectl apply -f djangoapp.yaml
A saída de exemplo a seguir mostra as implantações e serviços criados com êxito:
deployment "django-app" created
service "python-svc" created
Uma implantação django-app
permite que você descreva detalhes de sua implantação, como quais imagens usar para o aplicativo, o número de pods e a configuração do pod. Um serviço python-svc
é criado para expor o aplicativo por meio de um IP externo.
Testar a aplicação
Quando o aplicativo é executado, um serviço Kubernetes expõe o front-end do aplicativo à Internet. Este processo pode demorar alguns minutos a concluir.
Para monitorizar o progresso, utilize 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 mudar de pendente para um endereço IP público real, use CTRL-C
para interromper o kubectl
processo de monitoramento. A saída de exemplo a seguir 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 visualize o aplicativo Django.
Nota
- Atualmente, o site do Django não está usando HTTPS. Para obter mais informações sobre HTTPS e como configurar o roteamento de aplicativos para AKS, consulte Entrada NGINX gerenciada com o complemento de roteamento de aplicativos.
Executar migrações de banco de dados
Para qualquer aplicativo django, você precisaria executar a migração de banco de dados ou coletar arquivos estáticos. Você pode executar esses comandos do shell django usando $ kubectl exec <pod-name> -- [COMMAND]
o . Antes de executar o comando, você precisa encontrar o nome do pod usando kubectl get pods
.
$ kubectl get pods
Você vê uma saída como esta:
NAME READY STATUS RESTARTS AGE
django-app-5d9cd6cd8-l6x4b 1/1 Running 0 2m
Uma vez que o nome do pod foi encontrado, você pode executar migrações de banco de dados django com o comando $ kubectl exec <pod-name> -- [COMMAND]
. Nota /code/
é o diretório de trabalho para o projeto definido acima Dockerfile
.
$ kubectl exec django-app-5d9cd6cd8-l6x4b -- python /code/manage.py migrate
A saída seria parecida com
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 é lançada pelo seu aplicativo. Se o aplicativo estiver funcionando com êxito, você verá uma saída como esta ao executar kubectl logs
o .
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 cobranças do Azure, você deve limpar recursos desnecessários. Quando o cluster já não for necessário, utilize o comando az group delete para remover o grupo de recursos, o serviço de contentores e todos os recursos relacionados.
az group delete --name django-project --yes --no-wait
Nota
Quando você exclui o cluster, a entidade de serviço do Microsoft Entra usada pelo cluster AKS não é removida. Para obter passos sobre como remover o principal de serviço, consulte Considerações sobre e eliminação do principal de serviço AKS. Se você usou uma identidade gerenciada, a identidade é gerenciada pela plataforma e não requer remoção.
Próximos passos
- Saiba como acessar o painel da web do Kubernetes para seu cluster AKS
- Saiba como habilitar a implantação contínua
- Saiba como dimensionar seu cluster
- Saiba como gerenciar sua instância de servidor flexível do Banco de Dados do Azure para PostgreSQL
- Saiba como configurar parâmetros de servidor para seu servidor de banco de dados.