Tester votre déploiement Python
Prérequis
- Terminez toutes les sections précédentes de ce guide, en commençant par Utiliser des conteneurs pour le développement Python.
- Activez Kubernetes dans Docker Desktop.
Aperçu
Dans cette section, vous apprendrez à utiliser Docker Desktop pour déployer votre application dans un environnement Kubernetes complet sur votre machine de développement. Cela vous permet de tester et de déboguer vos charges de travail sur Kubernetes localement avant de les déployer.
Créer un fichier YAML Kubernetes
Dans votre répertoire python-docker-dev-example
, créez un fichier nommé docker-postgres-kubernetes.yaml
. Ouvrez le fichier dans un IDE ou un éditeur de texte et ajoutez
le contenu suivant.
apiVersion: apps/v1
kind: Deployment
metadata:
name: postgres
namespace: default
spec:
replicas: 1
selector:
matchLabels:
app: postgres
template:
metadata:
labels:
app: postgres
spec:
containers:
- name: postgres
image: postgres
ports:
- containerPort: 5432
env:
- name: POSTGRES_DB
value: example
- name: POSTGRES_USER
value: postgres
- name: POSTGRES_PASSWORD
valueFrom:
secretKeyRef:
name: postgres-secret
key: POSTGRES_PASSWORD
volumeMounts:
- name: postgres-data
mountPath: /var/lib/postgresql/data
volumes:
- name: postgres-data
persistentVolumeClaim:
claimName: postgres-pvc
---
apiVersion: v1
kind: Service
metadata:
name: postgres
namespace: default
spec:
ports:
- port: 5432
selector:
app: postgres
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: postgres-pvc
namespace: default
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
---
apiVersion: v1
kind: Secret
metadata:
name: postgres-secret
namespace: default
type: Opaque
data:
POSTGRES_PASSWORD: cG9zdGdyZXNfcGFzc3dvcmQ= # Mot de passe encodé en Base64 (par exemple, 'postgres_password')
Dans votre répertoire python-docker-dev-example
, créez un fichier nommé
docker-python-kubernetes.yaml
. Remplacez DOCKER_USERNAME/REPO_NAME
par votre
nom d'utilisateur Docker et le nom du dépôt que vous avez créé dans Configurer CI/CD pour
votre application Python.
apiVersion: apps/v1
kind: Deployment
metadata:
name: docker-python-demo
namespace: default
spec:
replicas: 1
selector:
matchLabels:
service: fastapi
template:
metadata:
labels:
service: fastapi
spec:
containers:
- name: fastapi-service
image: DOCKER_USERNAME/REPO_NAME
imagePullPolicy: Always
env:
- name: POSTGRES_PASSWORD
valueFrom:
secretKeyRef:
name: postgres-secret
key: POSTGRES_PASSWORD
- name: POSTGRES_USER
value: postgres
- name: POSTGRES_DB
value: example
- name: POSTGRES_SERVER
value: postgres
- name: POSTGRES_PORT
value: "5432"
ports:
- containerPort: 8001
---
apiVersion: v1
kind: Service
metadata:
name: service-entrypoint
namespace: default
spec:
type: NodePort
selector:
service: fastapi
ports:
- port: 8001
targetPort: 8001
nodePort: 30001
Dans ces fichiers YAML Kubernetes, il y a divers objets, séparés par ---
:
- Un Déploiement, décrivant un groupe évolutif de pods identiques. Dans ce cas,
vous n'obtiendrez qu'une seule réplique, ou copie de votre pod. Ce pod, qui est
décrit sous
template
, ne contient qu'un seul conteneur. Le conteneur est créé à partir de l'image construite par GitHub Actions dans Configurer CI/CD pour votre application Python. - Un Service, qui définira comment les ports sont mappés dans les conteneurs.
- Un PersistentVolumeClaim, pour définir un stockage qui sera persistant à travers les redémarrages pour la base de données.
- Un Secret, gardant le mot de passe de la base de données comme exemple en utilisant la ressource kubernetes secret.
- Un service NodePort, qui acheminera le trafic du port 30001 de votre hôte vers le port 8001 à l'intérieur des pods vers lesquels il achemine, vous permettant d'atteindre votre application depuis le réseau.
Pour en savoir plus sur les objets Kubernetes, consultez la documentation Kubernetes.
Note
- Le service
NodePort
est bon pour des fins de développement/test. Pour la production, vous devriez implémenter un contrôleur d'entrée.
Déployer et vérifier votre application
-
Dans un terminal, naviguez vers
python-docker-dev-example
et déployez votre base de données sur Kubernetes.$ kubectl apply -f docker-postgres-kubernetes.yaml
Vous devriez voir une sortie qui ressemble à ce qui suit, indiquant que vos objets Kubernetes ont été créés avec succès.
deployment.apps/postgres created service/postgres created persistentvolumeclaim/postgres-pvc created secret/postgres-secret created
Maintenant, déployez votre application python.
kubectl apply -f docker-python-kubernetes.yaml
Vous devriez voir une sortie qui ressemble à ce qui suit, indiquant que vos objets Kubernetes ont été créés avec succès.
deployment.apps/docker-python-demo created service/service-entrypoint created
-
Assurez-vous que tout a fonctionné en listant vos déploiements.
$ kubectl get deployments
Votre déploiement devrait être listé comme suit :
NAME READY UP-TO-DATE AVAILABLE AGE docker-python-demo 1/1 1 1 48s postgres 1/1 1 1 2m39s
Cela indique que tous les pods que vous avez demandés dans votre YAML sont en cours d'exécution. Faites la même vérification pour vos services.
$ kubectl get services
Vous devriez obtenir une sortie comme celle-ci.
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.43.0.1 <none> 443/TCP 13h postgres ClusterIP 10.43.209.25 <none> 5432/TCP 3m10s service-entrypoint NodePort 10.43.67.120 <none> 8001:30001/TCP 79s
En plus du service
kubernetes
par défaut, vous pouvez voir votre serviceservice-entrypoint
, acceptant le trafic sur le port 30001/TCP et leClusterIP
internepostgres
avec le port5432
ouvert pour accepter les connexions de votre application python. -
Dans un terminal, faites un curl sur le service. Notez qu'aucune base de données n'a été déployée dans cet exemple.
$ curl http://localhost:30001/ Hello, Docker!!!
-
Exécutez les commandes suivantes pour démanteler votre application.
$ kubectl delete -f docker-python-kubernetes.yaml $ kubectl delete -f docker-postgres-kubernetes.yaml
Résumé
Dans cette section, vous avez appris à utiliser Docker Desktop pour déployer votre application dans un environnement Kubernetes complet sur votre machine de développement.
Informations connexes :