---
title: "Déployer un conteneur"
description: "Déployer une image de conteneur sur Kontainers via Rancher ou en YAML : Deployments, StatefulSets et les spécificités plateforme à connaître."
source_url:
  html: https://docs.blackswift.cloud/deployer/deployer-un-conteneur/
  md: https://docs.blackswift.cloud/deployer/deployer-un-conteneur.md
---

# Déployer un conteneur

> Déployer une image de conteneur sur Kontainers via Rancher ou en YAML : Deployments, StatefulSets et les spécificités plateforme à connaître.

Le manifest complet, prêt à copier :

```yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-demo
spec:
  selector:
    matchLabels:
      app: nginx-demo
  template:
    metadata:
      labels:
        app: nginx-demo
    spec:
      containers:
        - name: web
          image: nginx:alpine
          resources:
            requests:
              cpu: 100m
              memory: 200Mi
```

<Aside type="note" title="💡 Débutant Kubernetes ?">
Un **Pod** est l'unité d'exécution minimale sur Kubernetes ; il regroupe un ou
plusieurs conteneurs. Dans la pratique, on crée rarement un Pod « nu » : on préfère
un **Deployment**, qui crée les Pods, maintient le nombre désiré de répliques et
gère les mises à jour progressives (*roll-outs*) et retours arrière (*roll-backs*).
Pour approfondir : [Pods](https://kubernetes.io/docs/concepts/workloads/pods/) et
[Deployments](https://kubernetes.io/docs/concepts/workloads/controllers/deployment/).
</Aside>

## Déployer `nginx:alpine`

<Tabs>
<TabItem label="Via l'interface graphique de Rancher">

<Steps>

1. Ouvrez le menu **Workloads › Deployments** dans votre namespace.

    *(capture d'écran : Créer un Deployment dans Rancher)*

2. Cliquez sur **Create** puis remplissez :

   * **Name** : `nginx-demo`
   * **Container name** : `web`
   * **Container Image** : `nginx:alpine`

    *(capture d'écran : Créer un Deployment dans Rancher)*

3. Validez avec **Create**. Votre workload apparaît en vert quand le Pod est
   prêt.

   *(capture d'écran : Créer un Deployment dans Rancher)*

</Steps>

</TabItem>
<TabItem label="Via un manifest YAML">

<Steps>

1. Créez un fichier `nginx-deployment.yaml` avec le manifest en tête de page.

2. Appliquez-le dans votre namespace :

    ```bash
    kubectl apply -f nginx-deployment.yaml -n <votre-namespace>
    ```

3. Vérifiez :

    ```bash
    kubectl get pods -n <votre-namespace>
    ```

</Steps>

</TabItem>
</Tabs>

## Les spécificités Kontainers à connaître

- **`imagePullPolicy` est forcé à `Always`** : l'image est re-vérifiée auprès du
  registre à chaque démarrage de pod. Conséquence importante : si votre registre
  est indisponible (ou un token expiré), vos pods ne peuvent plus **re**démarrer.
- **Des requests par défaut sont injectées** si vous n'en déclarez pas
  (0,1 vCPU / 200 Mi) — et elles sont [facturées](https://docs.blackswift.cloud/reference/facturation.md).
  Déclarez toujours vos `resources`, comme dans l'exemple en tête de page.
- **La limite mémoire est toujours égale à la request** : au-delà, le conteneur
  est OOMKilled. Dimensionnez la request sur votre pic réel.
- **Quota : 20 pods par namespace** (augmentable via
  [ticket](https://docs.blackswift.cloud/depanner/contacter-le-support.md)).

Le détail de ces comportements :
[Mutations automatiques et politiques](https://docs.blackswift.cloud/reference/mutations-et-politiques.md).

## Applications avec état : StatefulSets

Pour les applications qui exigent une identité stable par réplique (bases de
données, files de messages…), Kubernetes propose les
[StatefulSets](https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/)
— disponibles sur Kontainers (quota : 20 par namespace). Chaque réplique y reçoit
un nom stable (`db-0`, `db-1`…) et son propre
[volume persistant](https://docs.blackswift.cloud/deployer/stockage-persistant.md).

Pour PostgreSQL, préférez l'opérateur managé — voir
[Permissions et RBAC](https://docs.blackswift.cloud/reference/permissions-et-rbac.md#postgresql-managé-cnpg)
*(guide dédié à venir)*.

## Étapes suivantes

- [Configurer votre application](https://docs.blackswift.cloud/deployer/configmaps-et-secrets.md) — variables
  d'environnement et secrets ;
- [Exposer votre application](https://docs.blackswift.cloud/deployer/exposer-en-https.md) ;
- [Mon pod est en erreur](https://docs.blackswift.cloud/depanner/pod-en-erreur.md) — si le déploiement se passe mal.
