Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Neste quickstart, implementa uma aplicação Django no cluster Azure Kubernetes Service (AKS) com o Azure Database para servidor flexível PostgreSQL, utilizando a CLI do Azure.
O AKS é um serviço Kubernetes gerido que utilizas para implementar e gerir 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.
Observação
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 conta do Azure, crie uma conta gratuita 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 estiveres a usar uma instalação local, inicia sessão usando o comando de login do az . Para concluir o processo de autenticação, siga os passos exibidos no seu terminal.
- Execute az version para descobrir a versão e as bibliotecas dependentes que estão instaladas. Para atualizar para a versão mais recente, execute 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 Azure é um grupo lógico no qual implementas e geres recursos 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
A localização 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 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ó. 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 conclui e retorna informações formatadas em JSON sobre o cluster.
Observação
Ao criar um cluster AKS, o comando cria automaticamente um segundo grupo de recursos para armazenar os recursos AKS. Para obter mais informações, consulte Por que dois grupos de recursos são criados com o AKS?
Ligar ao cluster
Para gerir um cluster de Kubernetes, utilize kubectl, o cliente de linha de comandos do Kubernetes. Se você usa o Azure Cloud Shell, kubectl já está instalado.
Observação
Se estiveres a correr Azure CLI localmente, executa o comando az aks install-cli para instalar kubectl.
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 nas etapas 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 uma instância de servidor flexível
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 tem as seguintes características:
- Uma nova base de dados vazia nomeada
postgresé criada quando o servidor é provisionado pela primeira vez. Este quickstart utiliza a base de dadospostgres. - Nome do servidor gerado automaticamente, nome de utilizador de administrador, palavra-passe de administrador, nome do grupo de recursos (se ainda não o especificaste no contexto local) e a mesma localização do teu grupo de recursos.
- Ao usar o argumento de acesso público, cria-se um servidor com acesso público para qualquer cliente com o nome de utilizador e a palavra-passe corretos.
- Como o comando utiliza contexto local, cria o servidor no grupo
django-projectde 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
Atualiza ALLOWED_HOSTS em settings.py para garantir que a aplicação Django utilize o IP externo que é atribuído à aplicação Kubernetes.
ALLOWED_HOSTS = ['*']
Seção de atualização DATABASES={ } no settings.py arquivo. O excerto de código lê o anfitrião da base de dados, o nome de utilizador e a palavra-passe do ficheiro do manifesto 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 ficheiro para listar as dependências da aplicação 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 ficheiro com o nome Dockerfile e copie o seguinte excerto de código. Este Dockerfile configura o Python 3.8 e instala todos os requisitos listados no requirements.txt ficheiro.
# 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
Certifica-te de que estás no my-django-app diretório de 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 estiveres a usar o Azure container registry (ACR), executa o az aks update comando para anexar a 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. Crie um ficheiro manifesto com o nome djangoapp.yaml e copie na seguinte definição YAML.
Importante
Atualize a secção env com os seus valores SERVERNAME, YOUR-DATABASE-USERNAME e YOUR-DATABASE-PASSWORD para a instância de servidor flexível do Azure Database for 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
Implemente a aplicação usando o comando kubectl apply . 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 implementação nomeada django-app descreve detalhes da sua implementação, como que imagens usar para a aplicação, o número de pods e a configuração dos pods. Cria-se um serviço nomeado python-svc para expor a aplicação através 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 IP EXTERNO do serviço django-app aparece 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.
Observação
- 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 aplicação Django, é necessário fazer uma migração de base de dados ou recolher ficheiros estáticos. Podes executar estes comandos shell do Django usando $ kubectl exec <pod-name> -- [COMMAND]. Antes de executar o comando, precisa de 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
Depois de encontrar o nome do pod, execute migrações para a base de dados Django com o comando $ kubectl exec <pod-name> -- [COMMAND].
/code/ é o diretório de trabalho do projeto definido na Dockerfile secção acima.
$ kubectl exec django-app-5d9cd6cd8-l6x4b -- python /code/manage.py migrate
A saída é semelhante a:
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 tiver problemas, execute kubectl logs <pod-name> para ver qual exceção a sua aplicação apresenta. Se a aplicação funcionar bem, verá uma saída assim 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 cobranças do Azure, limpa os recursos desnecessários. Quando deixar de precisar do cluster, use o comando az group delete para remover o grupo de recursos, o serviço do contentor e todos os recursos relacionados.
az group delete --name django-project --yes --no-wait
Observação
Quando elimina o cluster, o principal de serviço Microsoft Entra que o cluster AKS utiliza não é excluído. 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 usares uma identidade gerida, a plataforma gere a identidade e não requer remoção.