Os aplicativos do Django executados no GKE são escalonados dinamicamente de acordo com o tráfego.
Neste tutorial, presume-se que você esteja familiarizado com o desenvolvimento de Web com o Django. Se você é novo no desenvolvimento do Django, é recomendável escrever seu primeiro aplicativo Django antes de continuar.
Embora este tutorial demonstre especificamente o Django, é possível usar esse processo de implantação com outros frameworks baseados em Django, como Wagtail e Django CMS.
Este tutorial usa o Django 5, que requer pelo menos o Python 3.10.Também é necessário ter o Docker instalado (em inglês).
Objetivos
Com este tutorial, você vai:
- Criar e conectar um banco de dados do Cloud SQL.
- Criar e usar valores de secret do Kubernetes.
- Implantar um app Django no Google Kubernetes Engine.
Custos
Neste documento, você vai usar os seguintes componentes faturáveis do Google Cloud:
Para gerar uma estimativa de custo baseada na projeção de uso deste tutorial, use a calculadora de preços.
Antes de começar
- Faça login na sua conta do Google Cloud . Se você começou a usar o Google Cloud, crie uma conta para avaliar o desempenho de nossos produtos em situações reais. Clientes novos também recebem US$ 300 em créditos para executar, testar e implantar cargas de trabalho.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Cloud SQL, GKE and Compute Engine APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.-
Ao usar um provedor de identidade (IdP) externo, primeiro faça login na gcloud CLI com sua identidade federada.
-
Para inicializar a gcloud CLI, execute o seguinte comando:
gcloud init -
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Cloud SQL, GKE and Compute Engine APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.-
Ao usar um provedor de identidade (IdP) externo, primeiro faça login na gcloud CLI com sua identidade federada.
-
Para inicializar a gcloud CLI, execute o seguinte comando:
gcloud init
Preparar o ambiente
Clonar um aplicativo de exemplo
O código do app de exemplo Django está no repositório GoogleCloudPlatform/python-docs-samples no GitHub.
É possível fazer o download da amostra como um arquivo ZIP e extraí-lo ou clonar o repositório na máquina local:
git clone https://github.com/GoogleCloudPlatform/python-docs-samples.gitAcesse o diretório que contém o código de amostra:
Linux/MacOS
cd python-docs-samples/kubernetes_engine/django_tutorialWindows
cd python-docs-samples\kubernetes_engine\django_tutorial
Confirmar a configuração do Python
Este tutorial depende do Python para executar o aplicativo de amostra na máquina. O exemplo de código também requer a instalação de dependências
Para mais detalhes, consulte o guia do ambiente de desenvolvimento em Python.
Confirme se o Python contém a versão 3.10 ou posterior.
python -VVocê verá
Python 3.10.0ou superior.Crie um ambiente virtual do Python e instale as dependências:
Linux/macOS
python -m venv venv source venv/bin/activate pip install --upgrade pip pip install -r requirements.txtWindows
python -m venv venv venv\scripts\activate pip install --upgrade pip pip install -r requirements.txt
Faça o download do proxy do Cloud SQL Auth para se conectar ao Cloud SQL pela máquina local
Quando implantado, o aplicativo usa o proxy de autenticação do Cloud SQL integrado ao ambiente do Google Kubernetes Engine para se comunicar com a instância do Cloud SQL. No entanto, para testar o aplicativo no local, é necessário instalar e usar uma cópia local do proxy no ambiente de desenvolvimento. Para mais detalhes, consulte o guia do proxy de autenticação do Cloud SQL.
O proxy de autenticação do Cloud SQL usa a API Cloud SQL para interagir com sua instância do SQL. Para fazer isso, ele quer a autenticação do aplicativo pela CLI gcloud.
Autentique e receba as credenciais da API:
gcloud auth application-default loginFaça o download e instale o proxy do Cloud SQL Auth na sua máquina local.
Linux de 64 bits
- Faça o download do proxy de autenticação do Cloud SQL:
curl -o cloud-sql-proxy https://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.21.1/cloud-sql-proxy.linux.amd64
- Torne o proxy do Cloud SQL Auth executável:
chmod +x cloud-sql-proxy
Linux de 32 bits
- Faça o download do proxy de autenticação do Cloud SQL:
curl -o cloud-sql-proxy https://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.21.1/cloud-sql-proxy.linux.386
- Se o comando
curlnão for encontrado, executesudo apt install curle repita o comando de download. - Torne o proxy do Cloud SQL Auth executável:
chmod +x cloud-sql-proxy
macOS de 64 bits
- Faça o download do proxy de autenticação do Cloud SQL:
curl -o cloud-sql-proxy https://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.21.1/cloud-sql-proxy.darwin.amd64
- Torne o proxy do Cloud SQL Auth executável:
chmod +x cloud-sql-proxy
Mac M1
- Faça o download do proxy do Cloud SQL Auth:
curl -o cloud-sql-proxy https://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.21.1/cloud-sql-proxy.darwin.arm64
- Torne o proxy do Cloud SQL Auth executável:
chmod +x cloud-sql-proxy
Windows de 64 bits
Clique com o botão direito do mouse em https://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.21.1/cloud-sql-proxy.x64.exe e selecione Salvar link como para baixar o proxy de autenticação do Cloud SQL. Renomeie o arquivo paracloud-sql-proxy.exe.Windows de 32 bits
Clique com o botão direito do mouse em https://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.21.1/cloud-sql-proxy.x86.exe e selecione Salvar link como para baixar o proxy de autenticação do Cloud SQL. Renomeie o arquivo paracloud-sql-proxy.exe.Imagem Docker do proxy do Cloud SQL Auth
O proxy do Cloud SQL Auth tem imagens de contêiner diferentes, como
distroless,alpineebuster. A imagem de contêiner padrão do proxy do Cloud SQL Auth usadistroless, que não contém shell. Se você precisar de um shell ou de ferramentas relacionadas, faça o download de uma imagem baseada emalpineoubuster. Para mais informações, consulte Imagens de contêiner do proxy do Cloud SQL Auth.Você pode extrair a imagem mais recente para sua máquina local usando o Docker usando o seguinte comando:
docker pull gcr.io/cloud-sql-connectors/cloud-sql-proxy:2.21.1
Outros SOs
Para outros sistemas operacionais não incluídos aqui, compile o proxy do Cloud SQL Auth a partir do código-fonte.Você pode optar por mover o download para um lugar comum, como um local no
PATHou seu diretório principal. Se você optar por fazer isso, ao iniciar o proxy do Cloud SQL Auth posteriormente no tutorial, lembre-se de consultar o local escolhido ao usar os comandoscloud-sql-proxy.- Faça o download do proxy de autenticação do Cloud SQL:
Criar serviços de apoio
Neste tutorial, usamos vários serviços do Google Cloud para fornecer o banco de dados, o armazenamento de mídia e o armazenamento de secrets que oferecem suporte ao projeto Django implantado. Esses serviços são implantados em uma região específica. Para garantir a eficiência entre os serviços, todos eles precisam ser implantados na mesma região. Para mais informações sobre a região mais próxima de você, consulte Produtos disponíveis por região.
Configurar uma instância do Cloud SQL para PostgreSQL
O Django oficialmente oferece suporte a vários bancos de dados relacionais, mas oferece a maior parte do suporte para o PostgreSQL. O PostgreSQL conta com o suporte do Cloud SQL. Portanto, este tutorial escolhe usar esse tipo de banco de dados.
A seção a seguir descreve a criação de uma instância, um banco de dados e um usuário do banco de dados do PostgreSQL para o aplicativo.
Crie a instância do PostgreSQL:
Console
No console Google Cloud , acesse a página Instâncias do Cloud SQL.
Clique em Criar instância.
Clique em Escolher PostgreSQL.
Em Edição do SQL, escolha "Enterprise".
Em Predefinição de edição, escolha "Sandbox".
No campo ID da instância, insira
INSTANCE_NAME.Insira uma senha para o usuário postgres.
Mantenha os valores padrão dos outros campos.
Clique em Criar instância.
A instância leva alguns minutos para ficar pronta para uso.
gcloud
Crie a instância do PostgreSQL:
gcloud sql instances create INSTANCE_NAME \ --project PROJECT_ID \ --database-version POSTGRES_16 \ --tier db-n1-standard-2 \ --region REGION
Substitua:
INSTANCE_NAME: o nome da instância do Cloud SQL.PROJECT_ID: o ID do projeto Google CloudREGION: a regiãoGoogle Cloud
Leva alguns minutos para criar a instância e ela deve estar pronta para uso.
Na instância criada, crie um banco de dados:
Console
- Na página da instância, acesse a guia Bancos de dados.
- Clique em Criar banco de dados.
- Na caixa de diálogo Nome do banco de dados, insira
DATABASE_NAME. - Clique em Criar.
gcloud
Crie o banco de dados na instância recém-criada:
gcloud sql databases create DATABASE_NAME \ --instance INSTANCE_NAMESubstitua
DATABASE_NAMEpor um nome para o banco de dados dentro da instância.
Crie um usuário de banco de dados:
Console
- Na página da instância, acesse a guia Usuários.
- Clique em Adicionar conta de usuário.
- Na caixa de diálogo Escolha como autenticar, em "Autenticação integrada":
- Digite o nome de usuário
DATABASE_USERNAME. - Insira a senha
DATABASE_PASSWORD - Clique em Add.
gcloud
Crie o usuário na instância recém-criada:
gcloud sql users create DATABASE_USERNAME \ --instance INSTANCE_NAME \ --password DATABASE_PASSWORDSubstitua
PASSWORDpor uma senha segura.
Crie uma conta de serviço
Para usar o proxy, é necessário ter uma conta de serviço com privilégios de Editor para sua instância do Cloud SQL. Para mais informações sobre contas de serviço, consulte a visão geral da autenticação doGoogle Cloud .
- No console Google Cloud , acesse a página Contas de serviço.
- Selecione o projeto que contém a instância do Cloud SQL.
- Clique em Criar conta de serviço.
- Preencha o campo Nome da conta de serviço.
- Altere o ID da conta de serviço para um valor exclusivo e facilmente reconhecível, depois clique em Criar e continuar.
-
Clique no campo Selecionar papel e escolha um dos seguintes papéis:
- Cloud SQL > Cliente do Cloud SQL
- Cloud SQL > Editor do Cloud SQL
- Cloud SQL > Administrador do Cloud SQL
- Clique em Concluído para terminar a criação da conta de serviço.
- Clique no menu de ações da sua nova conta de serviço e selecione Gerenciar chaves.
- Clique no menu suspenso Adicionar chave e clique em Criar nova chave.
-
Confirme se o tipo de chave é JSON e clique em Criar.
O arquivo da chave privada é transferido para sua máquina. Você pode movê-lo para outro local. Mantenha-o protegido.
Definir as configurações do banco de dados
Use os seguintes comandos para definir variáveis de ambiente para o acesso ao banco de dados. Essas variáveis são usadas para testes locais.
Linux/MacOS
export DATABASE_NAME=DATABASE_NAME
export DATABASE_USER=DATABASE_USERNAME
export DATABASE_PASSWORD=DATABASE_PASSWORD
Windows
set DATABASE_USER=DATABASE_USERNAME
set DATABASE_PASSWORD=DATABASE_PASSWORD
Definir a configuração do GKE
Esse aplicativo é representado por uma única configuração do Kubernetes chamada
polls. Empolls.yaml, substitua<your-project-id>pelo ID do projetoGoogle Cloud (PROJECT_ID).Execute o comando a seguir e anote o valor de
connectionName:gcloud sql instances describe INSTANCE_NAME --format "value(connectionName)"No arquivo
polls.yaml, substitua<your-cloudsql-connection-string>pelo valorconnectionName.
Executar o app no computador local
Com os serviços de backup configurados, agora você pode executar o aplicativo no seu computador. Essa configuração permite o desenvolvimento local, a criação de um superusuário e a aplicação de migrações de banco de dados.
Em um terminal separado, inicie o proxy de autenticação do Cloud SQL:
Linux/macOS
./cloud-sql-proxy PROJECT_ID:REGION:INSTANCE_NAMEWindows
cloud-sql-proxy.exe PROJECT_ID:REGION:INSTANCE_NAMEEssa etapa estabelece uma conexão do computador local com a instância do Cloud SQL para testes locais. Mantenha o proxy do Cloud SQL Auth em execução durante todo o teste local do aplicativo. A execução desse processo em um terminal separado permite que você continue trabalhando enquanto esse processo é executado.
No terminal original, defina o ID do projeto localmente:
Linux/macOS
export GOOGLE_CLOUD_PROJECT=PROJECT_IDWindows
set GOOGLE_CLOUD_PROJECT=PROJECT_IDExecute as migrações do Django para configurar os modelos e os recursos:
python manage.py makemigrations python manage.py makemigrations polls python manage.py migrate python manage.py collectstaticInicie o servidor da Web do Django:
python manage.py runserver 8080No navegador, acesse http://localhost:8080.
Se você estiver no Cloud Shell, clique no botão Visualização da Web e selecione Visualizar na porta 8080.
A página exibe o seguinte texto: "Hello, world. Você está no índice de pesquisas". O servidor da Web do Django em execução no seu computador exibe as páginas do aplicativo de amostra.
Pressione
Ctrl/Cmd+Cpara interromper o servidor da Web local.
Como usar o console de administração do Django
Para fazer login no Admin Console do Django, você precisa criar um superusuário. Como você tem uma conexão acessível localmente com o banco de dados, é possível executar comandos de gerenciamento:
Crie um superusuário. Você será solicitado a inserir um nome de usuário, e-mail e senha.
python manage.py createsuperuserInicie um servidor da Web local:
python manage.py runserverNo navegador, acesse http://localhost:8000/admin.
Faça login no site de administração usando o nome de usuário e a senha que você usou ao executar
createsuperuser.
Implantar o app no GKE
Quando o app é implantado no Google Cloud, ele usa o servidor Gunicorn. Como o conteúdo estático não é transmitido pelo Gunicorn, o Cloud Storage é usado para disponibilizar esse tipo de conteúdo.
Coletar e fazer upload de recursos estáticos
Crie um bucket do Cloud Storage e torne-o acessível para leitura pública.
gcloud storage buckets create gs://PROJECT_ID_MEDIA_BUCKET gcloud storage buckets add-iam-policy-binding gs://PROJECT_ID_MEDIA_BUCKET --member=allUsers role=roles/storage.legacyObjectReaderReúna todo o conteúdo estático em uma pasta.
python manage.py collectstaticFaça o upload de todo conteúdo estático no Cloud Storage:
gcloud storage rsync ./static gs://PROJECT_ID_MEDIA_BUCKET/static --recursiveEm
mysite/settings.py, defina o valor deSTATIC_URLpara o seguinte URL, substituindo[YOUR_GCS_BUCKET]pelo nome do bucket:http://storage.googleapis.com/PROJECT_ID_MEDIA_BUCKET/static/
Configurar o GKE
Para inicializar o GKE, acesse a página Clusters.
Quando você usa o GKE pela primeira vez em um projeto, é necessário aguardar até que o "Kubernetes Engine está se preparando. Isso pode demorar alguns minutos" desapareça.
-
gcloud container clusters create polls \ --scopes "https://www.googleapis.com/auth/userinfo.email","cloud-platform" \ --num-nodes 4 --zone "us-central1-a"Se uma mensagem de erro semelhante a
Project is not fully initialized with the default service accountsaparecer, talvez seja necessário inicializar o Google Kubernetes Engine.Inicializar o GKE
Se você recebeu um erro, acesse o console do Google Cloud para inicializar o GKE no seu projeto.
Aguarde até que a mensagem "O Kubernetes Engine está se preparando. Isso pode levar alguns minutos" desapareça.
Depois que o cluster for criado, use a ferramenta de linha de comando
kubectl, integrada à CLI gcloud, para interagir com o cluster do GKE. Comogcloudekubectlsão ferramentas separadas, verifique sekubectlestá configurado para interagir com o cluster certo.gcloud container clusters get-credentials polls --zone "us-central1-a"
Configurar o Cloud SQL
Você precisa de várias chaves secretas para permitir que o aplicativo do GKE se conecte à instância do Cloud SQL. Uma delas é necessária para acesso de nível de instância (conexão), enquanto outras duas são necessárias para acesso a banco de dados. Para saber mais informações sobre os dois níveis de controle de acesso, consulte Controle de acesso à instância.
Para criar o secret do acesso no nível da instância, forneça o local,
PATH_TO_CREDENTIAL_FILE, da chave da conta de serviço JSON que você baixou ao criar essa conta. Consulte Como criar uma conta de serviço:kubectl create secret generic cloudsql-oauth-credentials \ --from-file=credentials.json=PATH_TO_CREDENTIAL_FILEPara criar os secrets para acesso ao banco de dados, use o banco de dados SQL, o nome de usuário e a senha definidos ao criar serviços de apoio. Consulte Configurar uma instância do Cloud SQL para PostgreSQL:
kubectl create secret generic cloudsql \ --from-literal=database=DATABASE_NAME \ --from-literal=username=DATABASE_USERNAME \ --from-literal=password=DATABASE_PASSWORD
Recupere a imagem pública do Docker para o proxy do Cloud SQL.
docker pull b.gcr.io/cloudsql-docker/gce-proxyCrie uma imagem do Docker, substituindo
<your-project-id>pelo ID do projeto.docker build -t gcr.io/PROJECT_ID/polls .Configure o Docker para usar
gcloudcomo um auxiliar de credenciais, de modo que você possa enviar a imagem para o Container Registry:gcloud auth configure-dockerEnvie a imagem do Docker. Substitua
<your-project-id>pela ID do seu projeto.docker push gcr.io/PROJECT_ID/pollsCrie o recurso do GKE:
kubectl create -f polls.yaml
Implantar o app no GKE
Depois que os recursos forem criados, haverá três pods polls no cluster.
Verifique o status dos seus pods.
kubectl get pods
Aguarde alguns minutos para que os status do pod sejam exibidos como Running. Se os pods
não estiverem prontos ou se houver reinicializações, você poderá receber os registros de um pod específico
para descobrir o problema. [YOUR-POD-ID] é uma parte da saída retornada pelo
comando kubectl get pods anterior.
kubectl logs [YOUR_POD_ID]
Veja o app em execução em Google Cloud
Depois que os pods estiverem prontos, é possível saber o endereço IP externo do balanceador de carga:
kubectl get services polls
Observe o endereço EXTERNAL-IP e acesse http://[EXTERNAL-IP] no navegador para ver a página de destino das enquetes
do Django e acessar o Admin Console.
entenda o código
Exemplo de aplicativo
O app de exemplo do Django foi criado com ferramentas padrão do Django. Os comandos a seguir criam o projeto e o aplicativo de pesquisa:
django-admin startproject mysite
python manage.py startapp polls
As visualizações básicas, os modelos e as configurações de rota foram copiados de Como criar seu primeiro aplicativo Django (Parte 1 e Parte 2).
Configuração do banco de dados
O settings.py contém a configuração para seu banco de dados SQL:
Configurações de pod do Kubernetes
O arquivo polls.yaml especifica dois recursos do Kubernetes. O primeiro é o
Serviço,
que define um nome consistente e um endereço IP interno para o app da Web em Django.
O segundo é um balanceador de carga HTTP
com um endereço IP externo público.
Um nome de rede e um endereço IP são oferecidos pelo serviço e
o código do aplicativo por trás do serviço são executados pelos pods do GKE.
O arquivo polls.yaml especifica uma
implantação
que fornece atualizações declarativas para pods do GKE. O tráfego
para a implantação é direcionado pelo serviço por meio da correspondência entre o seletor do serviço e o
rótulo da implantação. Nesse caso, o seletor polls corresponde ao rótulo
polls.
Limpeza
Para evitar cobranças na sua conta do Google Cloud pelos recursos usados no tutorial, exclua o projeto que os contém ou mantenha o projeto e exclua os recursos individuais.
Excluir o projeto
- No console Google Cloud , acesse a página Gerenciar recursos.
- Na lista de projetos, selecione o projeto que você quer excluir e clique em Excluir .
- Na caixa de diálogo, digite o ID do projeto e clique em Encerrar para excluí-lo.
Excluir recursos individuais
Se você não quiser excluir o projeto, exclua os recursos individuais.
Exclua o cluster do Google Kubernetes Engine:
gcloud container clusters delete pollsExclua a imagem do Docker que você enviou para o Container Registry:
gcloud container images delete gcr.io/PROJECT_ID/pollsExclua a instância do Cloud SQL:
gcloud sql instances delete INSTANCE_NAME
A seguir
- Saiba como configurar o PostgreSQL para produção
- Saiba mais sobre o Django no Google Cloud.