Container Service for Kubernetes (ACK) permet de créer des StatefulSets directement depuis la console. Cet exemple déploie une application NGINX avec état afin d'illustrer les fonctionnalités des StatefulSets.
Prérequis
kubectl est connecté à votre cluster Kubernetes. Obtenir le fichier kubeconfig d'un cluster et utiliser kubectl pour s'y connecter.
Fonctionnalités des StatefulSets
Un StatefulSet offre les fonctionnalités suivantes :
|
Fonctionnalité |
Description |
|
Identité de Pod cohérente |
Garantit un ordre déterministe (démarrage et arrêt) ainsi qu'une identité réseau stable, conservée par le Pod indépendamment de son ordonnancement. |
|
Stockage persistant stable |
Crée un PV pour chaque Pod via un VolumeClaimTemplate. La réduction du nombre de réplicas ou leur suppression n'entraîne pas la destruction des volumes associés. |
|
Identité réseau stable |
Le |
|
Ordre stable |
Pour un StatefulSet comportant N réplicas, chaque Pod reçoit un index ordinal unique dans l'intervalle [0, N). |
Étapes
Étape 1 : Configurer les informations de base de l'application
Connectez-vous à la console ACS. Dans le volet de navigation de gauche, cliquez sur Clusters.
Sur la page Clusters, cliquez sur le nom du cluster cible. Dans le volet de navigation de gauche, choisissez Workloads > StatefulSets.
Sur la page StatefulSets, cliquez sur Create from Image.
-
Sur la page Basic Information, configurez l'application.
Paramètre
Description
Application Name
Saisissez le nom de l'application.
Replicas:
Nombre de pods pour l'application. Valeur par défaut : 2.
Workloads
Sélectionnez StatefulSets.
Labels
Libellé permettant d'identifier l'application.
Annotations
Annotation associée à l'application.
Instance type
Sélectionnez un type de calcul. Pour plus d'informations sur les types de calcul, consultez Présentation des instances de pod ACS.
QoS Type
Sélectionnez une classe de qualité de service (QoS).
Cliquez sur Next pour accéder à la page Container.
Étape 2 : Configurer les conteneurs
Sur la page de l'assistant , configurez l'image du conteneur, les ressources, les ports, les variables d'environnement, les vérifications d'état, le cycle de vie, les volumes et la journalisation.
Pour ajouter plusieurs conteneurs au pod, cliquez sur à côté de l'onglet Container 1.
-
Dans la section , complétez la configuration de base du conteneur.
Élément de configuration
Description
-
Sélectionner une image
Cliquez sur pour choisir l'image souhaitée.
-
Container Registry Enterprise Edition : sélectionnez une image Enterprise Edition hébergée dans Alibaba Cloud Container Registry (ACR). Spécifiez la région et l'instance ACR où réside l'image. Pour plus d'informations sur ACR, consultez Qu'est-ce que Container Registry ?.
-
Container Registry Personal Edition (activation préalable requise) : sélectionnez une image Personal Edition hébergée dans ACR. Spécifiez la région et l'instance ACR où réside l'image.
-
Artifact center : comprend des images de système d'exploitation de base pour les applications conteneurisées, des images d'environnements d'exécution linguistiques ainsi que des images liées à l'IA et au Big Data. Cet exemple utilise une image Nginx provenant d'Artifact Center. Pour plus d'informations, consultez Artifact Center.
-
-
(Facultatif) Définir la politique de récupération d'image
Dans la liste déroulante , sélectionnez une politique de récupération. Par défaut, aucune politique n'est définie et Kubernetes utilise IfNotPresent.
-
: si l'image existe déjà localement (déjà récupérée sur l'hôte), elle n'est pas téléchargée à nouveau. Sinon, elle est récupérée.
-
: récupère systématiquement l'image lors du déploiement ou de la mise à l'échelle, en ignorant toute copie locale.
-
: utilise uniquement l'image locale.
-
-
(Facultatif) Définir un secret de récupération d'image
Cliquez sur pour accéder de manière sécurisée aux images privées.
-
Pour les instances ACR Personal Edition, configurez un secret de récupération d'image afin de récupérer des images de conteneur. Pour plus d'informations, consultez Gérer les secrets.
-
Pour les instances ACR Enterprise Edition, récupérez des images sans mot de passe grâce au composant passwordless. Pour plus de détails, consultez Récupérer des images ACR sans mot de passe.
-
Définissez les quotas de ressources pour le conteneur.
-
CPU : spécifiez les valeurs de requête et de limite CPU. Par défaut, la requête est égale à la limite et la facturation suit le mode paiement à l'utilisation. Si vous définissez une limite différente via YAML, la requête sera écrasée pour correspondre à cette limite. Pour plus de détails, consultez Spécifications des ressources.
-
: spécifiez les valeurs de requête et de limite mémoire. Par défaut, la requête est égale à la limite et la facturation suit le mode paiement à l'utilisation. Si vous définissez une limite différente via YAML, la requête sera écrasée pour correspondre à cette limite. Pour plus de détails, consultez Spécifications des ressources.
Interactive Session
(Facultatif) Configurez les options de démarrage du conteneur.
-
stdin : transmet l'entrée console au conteneur.
-
tty : attache la console d'entrée standard comme entrée console du conteneur.
RemarqueEn général, stdin et tty sont sélectionnés ensemble afin de lier le terminal (tty) à l'entrée standard (stdin) du conteneur. Par exemple, un programme interactif lit les entrées utilisateur depuis stdin et affiche la sortie sur le terminal.
(Facultatif) Sélectionnez cette option pour créer un conteneur d'initialisation.
Les conteneurs d'initialisation permettent de bloquer ou de retarder le démarrage des conteneurs applicatifs jusqu'à ce qu'ils se terminent avec succès. Après leur exécution réussie, les conteneurs applicatifs du pod démarrent en parallèle. Vous pouvez par exemple utiliser des conteneurs d'initialisation pour vérifier la disponibilité de services dépendants. Ils peuvent également contenir des utilitaires ou des scripts d'installation absents de l'image applicative afin d'initialiser l'environnement d'exécution, par exemple en configurant des paramètres noyau ou en générant des fichiers de configuration. Pour plus d'informations, consultez Init Containers.
-
-
(Facultatif) Dans la section , cliquez sur pour configurer les ports du conteneur.
Élément de configuration
Description
Spécifiez un nom pour le port du conteneur.
Spécifiez le port d'accès exposé du conteneur. Le numéro de port doit être compris entre 1 et 65535.
Les protocoles pris en charge sont TCP et UDP.
-
(Facultatif) Dans la section , cliquez sur pour configurer les variables d'environnement.
Configurez des variables d'environnement pour le pod sous forme de paires clé-valeur afin d'ajouter des indicateurs d'environnement ou de transmettre des configurations. Pour plus d'informations, consultez Variables d'environnement de pod.
Paramètre
Description
Définissez le type de variable d'environnement :
ConfigMap et Secret permettent de référencer des fichiers entiers.
Cet exemple utilise un Secret. Lorsque vous sélectionnez le type et choisissez un Secret cible, tous les fichiers de ce Secret sont référencés par défaut. Après avoir sélectionné Secret, saisissez un Variable Name puis choisissez le nom du Secret correspondant et la clé dans les deux listes déroulantes situées à droite.
Le YAML correspondant référence l'intégralité du Secret :
envFrom: - secretRef: name: testDéfinissez le nom de la variable d'environnement.
Définissez la valeur de la variable référencée.
-
-
(Facultatif) Dans la section , activez , et selon vos besoins.
Liveness probe : une sonde de vivacité vérifie si un conteneur est en cours d'exécution. En cas d'échecs répétés, le kubelet redémarre le conteneur. Cela permet de résoudre des problèmes tels que les interblocages, où le conteneur s'exécute mais ne progresse plus.
Readiness probe : une sonde de disponibilité vérifie si un conteneur est prêt à accepter du trafic. Un Pod n'est ajouté comme backend d'un Service qu'après la réussite de sa sonde de disponibilité.
Startup Probes : ces sondes ne s'exécutent qu'au démarrage du conteneur afin de vérifier s'il a démarré correctement. Les Liveness Probes et Readiness Probes ne s'exécutent qu'après la réussite de la sonde de démarrage.
Pour plus d'informations, consultez Configurer les sondes de vivacité, de disponibilité et de démarrage.
Paramètre
Description
Envoie une requête HTTP GET au conteneur. Paramètres pris en charge :
-
: HTTP ou HTTPS.
-
: chemin d'accès au serveur HTTP.
-
: port exposé du conteneur ou nom du port. Le numéro de port doit être compris entre 1 et 65535.
-
: en-têtes de requête personnalisés dans la requête HTTP. HTTP autorise les en-têtes dupliqués. Configurez-les sous forme de paires clé-valeur.
-
: le paramètre initialDelaySeconds définit le délai d'attente, en secondes, après le démarrage du conteneur avant d'effectuer la première sonde. La valeur par défaut est de 3 secondes.
-
: le paramètre periodSeconds définit l'intervalle de temps entre les sondes. La valeur par défaut est de 10 secondes. Le minimum est de 1 seconde.
-
: le paramètre timeoutSeconds définit la durée d'expiration de la sonde. La valeur par défaut est de 1 seconde. Le minimum est de 1 seconde.
-
: nombre minimal de sondes réussies consécutives requises après un échec pour considérer le conteneur comme sain. La valeur par défaut est 1. Le minimum est 1. Pour les sondes de vivacité, cette valeur doit être 1.
-
: nombre minimal de sondes échouées consécutives requises après un succès pour considérer le conteneur comme non sain. La valeur par défaut est 3. Le minimum est 1.
Ouvre un socket TCP vers le conteneur. Le kubelet tente d'ouvrir un socket sur le port spécifié. En cas de succès, le conteneur est considéré comme sain ; sinon, il est marqué comme défaillant. Paramètres pris en charge :
-
: port exposé du conteneur ou nom du port. Le numéro de port doit être compris entre 1 et 65535.
-
: le paramètre initialDelaySeconds définit le délai d'attente, en secondes, après le démarrage du conteneur avant d'effectuer la première sonde. La valeur par défaut est de 15 secondes.
-
: le paramètre periodSeconds définit l'intervalle de temps entre les sondes. La valeur par défaut est de 10 secondes. Le minimum est de 1 seconde.
-
: le paramètre timeoutSeconds définit la durée d'expiration de la sonde. La valeur par défaut est de 1 seconde. Le minimum est de 1 seconde.
-
: nombre minimal de sondes réussies consécutives requises après un échec pour considérer le conteneur comme sain. La valeur par défaut est 1. Le minimum est 1. Pour les sondes de vivacité, cette valeur doit être 1.
-
: nombre minimal de sondes échouées consécutives requises après un succès pour considérer le conteneur comme non sain. La valeur par défaut est 3. Le minimum est 1.
Exécute une commande à l'intérieur du conteneur pour vérifier son état. Paramètres pris en charge :
-
: commande utilisée pour vérifier l'état du conteneur.
-
: le paramètre initialDelaySeconds définit le délai d'attente, en secondes, après le démarrage du conteneur avant d'effectuer la première sonde. La valeur par défaut est de 5 secondes.
-
: le paramètre periodSeconds définit l'intervalle de temps entre les sondes. La valeur par défaut est de 10 secondes. Le minimum est de 1 seconde.
-
: le paramètre timeoutSeconds définit la durée d'expiration de la sonde. La valeur par défaut est de 1 seconde. Le minimum est de 1 seconde.
-
: nombre minimal de sondes réussies consécutives requises après un échec pour considérer le conteneur comme sain. La valeur par défaut est 1. Le minimum est 1. Pour les sondes de vivacité, cette valeur doit être 1.
-
: nombre minimal de sondes échouées consécutives requises après un succès pour considérer le conteneur comme non sain. La valeur par défaut est 3. Le minimum est 1.
-
(Facultatif) Dans la section , configurez le cycle de vie du conteneur.
Configurez des commandes de pré-démarrage, des gestionnaires post-démarrage et des gestionnaires pré-arrêt pour le cycle de vie du conteneur. Pour plus de détails, consultez Configurer le cycle de vie.
Paramètre
Description
Start
Spécifiez une commande et ses arguments à exécuter avant le démarrage du conteneur.
Post-start Hook
Spécifiez une commande à exécuter après le démarrage du conteneur.
Pre-stop Hook
Spécifiez une commande à exécuter avant l'arrêt du conteneur.
-
(Facultatif) Dans la section , montez des volumes dans le conteneur.
Stockage local : montez des ConfigMaps, des Secrets ou des répertoires temporaires vers des chemins du conteneur. Pour plus d'informations, consultez volumes.
Stockage cloud : prend en charge les disques cloud, NAS, etc. Pour plus de détails, consultez Présentation du stockage.
-
(Facultatif) Dans la section , configurez et .
Paramètre
Description
Paramètres de collecte
-
: crée un Logstore correspondant dans Simple Log Service pour stocker les journaux collectés.
-
: prend en charge les journaux stdout et texte.
-
Stdout : collecte les journaux de sortie standard du conteneur.
-
Journaux texte : collecte les journaux depuis un chemin spécifié à l'intérieur du conteneur. Cet exemple collecte tous les journaux texte situés sous
/var/log/nginxet prend en charge les caractères génériques.
-
Tags personnalisés
Définissez également des tags personnalisés. Une fois configurés, ces tags sont inclus avec les journaux du conteneur. Les tags personnalisés facilitent la catégorisation des journaux pour des statistiques et un filtrage plus aisés lors de l'analyse.
-
Cliquez sur pour accéder à l'assistant .
Étape 3 : Finaliser la configuration avancée
Sur la page de l'assistant , configurez l'accès, la mise à l'échelle, l'ordonnancement ainsi que les libellés et annotations.
-
Dans la section , configurez la méthode d'exposition des pods backend.
Cet exemple utilise ClusterIP et Ingress pour créer une application Nginx accessible publiquement.
-
Configurer un Service : cliquez sur à côté de pour définir les paramètres du service.
-
Configurer un Ingress : cliquez sur à côté de pour définir les règles de routage vers les pods backend.
-
-
(Facultatif) Dans la section , activez pour répondre aux variations de charge.
-
Container Compute Service prend en charge la mise à l'échelle automatique basée sur l'utilisation du CPU et de la mémoire des pods.
RemarquePour activer la mise à l'échelle automatique, spécifiez les ressources demandées pour le conteneur. Sinon, la mise à l'échelle automatique ne fonctionnera pas.
Élément de configuration
Description
Prend en charge le CPU et la mémoire. Doit correspondre au type de ressource demandé.
Trigger Condition
Seuil de pourcentage d'utilisation des ressources. Lorsqu'il est dépassé, le système effectue une mise à l'échelle horizontale sortante.
Nombre maximal de conteneurs pouvant être ajoutés lors de la mise à l'échelle sortante pour ce type de charge.
Limite inférieure de mise à l'échelle entrante pour cette charge de travail.
Container Compute Service prend également en charge la mise à l'échelle planifiée (CronHPA) pour ajuster automatiquement les clusters Kubernetes à des heures précises. Avant d'activer la mise à l'échelle planifiée, installez le composant ack-kubernetes-cronhpa-controller. Pour plus de détails, consultez Mise à l'échelle planifiée (CronHPA).
-
(Facultatif) Dans la section , cliquez sur Add pour définir des libellés et annotations de pod.
Cliquez sur .
Étape 4 : Consulter l'application
Après la création, une page de confirmation s'affiche. Cliquez sur View Details pour ouvrir la page de détails du StatefulSet.
Vous pouvez également, sur la page Deployments, cliquer sur le nom du StatefulSet ou sur Details dans la colonne Actions.