⚠️ Traduction non officielle - Cette documentation est une traduction communautaire non officielle de Docker.

Tester votre déploiement Python

Prérequis

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

  1. 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
    
  2. 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 service service-entrypoint, acceptant le trafic sur le port 30001/TCP et le ClusterIP interne postgres avec le port 5432 ouvert pour accepter les connexions de votre application python.

  3. 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!!!
    
  4. 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 :