Tous les produits
Search
Centre de documentation

Container Service for Kubernetes:Create a stateless workload (Deployment)

Dernière mise à jour :Aug 11, 2026

Un Deployment gère un ensemble de pods identiques et garantit qu'un nombre spécifié reste en cours d'exécution en permanence. Il s'agit du type de charge de travail standard pour les applications sans état dans Kubernetes, c'est-à-dire des services qui ne dépendent pas d'un état local persistant, tels que les serveurs web, les backends d'API et les processeurs par lots.

Cette rubrique explique comment créer un Deployment dans un cluster ACK à l'aide de la console ou de kubectl.

Prérequis

Avant de commencer, assurez-vous de disposer des éléments suivants :

  • Un cluster ACK. Consultez la section Charges de travail pour comprendre les concepts et les considérations liés aux charges de travail.

  • Un accès Internet pour le cluster ou ses nœuds, car les exemples de démarrage rapide extraient une image publique :

Créer un déploiement

Créer un Deployment à l'aide de la console

Les étapes ci-dessous décrivent le moyen le plus rapide d'obtenir un Deployment en cours d'exécution. Une fois que vous maîtrisez les bases, consultez la section Référence de configuration de la console pour personnaliser davantage la charge de travail.

  1. Configurez les informations de base. Connectez-vous à la console Container Service for Kubernetes. Dans le volet de navigation de gauche, cliquez sur Clusters. Sur la page Clusters, cliquez sur le nom de votre cluster, puis choisissez Workloads > Deployments dans le volet de navigation de gauche. Sur la page Deployments, cliquez sur Create from Image. Sur la page Basic Information, définissez le nom de l'application et d'autres paramètres de base, puis cliquez sur Next pour accéder à la page Container.

    image

    image

  2. Configure the container. Dans la section Container, définissez Image Name avec l'adresse suivante et définissez Port sur 80. Laissez tous les autres paramètres par défaut, puis cliquez sur Next pour accéder à la page Advanced.

    Important

    Pour extraire cette image, le cluster doit avoir accès à Internet. Si vous avez sélectionné Configure SNAT for VPC lors de la création du cluster, l'accès Internet est déjà activé. Sinon, activez-le maintenant.

    anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6

    image

  3. Complete the advanced configuration. Sur la page Advanced, cliquez sur Create à droite de Services pour créer un service de type SLB afin d'exposer la charge de travail sur Internet. Configurez les options Scaling, Scheduling et Labels and Annotations selon vos besoins, puis cliquez sur Create en bas de la page.

    Important

    La création d'un service de type SLB provisionne une instance Server Load Balancer (SLB), ce qui entraîne des frais de paiement à l'utilisation. Consultez la section Paiement à l'utilisation pour plus de détails sur les tarifs. Libérez l'instance SLB lorsque vous n'en avez plus besoin.

    image

  4. Access the application. Sur la page Complete, cliquez sur View Details dans le panneau Creation Task Submitted. Cliquez sur l'onglet Access Method, recherchez le service nommé nginx-test-svc et cliquez sur le lien dans la colonne External Endpoint. Depuis la page Deployments, vous pouvez View, Edit et Redeploy la charge de travail à tout moment.

    image

    image

    image

Créer un Deployment à l'aide de kubectl

Important

Connectez-vous au cluster avec kubectl avant de poursuivre. Consultez la section Obtenir le fichier kubeconfig d'un cluster et utiliser kubectl pour se connecter au cluster.

  1. Copiez le contenu YAML suivant et enregistrez-le sous le nom deployment.yaml. Il définit un Deployment avec deux réplicas et un service LoadBalancer qui expose le Deployment sur le port 80.

    apiVersion: apps/v1
    kind: Deployment    # Workload type
    metadata:
      name: nginx-test
      namespace: default  # Change the namespace as needed
      labels:
        app: nginx
    spec:
      replicas: 2  # Specify the number of pods
      selector:
        matchLabels:
          app: nginx
      template: # Pod configuration
        metadata:
          labels: # Pod labels
            app: nginx
        spec:
          containers:
          - name: nginx  # Container name
            image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6  # Use a specific version of the Nginx image
            ports:
            - containerPort: 80  # Port exposed by the container
              protocol: TCP  # Specify the protocol as TCP or UDP. The default is TCP.
    ---
    # service
    apiVersion: v1
    kind: Service
    metadata:
      name: nginx-test-svc
      namespace: default  # Change the namespace as needed
      labels:
        app: nginx
    spec:
      selector:
        app: nginx  # Match labels to ensure the service points to the correct pods
      ports:
        - port: 80           # Port provided by the service within the cluster
          targetPort: 80     # Points to the port listened to by the application inside the container (containerPort)
          protocol: TCP      # Protocol. The default is TCP.
      type: LoadBalancer      # Service type. The default is ClusterIP for internal access.
  2. Appliquez le manifeste :

    kubectl apply -f deployment.yaml

    Sortie attendue :

    deployment.apps/nginx-test created
    service/nginx-test-svc created
  3. Exécutez la commande suivante pour afficher l'adresse IP publique du service :

    kubectl get svc

    Sortie attendue :

    NAME            TYPE           CLUSTER-IP       EXTERNAL-IP     PORT(S)        AGE
    kubernetes      ClusterIP      172.16.**.***    <none>          443/TCP        4h47m
    nginx-test-svc  LoadBalancer   172.16.**.***    106.14.**.***   80:31130/TCP   1h10m
  4. Dans un navigateur, saisissez l'adresse IP publique de Nginx (106.14..*) pour accéder à l'application Nginx.

    image

Référence de configuration de la console

Informations de base

image

image

Élément de configuration

Description

Name

Nom de la charge de travail. Les noms des pods appartenant à la charge de travail sont générés à partir de ce nom.

Namespace

Espace de noms auquel appartient la charge de travail.

Replicas

Nombre de pods dans la charge de travail. La valeur par défaut est 2.

Type

Type de charge de travail. Pour choisir un type de charge de travail, consultez la section Créer une charge de travail.

Label

Libellés de la charge de travail.

Annotations

Annotations de la charge de travail.

Synchronize Timezone

Indique si le conteneur utilise le même fuseau horaire que le nœud sur lequel il réside.

Conteneur

Général

image

Élément de configuration

Description

Image Name

  • Select images

    Cliquez sur Select images pour choisir une image. Vous pouvez sélectionner parmi les trois types d'images suivants.

    • Container Registry Enterprise Edition : Sélectionnez une image Enterprise Edition hébergée dans Container Registry (ACR). Vous devez sélectionner la région où se trouve l'image et l'instance ACR. Pour plus d'informations sur ACR, consultez la section Qu'est-ce que Container Registry ?.

    • Container Registry Personal Edition : Sélectionnez une image Personal Edition hébergée dans ACR. Vous devez sélectionner la région où se trouve l'image et l'instance ACR.

    • Artifact Center : Images courantes fournies par Alibaba Cloud et la communauté OpenAnolis. Pour utiliser Artifacts, vous devez activer l'accès Internet pour le cluster. Pour plus d'informations sur Artifacts, consultez la section Artifacts.

    Pour utiliser une image provenant d'une autre source, saisissez directement l'adresse de l'image au format domainname/namespace/imagename:tag. Si vous ne spécifiez pas de domainname, par exemple en saisissant nginx:1.7.9, l'image est extraite de Docker Hub.

  • Select Image Pull Policy

    ACK prend en charge les trois stratégies d'extraction d'images suivantes (imagePullPolicy) :

    • IfNotPresent (Par défaut) : Si une image locale existe sur le nœud de calcul, elle est utilisée. Sinon, l'image est extraite.

    • Always : L'image est toujours extraite de Container Registry pour chaque déploiement ou mise à l'échelle, jamais depuis le nœud local.

    • Never : Seule l'image locale est utilisée. Si aucune image locale n'existe, l'extraction échoue.

  • Set Image Pull Secret

    Lors de l'utilisation d'ACR ou d'un référentiel tiers, vous devrez peut-être configurer un secret pour extraire les images.

    Remarque

    Pour les instances ACR Enterprise, vous pouvez utiliser le composant sans mot de passe pour extraire les images. Pour plus d'informations, consultez la section Installer et utiliser le composant sans mot de passe pour les clusters non gérés.

Resource Limit

Le paramètre resources.limits pour le conteneur. Pour plus d'informations, consultez la section Requests and Limits.

Required Resources

Le paramètre resources.requests pour le conteneur. Pour plus d'informations, consultez la section Requests and Limits.

Container Start Parameter

  • stdin : Active l'entrée standard pour le conteneur.

  • tty : Alloue un terminal virtuel au conteneur pour envoyer des signaux.

Ces deux options sont généralement utilisées conjointement pour lier le terminal (tty) à l'entrée standard du conteneur (stdin). Par exemple, un programme interactif obtient l'entrée standard de l'utilisateur et l'affiche dans le terminal.

Privileged Container

  • Cochez cette case pour définir privileged=true et activer le mode privilégié.

  • Décochez cette case pour définir privileged=false et désactiver le mode privilégié.

Le mode privilégié accorde à un conteneur des autorisations similaires à celles du système d'exploitation de son nœud de calcul hôte, telles que l'accès aux périphériques matériels et le montage de systèmes de fichiers.

Init Containers

Sélectionnez cette option pour créer un conteneur d'initialisation.

Les conteneurs d'initialisation offrent un mécanisme permettant de bloquer ou de retarder le démarrage des conteneurs d'application. Une fois que les conteneurs d'initialisation ont été exécutés avec succès, les autres conteneurs du pod démarrent en parallèle. Par exemple, vous pouvez vérifier la disponibilité des services dépendants. Les conteneurs d'initialisation peuvent inclure des outils utilitaires et des scripts d'installation qui ne figurent pas dans l'image de l'application pour initialiser l'environnement d'exécution du conteneur d'application, par exemple en définissant des paramètres de noyau ou en générant des fichiers de configuration. Pour plus d'informations, consultez la section Conteneurs d'initialisation.

Ports

image

Élément de configuration

Description

Name

Nom du port du conteneur. Il sert uniquement à distinguer les ports et n'a aucun effet fonctionnel.

Container Port

Port exposé par le conteneur. La valeur doit être comprise entre 1 et 65535. Un conteneur doit exposer un port pour être accessible depuis l'extérieur du pod et permettre la communication entre les conteneurs au sein du pod.

Tous les conteneurs d'un pod partagent la pile de protocoles réseau du pod, donc les ports ne peuvent pas être dupliqués lors de la configuration de plusieurs conteneurs dans un pod.

Protocol

Protocole de couche 4 (couche transport) utilisé par le port du conteneur. TCP et UDP sont pris en charge.

Environnements

image

Élément de configuration

Description

Type

Type de variable d'environnement. Les types suivants sont pris en charge :

  • Custom

    Utilisez env pour coder en dur les variables d'environnement directement dans la charge de travail.

  • ConfigMaps

    Utilisez envFrom pour obtenir des données de configuration non sensibles stockées dans un ConfigMap.

  • Secrets

    Utilisez envFrom pour obtenir des informations sensibles stockées dans un ConfigMap, telles que des mots de passe et des clés API.

  • Value/ValueFrom

    Utilisez value/valueFrom pour obtenir d'autres variables d'environnement ou des valeurs prédéfinies.

  • ResourceFieldRef

    Utilisez resourceFieldRef pour obtenir des informations sur les ressources du nœud sur lequel le pod est situé.

Les éléments de configuration et les secrets prennent en charge le référencement de tous les fichiers. Prenons un secret comme exemple. Si vous sélectionnez le type Secret et ne sélectionnez que le secret cible, tous les fichiers sont référencés par défaut.Variables d'environnement

Le fichier YAML correspondant référence également l'intégralité du secret.yaml

Si vous sélectionnez Resource Reference, le paramètre resourceFieldRef est principalement utilisé pour référencer les valeurs de ressources déclarées par le conteneur à partir de la spécification du pod. Ces valeurs sont ensuite transmises au conteneur en tant que variables d'environnement. Le YAML correspondant est le suivant :

image

Variable Key

Nom de la variable d'environnement dans le pod.

Value/ValueFrom

Valeur de la variable d'environnement ou valeur obtenue à partir d'une autre source.

Vérification de l'état

image

Élément de configuration

Description

Liveness : Utilisé pour déterminer si un conteneur fonctionne normalement. Si un nombre spécifié de vérifications échoue, le kubelet redémarre le conteneur. Les sondes de vivacité peuvent détecter des problèmes qui maintiennent un conteneur dans un état en cours d'exécution mais qui ne répond pas, comme un interblocage.

Type de requête : Requête HTTP

Envoie une requête HTTP au conteneur pour vérifier périodiquement s'il fonctionne normalement.

  • Protocol : HTTP/HTTPS.

  • Path : Chemin utilisé pour accéder au serveur HTTP.

  • Port : Port d'accès ou nom de port exposé par le conteneur. Le numéro de port doit être compris entre 1 et 65535.

  • HTTP Header : En-têtes de requête personnalisés dans la requête HTTP. HTTP permet les en-têtes en double. Vous pouvez spécifier les en-têtes sous forme de paires clé-valeur.

  • Initial Delay (secondes) : Le paramètre initialDelaySeconds. Nombre de secondes à attendre avant d'exécuter la première sonde après le démarrage du conteneur. La valeur par défaut est de 3 secondes.

  • Period (secondes) : Le paramètre periodSeconds. Intervalle auquel la sonde est effectuée. La valeur par défaut est de 10 secondes et la valeur minimale est de 1 seconde.

  • Timeout (secondes) : Le paramètre timeoutSeconds pour la sonde. La valeur par défaut est de 1 seconde et la valeur minimale est de 1 seconde.

  • Healthy Threshold : Nombre minimal de sondes réussies consécutives nécessaires pour que la sonde soit considérée comme réussie après un échec. La valeur par défaut est 1 et la valeur minimale est 1. Pour les sondes de vivacité, cette valeur doit être 1.

  • Unhealthy Threshold : Nombre minimal de sondes ayant échoué consécutivement nécessaires pour que la sonde soit considérée comme ayant échoué après une réussite. La valeur par défaut est 3 et la valeur minimale est 1.

Type de requête : Connexion TCP

Envoie un socket TCP au conteneur. Le kubelet tente d'ouvrir un socket sur le port spécifié. Si une connexion peut être établie, le conteneur est considéré comme sain. Sinon, il est considéré comme ayant échoué.

  • Port : Port d'accès ou nom de port exposé par le conteneur. Le numéro de port doit être compris entre 1 et 65535.

  • Initial Delay (secondes) : Le paramètre initialDelaySeconds. Nombre de secondes à attendre avant d'exécuter la première sonde après le démarrage du conteneur. La valeur par défaut est de 15 secondes.

  • Period (secondes) : Le paramètre periodSeconds. Intervalle auquel la sonde est effectuée. La valeur par défaut est de 10 secondes et la valeur minimale est de 1 seconde.

  • Timeout (secondes) : Le paramètre timeoutSeconds pour la sonde. La valeur par défaut est de 1 seconde et la valeur minimale est de 1 seconde.

  • Healthy Threshold : Nombre minimal de sondes réussies consécutives nécessaires pour que la sonde soit considérée comme réussie après un échec. La valeur par défaut est 1 et la valeur minimale est 1. Pour les sondes de vivacité, cette valeur doit être 1.

  • Unhealthy Threshold : Nombre minimal de sondes ayant échoué consécutivement nécessaires pour que la sonde soit considérée comme ayant échoué après une réussite. La valeur par défaut est 3 et la valeur minimale est 1.

Type de requête : Ligne de commande

Exécute une commande de sonde dans le conteneur pour vérifier son état.

  • Command : Commande de sonde utilisée pour vérifier l'état du conteneur.

  • Initial Delay (secondes) : Le paramètre initialDelaySeconds. Nombre de secondes à attendre avant d'exécuter la première sonde après le démarrage du conteneur. La valeur par défaut est de 5 secondes.

  • Period (secondes) : Le paramètre periodSeconds. Intervalle auquel la sonde est effectuée. La valeur par défaut est de 10 secondes et la valeur minimale est de 1 seconde.

  • Timeout (secondes) : Le paramètre timeoutSeconds pour la sonde. La valeur par défaut est de 1 seconde et la valeur minimale est de 1 seconde.

  • Healthy Threshold : Nombre minimal de sondes réussies consécutives nécessaires pour que la sonde soit considérée comme réussie après un échec. La valeur par défaut est 1 et la valeur minimale est 1. Pour les sondes de vivacité, cette valeur doit être 1.

  • Unhealthy Threshold : Nombre minimal de sondes ayant échoué consécutivement nécessaires pour que la sonde soit considérée comme ayant échoué après une réussite. La valeur par défaut est 3 et la valeur minimale est 1.

Readiness : Utilisé pour déterminer si un conteneur est prêt à accepter le trafic. Un pod est attaché au backend d'un service uniquement après la réussite de sa sonde de readiness.

Startup : Exécutée uniquement au démarrage du conteneur pour vérifier s'il a démarré avec succès. La Liveness Probe et la Readiness Probe sont exécutées uniquement après la réussite de la sonde de démarrage.

Remarque

Les sondes de démarrage sont prises en charge uniquement dans les clusters Kubernetes exécutant la version 1.18 ou ultérieure.

Cycle de vie

image

Élément de configuration

Description

Start

Définissez les commandes et paramètres de pré-démarrage pour le conteneur. La commande de démarrage et les paramètres définissent les actions à effectuer au démarrage du conteneur, utilisées pour initialiser le service d'application. Cela convient aux déploiements d'applications nécessitant des variables d'environnement spécifiques, des cibles de montage ou des mappages de ports.

Post Start

Définissez les commandes à exécuter après le démarrage du conteneur. Les commandes post-démarrage sont utilisées pour effectuer des tâches spécifiques après le démarrage du conteneur, telles que l'initialisation des configurations ou l'exécution de scripts. Cela convient aux scénarios où un travail de préparation doit être effectué avant le démarrage du processus principal.

Pre Stop

Définissez les commandes de pré-arrêt pour le conteneur. Les commandes de pré-arrêt sont utilisées pour arrêter le processus d'application à l'intérieur du conteneur, garantissant la cohérence des données et l'arrêt normal du service. Cela convient aux scénarios nécessitant un arrêt sécurisé pour éviter la perte de données ou des anomalies de service.

Vous pouvez configurer la commande de démarrage, les gestionnaires post-démarrage et pré-arrêt pour le cycle de vie du conteneur. Pour plus d'informations, consultez la section Configurer le cycle de vie.

Volume

Élément de configuration

Description

Add Local Storage

Monte un volume de stockage local depuis le nœud vers le pod. Les données d'un volume de stockage local sont stockées sur le nœud et ne sont pas disponibles si le nœud s'arrête. Le stockage local prend également en charge les types de volumes éphémères tels que Secret et ConfigMap. Les fonctionnalités de stockage étant complexes, veuillez lire la section Stockage pour comprendre les bases du stockage dans ACK avant d'utiliser des volumes de stockage.

Add PVC

Monte un volume de stockage cloud vers le pod pour le stockage persistant des données importantes au sein du conteneur. Un volume de stockage cloud est un service de stockage distant externe au cluster, complètement indépendant des nœuds de calcul et non affecté par les changements de nœuds. Dans ACK, les volumes de stockage cloud sont généralement des services de stockage fournis par Alibaba Cloud, tels que des disques, NAS ou OSS. Les fonctionnalités de stockage étant complexes, veuillez lire la section Stockage pour comprendre les bases du stockage dans ACK avant d'utiliser des volumes de stockage.

Journal

Collection configuration

  • Logstore : Un Logstore correspondant est créé dans le projet Simple Log Service associé au cluster pour stocker les journaux collectés. Avant d'utiliser les journaux, lisez la section Gestion des journaux pour comprendre les bases de la journalisation dans ACK.

  • Chemin du journal dans le conteneur : Chemin des journaux à collecter au sein du conteneur. Si défini sur Stdout, il collecte les journaux de sortie standard du conteneur.

Custom Tag

Après avoir défini un tag personnalisé, le tag est collecté avec la sortie du journal du conteneur, ce qui facilite les opérations d'analyse telles que les statistiques et le filtrage des journaux.

Configuration avancée

Carte de configuration

Élément de configuration

Description

Access Control

Services

Un service fournit un point d'entrée fixe et unifié de couche 4 (couche transport) pour un groupe de pods. C'est une ressource requise pour exposer une charge de travail. Les services prennent en charge plusieurs types, y compris Cluster IP, Node Port et SLB. Avant de configurer un service, consultez la section Gestion des services pour comprendre les bases des services.

Ingresses

Un Ingress fournit un point d'entrée de couche 7 (couche application) pour plusieurs services dans un cluster et transfère les requêtes vers différents services en fonction de la correspondance du nom de domaine. Avant d'utiliser un Ingress, vous devez installer un contrôleur Ingress. ACK propose plusieurs options pour différents scénarios. Consultez la section Comparaison de Nginx Ingress, ALB Ingress et MSE Ingress pour faire votre choix.

Scaling

HPA

Déclenche la mise à l'échelle automatique en surveillant les métriques de performance des conteneurs. La mise à l'échelle basée sur les métriques vous aide à ajuster automatiquement les ressources totales utilisées par une charge de travail lorsque la charge métier fluctue, en augmentant la capacité pour gérer les charges élevées et en réduisant la capacité pour économiser des ressources pendant les faibles charges. Pour plus d'informations, consultez la section Utiliser Horizontal Pod Autoscaling (HPA).

CronHPA

Déclenche la mise à l'échelle de la charge de travail à des heures planifiées. Cela convient aux scénarios présentant des variations périodiques de la charge métier, comme les pics de trafic cycliques sur les réseaux sociaux après le déjeuner et le dîner. Pour plus d'informations, consultez la section Utiliser CronHPA pour la mise à l'échelle horizontale automatique planifiée des pods.

Scheduling

Upgrade Method

Mécanisme par lequel une charge de travail remplace les anciens pods par de nouveaux lorsque la configuration des pods change.

  • Mise à niveau progressive (rollingupdate) : Remplace une partie des pods à la fois, en passant au remplacement suivant uniquement après que les nouveaux pods fonctionnent correctement. Cette méthode garantit qu'il n'y a pas d'interruption de service, mais les utilisateurs peuvent accéder simultanément à différentes versions des pods.

  • Recreate : Remplace tous les pods en une seule fois. Cela peut entraîner une interruption de service, mais garantit que tous les pods sont de la même version.

  • Node Affinity

  • Pod Affinity

  • Pod Anti-affinity

  • Toleration

Les configurations d'affinité, d'anti-affinité et de tolérance sont utilisées pour la planification afin de garantir que les pods s'exécutent sur des nœuds spécifiques. Les opérations de planification sont complexes et nécessitent une planification préalable en fonction de vos besoins. Pour des opérations détaillées, consultez la section Planification.

Labels and Annotations

Pod Labels

Ajoute un libellé à chaque pod appartenant à cette charge de travail. Diverses ressources du cluster, y compris les charges de travail et les services, correspondent aux pods via les libellés. ACK ajoute un libellé par défaut aux pods au format app:(nom de l'application).

Pod Annotations

Ajoute une annotation à chaque pod appartenant à cette charge de travail. Certaines fonctionnalités d'ACK utilisent des annotations. Vous pouvez les modifier lors de l'utilisation de ces fonctionnalités.

Exemple de YAML de charge de travail

Le YAML complet suivant illustre les options de configuration courantes, y compris les limites de ressources, les vérifications de l'état, les variables d'environnement issues d'un ConfigMap et un Ingress.

apiVersion: apps/v1
kind: Deployment    # Workload type
metadata:
  name: nginx-test
  namespace: default  # Change the namespace as needed
  labels:
    app: nginx
spec:
  replicas: 2  # Specify the number of pods
  selector:
    matchLabels:
      app: nginx
  template: # Pod configuration
    metadata:
      labels: # Pod labels
        app: nginx
      annotations: # Pod annotations
        description: "This is an application deployment"
    spec:
      containers:
      - name: nginx  # Image name
        image: nginx:1.7.9  # Use a specific version of the Nginx image
        ports:
        - name: nginx  # name
          containerPort: 80  # Port exposed by the container
          protocol: TCP  # Specify the protocol as TCP or UDP. The default is TCP.
        command: ["/bin/sh"]  # Container start command
        args: [ "-c", "echo $(SPECIAL_LEVEL_KEY) $(SPECIAL_TYPE_KEY) && exec nginx -g 'daemon off;'"] # Output variables, add command to start nginx
        stdin: true  # Enable standard input
        tty: true    # Allocate a virtual terminal
        env:
          - name: SPECIAL_LEVEL_KEY
            valueFrom:
              configMapKeyRef:
                name: special-config  # Name of the configuration item
                key: SPECIAL_LEVEL    # Key name of the configuration item
        securityContext:
          privileged: true  # true enables privileged mode, false disables it. The default is false.
        resources:
          limits:
            cpu: "500m"               # Maximum CPU usage, 500 millicores
            memory: "256Mi"           # Maximum memory usage, 256 MiB
            ephemeral-storage: "1Gi"  # Maximum ephemeral storage usage, 1 GiB
          requests:
            cpu: "200m"               # Minimum requested CPU usage, 200 millicores
            memory: "128Mi"           # Minimum requested memory usage, 128 MiB
            ephemeral-storage: "500Mi" # Minimum requested ephemeral storage usage, 500 MiB
        livenessProbe:  # Liveness probe configuration
          httpGet:
            path: /
            port: 80
          initialDelaySeconds: 30
          periodSeconds: 10
        readinessProbe:  # Readiness probe configuration
          httpGet:
            path: /
            port: 80
          initialDelaySeconds: 5
          periodSeconds: 10
        volumeMounts:
        - name: tz-config
          mountPath: /etc/localtime
          readOnly: true
      volumes:
      - name: tz-config
        hostPath:
          path: /etc/localtime  # Mount the host's /etc/localtime file to the same path in the container using volumeMounts and volumes fields.
---
# service
apiVersion: v1
kind: Service
metadata:
  name: nginx-test-svc
  namespace: default  # Change the namespace as needed
  labels:
    app: nginx
spec:
  selector:
    app: nginx  # Match labels to ensure the service points to the correct pods
  ports:
    - port: 80           # Port provided by the service within the cluster
      targetPort: 80     # Points to the port listened to by the application inside the container (containerPort)
      protocol: TCP      # Protocol. The default is TCP.
  type: ClusterIP        # Service type. The default is ClusterIP for internal access.
---
# ingress
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: nginx-ingress
  namespace: default  # Change the namespace as needed
  annotations:
    kubernetes.io/ingress.class: "nginx"  # Specify the Ingress controller type
    # If using Alibaba Cloud SLB Ingress controller, you can specify the following:
    # service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id: "lb-xxxxxxxxxx"
    # service.beta.kubernetes.io/alibaba-cloud-loadbalancer-spec: "slb.spec.s1.small"
spec:
  rules:
    - host: foo.bar.com  # Replace with your domain name
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: nginx-service  # Backend service name
                port:
                  number: 80         # Backend service port
  tls:  # Optional, for enabling HTTPS
    - hosts:
        - foo.bar.com  # Replace with your domain name
      secretName: tls-secret  # TLS certificate Secret name

Étapes suivantes