Les applications Django qui s'exécutent sur Google Kubernetes Engine (GKE) sont capables de s'adapter, car elles s'exécutent sur la même infrastructure que tous les produits Google.
Dans ce tutoriel, nous partons du principe que vous connaissez bien le développement Web avec Django. Si vous débutez dans le développement avec Django, nous vous recommandons d'écrire votre première application Django avant de continuer. Dans ce tutoriel, les modèles de l'application représentent des sondages contenant des questions. Vous pouvez interagir avec ces modèles à l'aide de la console d'administration Django.
Ce tutoriel nécessite Python 2.7, 3.4 ou une version ultérieure. Vous devez également avoir installé Docker.
Avant de commencer
- Connectez-vous à votre compte Google.
Si vous n'en possédez pas déjà un, vous devez en créer un.
-
Dans Google Cloud Console, sur la page de sélection du projet, sélectionnez ou créez un projet Google Cloud.
-
Assurez-vous que la facturation est activée pour votre projet Cloud. Découvrez comment vérifier que la facturation est activée pour votre projet.
- Activer les API Cloud SQL, and Compute Engine.
- Installez et initialisez le SDK Cloud.
Télécharger et exécuter l'application
Une fois les conditions préalables remplies, téléchargez et déployez l'exemple d'application Django. Les sections suivantes vous guident dans la configuration, l'exécution et le déploiement de cette application.
Cloner l'application Django
Le code de l'exemple d'application Django se trouve dans le dépôt GoogleCloudPlatform/python-docs-samples
sur GitHub.
Vous pouvez soit télécharger l'exemple sous forme de fichier ZIP et l'extraire, soit cloner le dépôt sur votre ordinateur local à l'aide de la commande suivante :
git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
Accédez au répertoire qui contient l'exemple de code :
cd python-docs-samples/kubernetes_engine/django_tutorial
Configurer votre environnement local
Une fois déployée, votre application communique avec votre instance Cloud SQL via le proxy Cloud SQL intégré à l'environnement App Engine. Notez toutefois que pour tester votre application en local, vous devez installer et utiliser une copie locale du proxy dans votre environnement de développement.
Apprenez-en plus sur le proxy Cloud SQL.
Pour effectuer des tâches administratives de base sur votre instance Cloud SQL, vous pouvez utiliser le client PostgreSQL.
Installer le proxy Cloud SQL
Téléchargez et installez le proxy Cloud SQL. Le proxy Cloud SQL se connecte à votre instance Cloud SQL lorsqu'il est exécuté en local.
Linux 64 bits
- Téléchargez le proxy :
wget https://dl.google.com/cloudsql/cloud_sql_proxy.linux.amd64 -O cloud_sql_proxy
- Rendez le proxy exécutable :
chmod +x cloud_sql_proxy
Linux 32 bits
- Téléchargez le proxy :
wget https://dl.google.com/cloudsql/cloud_sql_proxy.linux.386 -O cloud_sql_proxy
- Rendez le proxy exécutable :
chmod +x cloud_sql_proxy
macOS 64 bits
- Téléchargez le proxy :
curl -o cloud_sql_proxy https://dl.google.com/cloudsql/cloud_sql_proxy.darwin.amd64
- Rendez le proxy exécutable :
chmod +x cloud_sql_proxy
macOS 32 bits
- Téléchargez le proxy :
curl -o cloud_sql_proxy https://dl.google.com/cloudsql/cloud_sql_proxy.darwin.386
- Rendez le proxy exécutable :
chmod +x cloud_sql_proxy
Windows 64 bits
Pour télécharger le proxy, effectuez un clic droit sur https://dl.google.com/cloudsql/cloud_sql_proxy_x64.exe, puis sélectionnez Enregistrer le lien sous. Renommez le fichier encloud_sql_proxy.exe
.
Windows 32 bits
Pour télécharger le proxy, effectuez un clic droit sur https://dl.google.com/cloudsql/cloud_sql_proxy_x86.exe, puis sélectionnez Enregistrer le lien sous. Renommez le fichier encloud_sql_proxy.exe
.
Image du proxy Docker
Pour plus de commodité, l'équipe Cloud SQL gère plusieurs images de conteneur contenant le proxy Cloud SQL destiné à nos clients. Pour plus d'informations sur ces images, consultez le dépôt proxy Cloud SQL sur GitHub. Vous pouvez extraire la dernière image sur votre ordinateur local à l'aide de Docker à l'aide de la commande suivante:docker pull gcr.io/cloudsql-docker/gce-proxy:1.19.1
Autre système d'exploitation
Pour les autres systèmes d'exploitation non inclus ici, vous pouvez compiler le proxy à partir de la source.Créer une instance Cloud SQL
- <a{: class="internal" l10n-attrs-original-order="href,track-type,track-name,track-metadata-position,track-metadata-end-goal,class,target" l10n-encrypted-
href="lsL4NbV5FI0DRuRANJcTZKJysOQGKX761P3ItELRG1PjHEtGnUIGGfDSUdzN6k/z" target="_blank" track-metadata-end-goal="createInstance" track-metadata-position="body" track-internal="body" track-internal="body" track"internal > Créer une instance Cloud SQL pour PostgreSQL
Nommez-la
</a{:>polls-instance
ou donnez-lui un nom similaire. La préparation de l'instance peut prendre quelques minutes. Lorsqu'elle est prête, elle est visible dans la liste des instances. - Utilisez à présent le SDK Cloud pour exécuter la commande suivante, en remplaçant
[YOUR_INSTANCE_NAME]
par le nom de votre instance Cloud SQL.gcloud sql instances describe [YOUR_INSTANCE_NAME]
Dans le résultat, notez la valeur indiquée pour
[CONNECTION_NAME]
.La valeur de
[CONNECTION_NAME]
est au format[PROJECT_NAME]:[REGION_NAME]:[INSTANCE_NAME]
.
Initialiser votre instance Cloud SQL
- Démarrez le proxy Cloud SQL en utilisant la valeur
[CONNECTION_NAME]
de l'étape précédente :Linux/macOS
./cloud_sql_proxy -instances="[YOUR_INSTANCE_CONNECTION_NAME]"=tcp:5432
Windows
cloud_sql_proxy.exe -instances="[YOUR_INSTANCE_CONNECTION_NAME]"=tcp:5432
Remplacez
[YOUR_INSTANCE_CONNECTION_NAME]
par la valeur[CONNECTION_NAME]
que vous avez enregistrée à l'étape précédente.Cette étape permet d'établir une connexion depuis votre ordinateur local vers votre instance Cloud SQL à des fins de test. N'arrêtez pas le proxy Cloud SQL lors du test local de votre application.
- Créez un utilisateur et une base de données Cloud SQL :
Cloud Console
-
Créez une base de données à l'aide de Cloud Console dans l'instance Cloud SQL
polls-instance
. Vous pouvez par exemple utiliser le nompolls
. - Créez un utilisateur à l'aide de Cloud Console dans l'instance Cloud SQL
polls-instance
.
Client Postgres
-
Dans un onglet de ligne de commande distinct, installez le client Postgres.
sudo apt-get install postgresql
-
Utilisez le client Postgres ou un programme similaire pour vous connecter à votre instance. Lorsque vous y êtes invité, saisissez le mot de passe racine que vous avez configuré.
psql --host 127.0.0.1 --user postgres --password
-
Créez les bases de données, les utilisateurs et les autorisations d'accès nécessaires dans votre base de données Cloud SQL à l'aide des commandes suivantes. Remplacez
[POSTGRES_USER]
et[POSTGRES_PASSWORD]
par le nom d'utilisateur et le mot de passe que vous souhaitez utiliser.CREATE DATABASE polls; CREATE USER [POSTGRES_USER] WITH PASSWORD '[POSTGRES_PASSWORD]'; GRANT ALL PRIVILEGES ON DATABASE polls TO [POSTGRES_USER]; GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO [POSTGRES_USER];
-
Créez une base de données à l'aide de Cloud Console dans l'instance Cloud SQL
Créer un compte de service
Le proxy requiert un compte de service doté des droits Éditeur pour l'instance Cloud SQL. Pour en savoir plus sur les comptes de service, consultez la présentation de l'authentification sur Google Cloud.
- Accédez à la page Comptes de service de Google Cloud Console.
- Sélectionnez le projet contenant l'instance Cloud SQL.
- Cliquez sur Créer un compte de service.
- Dans la boîte de dialogue Créer un compte de service, indiquez un nom descriptif pour le compte de service.
- Pour Rôle, sélectionnez l'un des rôles suivants :
- Cloud SQL > Client Cloud SQL
- Cloud SQL > Éditeur Cloud SQL
- Cloud SQL > Administrateur Cloud SQL
- Remplacez l'ID du compte de service par une valeur unique et facilement reconnaissable.
-
Cliquez sur Indiquer une nouvelle clé privée et vérifiez que le type de clé est
JSON
. - Cliquez sur Créer.
Le fichier de clé privée est téléchargé sur votre machine. Vous pouvez le changer d'emplacement. Conservez le fichier de clé à un endroit sécurisé.
Configurer les paramètres de base de données
Utilisez les commandes suivantes pour définir les variables d'environnement pour l'accès à la base de données. Ces variables d'environnement permettent d'effectuer des tests en local.
Linux/macOS
export DATABASE_USER=<your-database-user> export DATABASE_PASSWORD=<your-database-password>
Windows
set DATABASE_USER=<your-database-user> set DATABASE_PASSWORD=<your-database-password>
Configurer l'environnement GKE
Cette application est représentée dans une configuration Kubernetes unique, appelée
polls
. Danspolls.yaml
, remplacez<your-project-id>
par l'ID de votre projet Google Cloud.Exécutez la commande suivante et copiez la valeur de
connectionName
:gcloud beta sql instances describe [YOUR_INSTANCE_NAME]
Dans le fichier
polls.yaml
, remplacez<your-cloudsql-connection-string>
par la valeur deconnectionName
que vous venez de copier.
Exécuter l'application sur votre ordinateur local
Pour exécuter l'application Django sur votre ordinateur local, configurez un environnement de développement Python incluant Python, pip et virtualenv.
Créez un environnement Python isolé et installez des dépendances. Si votre installation Python 3 porte un nom différent, utilisez-le dans la première commande :
virtualenv env source env/bin/activate pip install -r requirements.txt
Exécutez les migrations Django pour configurer vos modèles :
python manage.py makemigrations python manage.py makemigrations polls python manage.py migrate
Démarrez un serveur Web local :
python manage.py runserver
Dans votre navigateur, accédez à http://localhost:8000.
Une page contenant le texte suivant s'affiche : "Hello, world. You're at the polls index." Le serveur Web Django qui s'exécute sur votre ordinateur diffuse les pages de l'exemple d'application.
Appuyez sur
Control+C
pour arrêter le serveur Web local.
Utiliser la console d'administration Django
Créez un super-utilisateur en spécifiant son nom d'utilisateur et son mot de passe.
python manage.py createsuperuser
Exécutez le programme principal :
python manage.py runserver
Dans votre navigateur, accédez à http://localhost:8000/admin.
Connectez-vous au site d'administration à l'aide du nom d'utilisateur et du mot de passe que vous avez spécifiés dans la commande
createsuperuser
.
Déployer l'application sur GKE
Lorsque l'application est déployée sur Google Cloud, elle utilise le serveur Gunicorn. Comme ce serveur ne peut pas diffuser de contenu statique, l'app doit utiliser Cloud Storage pour diffuser le contenu statique.
Collecter et importer les ressources statiques
Créez un bucket Cloud Storage et rendez-le lisible en mode public. Remplacez
[YOUR_GCS_BUCKET]
par le nom de bucket de votre choix. Par exemple, vous pouvez utiliser votre ID de projet :gsutil mb gs://[YOUR_GCS_BUCKET] gsutil defacl set public-read gs://[YOUR_GCS_BUCKET]
Rassemblez tout le contenu statique localement dans un seul dossier :
python manage.py collectstatic
Importez le contenu statique dans Cloud Storage :
gsutil -m rsync -r ./static gs://[YOUR_GCS_BUCKET]/static
Dans le fichier
mysite/settings.py
, renseignez la valeur deSTATIC_URL
avec l'URL suivante, en prenant soin de remplacer[YOUR_GCS_BUCKET]
par le nom de votre bucket :http://storage.googleapis.com/[YOUR_GCS_BUCKET]/static/
Configurer GKE
Pour initialiser GKE, accédez à la page Clusters.
Lorsque vous utilisez GKE pour la première fois dans un projet, vous devez attendre que le message suivant disparaisse : "Kubernetes Engine is getting ready. This may take a minute or more" (Kubernetes Engine est en cours d'activation. Cette opération peut prendre une minute ou plus).
Créer un cluster GKE à l'aide de la commande suivante :
gcloud container clusters create polls \ --scopes "https://www.googleapis.com/auth/userinfo.email","cloud-platform" \ --num-nodes 4 --zone "us-central1-a"
Avez-vous obtenu l'erreur : Project [PROJECT_ID] is not fully initialized with the default service accounts (Le projet [PROJECT_ID] n'est pas complètement initialisé avec les comptes de service par défaut) ?
Initialiser GKE
Si vous avez reçu un message d'erreur, accédez à Google Cloud Console pour initialiser GKE dans votre projet.
Attendez la disparition du message "Kubernetes Engine is getting ready. This may take a minute or more" (Kubernetes Engine est en cours d'activation. Cette opération peut prendre une minute ou plus).
Une fois votre cluster GKE créé, utilisez l'outil de ligne de commande
kubectl
, intégré à l'outilgcloud
, pour interagir avec le cluster.gcloud
etkubectl
étant des outils distincts, assurez-vous quekubectl
est configuré pour interagir avec le cluster approprié.gcloud container clusters get-credentials polls --zone "us-central1-a"
Configurer Cloud SQL
Vous avez besoin de plusieurs secrets pour permettre à l'application GKE de se connecter à l'instance Cloud SQL. L'un est requis pour l'accès au niveau de l'instance (connexion), tandis que les deux autres sont nécessaires pour l'accès à la base de données. Pour plus d'informations sur les deux niveaux de contrôle d'accès, consultez la page Contrôle d'accès aux instances.
Pour créer le secret permettant d'accéder à l'instance, utilisez la commande ci-dessous en indiquant l'emplacement (
[PATH_TO_CREDENTIAL_FILE]
) du fichiers JSON contenant la clé de compte de service. Vous avez dû télécharger ce fichier lors de la création du compte de service (voir la section Créer un compte de service) :kubectl create secret generic cloudsql-oauth-credentials --from-file=credentials.json=[PATH_TO_CREDENTIAL_FILE]
Pour créer les secrets permettant d'accéder à la base de données, utilisez la commande suivante en reprenant les paramètres SQL
[DATABASE_USERNAME]
et[PASSWORD]
définis à l'étape 2 de la section Initialiser votre instance Cloud SQL :kubectl create secret generic cloudsql --from-literal=username=[DATABASE_USERNAME] --from-literal=password=[PASSWORD]
Récupérez l'image Docker publique du proxy Cloud SQL.
docker pull b.gcr.io/cloudsql-docker/gce-proxy
Créez une image Docker en remplaçant
<your-project-id>
par l'ID de votre projet.docker build -t gcr.io/<your-project-id>/polls .
Configurez Docker pour utiliser
gcloud
en tant qu'assistant d'identification, afin de pouvoir transférer l'image vers Container Registry :gcloud auth configure-docker
Envoyez l'image Docker. Remplacez
<your-project-id>
par l'ID du projet.docker push gcr.io/<your-project-id>/polls
Créez la ressource GKE :
kubectl create -f polls.yaml
Déployer l'application sur GKE
Une fois les ressources créées, le cluster contient trois pods polls
.
Vérifiez l'état des pods :
kubectl get pods
Attendez quelques minutes que les pods affichent l'état Running
. Si les pods ne sont pas prêts ou nécessitent un redémarrage, vous pouvez obtenir les journaux d'un pod spécifique pour résoudre le problème. [YOUR-POD-ID]
correspond à une partie du résultat renvoyé par la commande kubectl get pods
précédente.
kubectl logs [YOUR_POD_ID]
Afficher l'application exécutée dans Google Cloud
Une fois les modules prêts, vous pouvez obtenir l'adresse IP publique de l'équilibreur de charge :
kubectl get services polls
Accédez à l'adresse EXTERNAL-IP
avec le navigateur. La page de destination de base de Django s'affiche et vous pouvez accéder à la console d'administration.
Comprendre le code
L'exemple d'application Django a été créé à l'aide des outils Django standards. Ces commandes créent le projet et l'application "polls" :
django-admin startproject mysite
python manage.py startapp polls
Le fichier settings.py
contient la configuration de la base de données SQL :
Le fichier polls.yaml
spécifie deux ressources Kubernetes. La première est le service, qui définit un nom cohérent et une adresse IP privée pour l'application Web Django. La seconde est un équilibreur de charge HTTP avec une adresse IP externe publique.
Le service fournit un nom de réseau et une adresse IP. Derrière cette façade, les pods GKE exécutent le code de l'application.
Le fichier polls.yaml
spécifie un déploiement qui contient les déclarations relatives aux pods GKE. Le service achemine le trafic vers le déploiement en mettant en correspondance le sélecteur du service et le libellé du déploiement. Dans le cas présent, il y a correspondance entre le sélecteur polls
et le libellé polls
.
Nettoyer
Supprimer le projet
Le moyen le plus simple d'empêcher la facturation est de supprimer le projet que vous avez créé pour ce tutoriel.
Pour supprimer le projet :
- Dans Cloud Console, accédez à la page Gérer les ressources.
- Dans la liste des projets, sélectionnez le projet que vous souhaitez supprimer, puis cliquez sur Supprimer.
- Dans la boîte de dialogue, saisissez l'ID du projet, puis cliquez sur Arrêter pour supprimer le projet.
Supprimer les ressources individuelles
Si vous ne souhaitez pas supprimer le projet, supprimez les ressources individuelles.
Supprimez le cluster Google Kubernetes Engine :
gcloud container clusters delete polls
Supprimez l'image Docker que vous avez transférée vers Container Registry :
gcloud container images delete gcr.io/${PROJECT_ID}/polls
Supprimez l'instance Cloud SQL :
gcloud sql instances delete $INSTANCE_NAME