Déployer une application de conteneur à disponibilité élevée

Cette page présente la stratégie de déploiement recommandée pour créer une application de conteneur Kubernetes robuste et à haute disponibilité (HA) dans Google Distributed Cloud (GDC) air-gapped. Vous devez déployer l'application de conteneur dans plusieurs zones GDC et configurer la réplication de stockage asynchrone afin que l'application et ses données puissent être récupérées en cas de temps d'arrêt inattendu ou de sinistre local.

Cette page s'adresse aux développeurs du groupe des opérateurs d'applications, qui sont chargés de créer des charges de travail d'application pour leur organisation. Pour en savoir plus, consultez la documentation sur les audiences pour GDC en mode air-gapped.

Objectifs

  • Créez un cluster Kubernetes dans au moins deux zones de votre univers GDC.
  • Configurez l'équilibrage de charge global.
  • Déployez des charges de travail de conteneur sur chaque cluster Kubernetes zonal.
  • Provisionnez le stockage et associez-le à vos pods.
  • Configurez la réplication asynchrone du stockage à l'aide du stockage par blocs ou du stockage d'objets.

Avant de commencer

  • Vérifiez que vous travaillez dans un univers GDC avec plusieurs zones disponibles. Exécutez gdcloud zones list pour lister les zones disponibles dans votre univers. Pour en savoir plus, consultez Lister les zones d'un univers.

  • Demandez à votre administrateur IAM de l'organisation de vous accorder les rôles suivants :

    • Le rôle Administrateur d'espace de noms (namespace-admin) pour créer et gérer des charges de travail de conteneur.

    • Les rôles Administrateur de cluster utilisateur (user-cluster-admin) et Développeur de cluster utilisateur (user-cluster-developer) pour créer et gérer des clusters Kubernetes et leurs pools de nœuds.

    • Rôles Administrateur de l'équilibreur de charge (load-balancer-admin) et Administrateur de l'équilibreur de charge mondial (global-load-balancer-admin) Vous devez disposer de ce rôle pour créer et gérer des équilibreurs de charge.

    • Le rôle d'administrateur général de la réplication de volumes (app-volume-replication-admin-global). Vous devez disposer de ce rôle pour administrer la réplication de volumes.

    • Le rôle Administrateur PNP global (global-project-networkpolicy-admin) pour créer et gérer les règles réseau du projet dans les zones.

    • Les rôles Administrateur d'instance Harbor (harbor-instance-admin), Lecteur d'instance Harbor(harbor-instance-viewer) et Créateur de projet Harbor (harbor-project-creator). Ces rôles sont nécessaires pour créer et gérer des images de conteneur dans le registre d'artefacts.

    • Le rôle Administrateur mondial de la réplication de volumes (app-volume-replication-admin-global) permet d'administrer la relation de réplication de volumes pour les ressources de stockage par blocs.

    • Les rôles Administrateur des objets du bucket de projet (project-bucket-object-admin) et Administrateur du bucket de projet (project-bucket-admin) pour créer et gérer des buckets de stockage.

    Pour en savoir plus, consultez les descriptions des rôles.

  • Installez et configurez la gdcloud CLI, puis configurez vos contextes zonaux et globaux. Pour en savoir plus, consultez Gérer les ressources dans les zones.

  • Installez et configurez l'CLI kubectl, avec les fichiers kubeconfig appropriés définis pour le serveur d'API global, le serveur d'API Management et le cluster Kubernetes. Pour en savoir plus, consultez Générer manuellement un fichier kubeconfig.

Créer un cluster Kubernetes dans plusieurs zones

Un cluster Kubernetes est une ressource zonale. Vous devez donc créer un cluster séparément dans chaque zone.

Console

  1. Dans le menu de navigation, sélectionnez Kubernetes Engine > Clusters.

  2. Cliquez sur Créer un cluster.

  3. Dans le champ Nom, spécifiez un nom pour le cluster.

  4. Sélectionnez la version de Kubernetes pour le cluster.

  5. Sélectionnez la zone dans laquelle créer le cluster.

  6. Cliquez sur Associer un projet, puis sélectionnez un projet existant à associer à votre cluster. Cliquez ensuite sur Enregistrer. Vous pouvez associer ou dissocier des projets après avoir créé le cluster à partir de la page Détails du projet. Vous devez associer un projet à votre cluster avant de déployer des charges de travail de conteneur.

  7. Cliquez sur Suivant.

  8. Configurez les paramètres réseau de votre cluster. Vous ne pouvez pas modifier ces paramètres réseau après avoir créé le cluster. Le protocole Internet par défaut et unique compatible avec les clusters Kubernetes est le protocole Internet version 4 (IPv4).

    1. Spécifiez la taille du pool d'adresses IP de l'équilibreur de charge, par exemple 20.

    2. Sélectionnez le CIDR (Classless Inter-Domain Routing) du service à utiliser. Les adresses IP de vos services déployés, tels que les équilibreurs de charge, sont allouées à partir de cette plage.

    3. Sélectionnez le CIDR du pod à utiliser. Le cluster alloue des adresses IP de cette plage à vos pods et VM.

    4. Cliquez sur Suivant.

  9. Consultez les détails du pool de nœuds par défaut généré automatiquement pour le cluster. Cliquez sur Modifier pour modifier le pool de nœuds par défaut.

  10. Pour créer d'autres pools de nœuds, sélectionnez Ajouter un pool de nœuds. Lorsque vous modifiez le pool de nœuds par défaut ou que vous en ajoutez un, vous pouvez le personnaliser à l'aide des options suivantes :

    1. Attribuez un nom au pool de nœuds. Vous ne pouvez pas modifier le nom après avoir créé le pool de nœuds.
    2. Spécifiez le nombre de nœuds de calcul à créer dans le pool de nœuds.
    3. Sélectionnez la classe de machine qui correspond le mieux aux exigences de votre charge de travail. Consultez la liste des paramètres suivants :

      • Type de machine
      • Processeur
      • Mémoire
    4. Cliquez sur Enregistrer.

    5. Cliquez sur Créer pour créer le cluster.

  11. Répétez ces étapes pour chaque zone de votre univers GDC. Assurez-vous qu'un cluster Kubernetes réside dans chaque zone que vous souhaitez utiliser pour votre stratégie HA.

API

Pour créer un cluster Kubernetes à l'aide de l'API, appliquez une ressource personnalisée à chaque zone GDC.

  1. Créez une ressource personnalisée Cluster et déployez-la sur le serveur de l'API Management pour votre zone :

    kubectl --kubeconfig MANAGEMENT_API_SERVER apply -f - <<EOF \
    apiVersion: cluster.gdc.goog/v1
    kind: Cluster
    metadata:
      name: CLUSTER_NAME
      namespace: platform
    spec:
      clusterNetwork:
        podCIDRSize: POD_CIDR
        serviceCIDRSize: SERVICE_CIDR
      initialVersion:
        kubernetesVersion: KUBERNETES_VERSION
      loadBalancer:
        ingressServiceIPSize: LOAD_BALANCER_POOL_SIZE
      nodePools:
      - machineTypeName: MACHINE_TYPE
        name: NODE_POOL_NAME
        nodeCount: NUMBER_OF_WORKER_NODES
        taints: TAINTS
        labels: LABELS
        acceleratorOptions:
          gpuPartitionScheme: GPU_PARTITION_SCHEME
      releaseChannel:
        channel: UNSPECIFIED
    EOF
    

    Remplacez les éléments suivants :

    • MANAGEMENT_API_SERVER : chemin kubeconfig du serveur de l'API Management zonale. Pour en savoir plus, consultez Passer au contexte zonal.
    • CLUSTER_NAME : nom du cluster. Le nom du cluster ne doit pas se terminer par -system. Le suffixe -system est réservé aux clusters créés par GDC.
    • POD_CIDR : taille des plages de réseau à partir desquelles les adresses IP virtuelles (VIP) des pods sont allouées. Si elle n'est pas définie, la valeur par défaut 21 est utilisée.
    • SERVICE_CIDR : taille des plages de réseau à partir desquelles les adresses IP virtuelles de service sont allouées. Si elle n'est pas définie, la valeur par défaut 23 est utilisée.
    • KUBERNETES_VERSION : version Kubernetes du cluster, par exemple 1.26.5-gke.2100. Pour lister les versions Kubernetes disponibles à configurer, consultez Lister les versions Kubernetes disponibles pour un cluster.
    • LOAD_BALANCER_POOL_SIZE : taille des pools d'adresses IP non chevauchants utilisés par les services d'équilibrage de charge. Si elle n'est pas définie, la valeur par défaut 20 est utilisée.
    • MACHINE_TYPE : type de machine pour les nœuds de calcul du pool de nœuds. Consultez les types de machines disponibles pour connaître les configurations possibles.
    • NODE_POOL_NAME : nom du pool de nœuds.
    • NUMBER_OF_WORKER_NODES : nombre de nœuds de calcul à provisionner dans le pool de nœuds.
    • TAINTS : rejets à appliquer aux nœuds de ce pool de nœuds. Ce champ est facultatif.
    • LABELS : libellés à appliquer aux nœuds de ce pool de nœuds. Il contient une liste de paires clé/valeur. Ce champ est facultatif.
    • GPU_PARTITION_SCHEME : schéma de partitionnement du GPU si vous exécutez des charges de travail de GPU, par exemple mixed-2. Le GPU n'est pas partitionné si ce champ n'est pas défini. Pour connaître les profils MIG (Multi-Instance GPU) disponibles, consultez Profils MIG compatibles.
  2. Répétez l'étape précédente pour chaque zone dans laquelle vous souhaitez héberger votre application de conteneur pour votre stratégie de haute disponibilité.

Configurer des équilibreurs de charge

Pour répartir le trafic entre vos pods dans différentes zones, créez des équilibreurs de charge. Vous pouvez créer des équilibreurs de charge externes (ELB) et des équilibreurs de charge internes (ILB), qui peuvent tous deux être configurés au niveau de la zone ou au niveau mondial. Pour cet exemple, configurez un équilibreur de charge interne global et un équilibreur de charge externe global pour votre application de conteneur.

Créer un équilibreur de charge interne global

Les équilibreurs de charge internes (ILB) exposent les services au sein de l'organisation à partir d'un pool d'adresses IP internes attribué à l'organisation. Un service ILB n'est jamais accessible depuis un point de terminaison en dehors de l'organisation.

Pour créer un équilibreur de charge interne global pour vos charges de travail de conteneur, procédez comme suit.

gdcloud

Créez un équilibreur de charge interne qui cible les charges de travail de pod à l'aide de la gcloud CLI.

Cet équilibreur de charge interne cible toutes les charges de travail du projet correspondant au libellé défini dans l'objet Backend. La ressource personnalisée Backend doit être limitée à une zone.

Pour créer un équilibreur de charge interne à l'aide de la gcloud CLI, procédez comme suit :

  1. Créez une ressource Backend zonale dans chaque zone où vos pods sont en cours d'exécution pour définir le point de terminaison de l'ILB :

    gdcloud compute backends create BACKEND_NAME \
        --labels=LABELS \
        --project=PROJECT \
        --cluster=CLUSTER_NAME \
        --zone=ZONE
    

    Remplacez les éléments suivants :

    • BACKEND_NAME : nom choisi pour la ressource de backend, par exemple my-backend.
    • LABELS : sélecteur définissant les points de terminaison entre les pods à utiliser pour cette ressource de backend, par exemple app=web.
    • PROJECT : nom de votre projet.
    • CLUSTER_NAME : cluster Kubernetes auquel la portée des sélecteurs définis est limitée. Si ce champ n'est pas spécifié, tous les points de terminaison portant le libellé indiqué sont sélectionnés. Ce champ est facultatif.
    • ZONE : zone à utiliser pour cet appel. Pour prédéfinir l'indicateur de zone pour toutes les commandes qui l'exigent, exécutez gdcloud config set core/zone ZONE. L'indicateur de zone n'est disponible que dans les environnements multizones. Ce champ est facultatif.

    Répétez cette étape pour chaque zone de votre univers GDC.

  2. Créez une ressource BackendService globale :

    gdcloud compute backend-services create BACKEND_SERVICE_NAME \
        --project=PROJECT \
        --target-ports=TARGET_PORTS \
        --global
    

    Remplacez les éléments suivants :

    • BACKEND_SERVICE_NAME : nom du service de backend.
    • PROJECT : nom de votre projet.
    • TARGET_PORTS : liste de ports cibles séparés par une virgule que ce service de backend traduit. Chaque port cible spécifie le protocole, le port sur la règle de transfert et le port sur l'instance de backend. Vous pouvez spécifier plusieurs ports cibles. Ce champ doit être au format protocol:port:targetport, par exemple TCP:80:8080. Ce champ est facultatif.
  3. Ajoutez la ressource BackendService à la ressource Backend précédemment créée dans chaque zone :

    gdcloud compute backend-services add-backend BACKEND_SERVICE_NAME \
        --backend-zone=ZONE \
        --backend=BACKEND_NAME \
        --project=PROJECT \
        --global
    

    Remplacez les éléments suivants :

    • BACKEND_SERVICE_NAME : nom du service de backend global.
    • ZONE : zone du backend.
    • BACKEND_NAME : nom du backend zonal.
    • PROJECT : nom de votre projet.

    Effectuez cette étape pour chaque backend zonal que vous avez créé précédemment.

  4. Créez une ressource ForwardingRule interne qui définit l'adresse IP virtuelle (VIP) à laquelle le service est disponible :

    gdcloud compute forwarding-rules create FORWARDING_RULE_INTERNAL_NAME \
        --backend-service=BACKEND_SERVICE_NAME \
        --cidr=CIDR \
        --ip-protocol-port=PROTOCOL_PORT \
        --load-balancing-scheme=INTERNAL \
        --project=PROJECT \
        --global
    

    Remplacez les éléments suivants :

    • FORWARDING_RULE_INTERNAL_NAME : nom de la règle de transfert.
    • CIDR : CIDR à utiliser pour votre règle de transfert. Ce champ est facultatif. Si aucune valeur n'est spécifiée, un CIDR IPv4/32 est automatiquement réservé à partir du pool d'adresses IP mondiales. Spécifiez le nom d'une ressource Subnet dans le même espace de noms que cette règle de transfert. Une ressource Subnet représente les informations de demande et d'allocation d'un sous-réseau mondial. Pour en savoir plus sur les ressources Subnet, consultez Gérer les sous-réseaux.
    • PROTOCOL_PORT : protocole et port à exposer sur la règle de transfert. Ce champ doit être au format ip-protocol=TCP:80. Le port exposé doit être le même que celui que l'application réelle expose à l'intérieur du conteneur.
  5. Pour valider l'équilibreur de charge interne configuré, vérifiez la condition Ready sur chacun des objets créés. Vérifiez le trafic avec une requête curl adressée à l'adresse IPV :

    1. Pour obtenir l'adresse IP virtuelle attribuée, décrivez la règle de transfert :

      gdcloud compute forwarding-rules describe FORWARDING_RULE_INTERNAL_NAME --global
      
    2. Vérifiez le trafic avec une requête curl à l'adresse IPV au port spécifié dans le champ de la règle de transfert :

      curl http://FORWARDING_RULE_VIP:PORT
      

    Remplacez les éléments suivants :

    • FORWARDING_RULE_VIP : adresse IP virtuelle de la règle de transfert.
    • PORT : numéro de port de la règle de transfert.

API

Créez un équilibreur de charge interne qui cible les charges de travail de conteneur à l'aide de l'API KRM. Cet équilibreur de charge interne cible toutes les charges de travail du projet correspondant au libellé défini dans l'objet Backend. Pour créer un équilibreur de charge interne mondial à l'aide de l'API KRM, procédez comme suit :

  1. Créez une ressource Backend pour définir les points de terminaison de l'équilibreur de charge interne. Créez des ressources Backend pour chaque zone dans laquelle les charges de travail de conteneur sont placées :

    kubectl --kubeconfig MANAGEMENT_API_SERVER apply -f - <<EOF
    apiVersion: networking.gdc.goog/v1
    kind: Backend
    metadata:
      namespace: PROJECT
      name: BACKEND_NAME
    spec:
      clusterName: CLUSTER_NAME
      endpointsLabels:
        matchLabels:
          app: APP_NAME
    EOF
    

    Remplacez les éléments suivants :

    • MANAGEMENT_API_SERVER : chemin d'accès kubeconfig du serveur kubeconfig de l'API Management zonale. Pour en savoir plus, consultez Passer à un contexte zonal.
    • PROJECT : nom de votre projet.
    • BACKEND_NAME : nom de la ressource Backend.
    • CLUSTER_NAME : cluster Kubernetes auquel la portée des sélecteurs définis est limitée. Si ce champ n'est pas spécifié, tous les points de terminaison portant le libellé indiqué sont sélectionnés. Ce champ est facultatif.
    • APP_NAME : nom de votre application de conteneur.

    Vous pouvez utiliser la même ressource Backend pour chaque zone ou créer des ressources Backend avec des ensembles de libellés différents pour chaque zone.

  2. Créez un objet BackendService à l'aide de la ressource Backend créée précédemment. Veillez à inclure la ressource HealthCheck :

    kubectl --kubeconfig GLOBAL_API_SERVER apply -f - <<EOF
    apiVersion: networking.global.gdc.goog/v1
    kind: BackendService
    metadata:
      namespace: PROJECT
      name: BACKEND_SERVICE_NAME
    spec:
      backendRefs:
      - name: BACKEND_NAME
        zone: ZONE
      healthCheckName: HEALTH_CHECK_NAME
      targetPorts:
      - port: PORT
        protocol: PROTOCOL
        targetPort: TARGET_PORT
    EOF
    

    Remplacez les éléments suivants :

    • GLOBAL_API_SERVER : chemin d'accès kubeconfig du serveur d'API global.
    • PROJECT : nom de votre projet.
    • BACKEND_SERVICE_NAME : nom choisi pour votre ressource BackendService.
    • HEALTH_CHECK_NAME : nom de la ressource HealthCheck que vous avez créée précédemment.
    • BACKEND_NAME : nom de la ressource Backend zonale.
    • ZONE : zone dans laquelle réside la ressource Backend. Vous pouvez spécifier plusieurs backends dans le champ backendRefs. Exemple :

      - name: my-backend-1
        zone: us-east1-a
      - name: my-backend-2
        zone: us-east1-b
      

      Le champ targetPorts est facultatif. Cette ressource liste les ports que cette ressource BackendService traduit. Si vous utilisez cet objet, indiquez les valeurs suivantes :

    • PORT : port exposé par le service.

    • PROTOCOL : protocole de couche 4 auquel le trafic doit correspondre. Seuls les protocoles TCP et UDP sont acceptés.

    • TARGET_PORT : port vers lequel la valeur est traduite, par exemple 8080. La valeur ne peut pas être répétée dans un objet donné.

      Voici un exemple de fichier targetPorts :

      targetPorts:
        - port: 80
          protocol: TCP
          targetPort: 8080
      
  3. Créez une ressource ForwardingRule interne définissant l'adresse IP virtuelle (VIP) à laquelle le service est disponible.

    kubectl --kubeconfig GLOBAL_API_SERVER apply -f - <<EOF
    apiVersion: networking.global.gdc.goog/v1
    kind: ForwardingRuleInternal
    metadata:
      namespace: PROJECT
      name: FORWARDING_RULE_INTERNAL_NAME
    spec:
      cidrRef: CIDR
      ports:
      - port: PORT
        protocol: PROTOCOL
      backendServiceRef:
        name: BACKEND_SERVICE_NAME
    EOF
    

    Remplacez les éléments suivants :

    • GLOBAL_API_SERVER : chemin d'accès kubeconfig du serveur d'API global.
    • PROJECT : nom de votre projet.
    • FORWARDING_RULE_INTERNAL_NAME : nom choisi pour votre ressource ForwardingRuleInternal.
    • CIDR : CIDR à utiliser pour votre règle de transfert. Ce champ est facultatif. Si aucune valeur n'est spécifiée, un CIDR IPv4/32 est automatiquement réservé à partir du pool d'adresses IP mondiales. Spécifiez le nom d'une ressource Subnet dans le même espace de noms que cette règle de transfert. Une ressource Subnet représente les informations de demande et d'allocation d'un sous-réseau mondial. Pour en savoir plus sur les ressources Subnet, consultez Gérer les sous-réseaux.
    • PORT : port à exposer sur la règle de transfert. Utilisez le champ ports pour spécifier un tableau de ports de couche 4 pour lesquels les paquets sont transférés vers les backends configurés avec cette règle de transfert. Vous devez spécifier au moins un port. Utilisez le champ port pour spécifier un numéro de port. Le port exposé doit être le même que celui que l'application réelle expose à l'intérieur du conteneur.
    • PROTOCOL : protocole à utiliser pour la règle de transfert, tel que TCP. Une entrée du tableau ports doit se présenter comme suit :

      ports:
      - port: 80
        protocol: TCP
      
  4. Pour valider l'équilibreur de charge interne configuré, vérifiez la condition Ready sur chacun des objets créés. Vérifiez le trafic avec une requête curl adressée à l'adresse IPV :

    1. Récupérez l'adresse IP virtuelle :

      kubectl get forwardingruleinternal -n PROJECT
      

      La sortie ressemble à ceci :

      NAME           BACKENDSERVICE                  CIDR              READY
      ilb-name       BACKEND_SERVICE_NAME            192.0.2.0/32      True
      
    2. Testez le trafic avec une requête curl à l'adresse IP virtuelle au port spécifié dans le champ de la règle de transfert :

      curl http://FORWARDING_RULE_VIP:PORT
      

      Remplacez les éléments suivants :

      • FORWARDING_RULE_VIP : adresse IP virtuelle de la règle de transfert.
      • PORT : numéro de port du champ dans la règle de transfert.

Créer un équilibreur de charge externe global

Les équilibreurs de charge externes (ELB) exposent les services pour permettre l'accès depuis l'extérieur de l'organisation à partir des adresses IP d'un pool attribué à l'organisation à partir du pool d'adresses IP externes des instances plus important.

Pour créer un ELB global pour vos charges de travail de conteneur, procédez comme suit.

gdcloud

Utilisez la gcloud CLI pour créer un équilibreur de charge externe global qui cible toutes les charges de travail du projet correspondant au libellé défini dans l'objet Backend. La ressource personnalisée Backend doit être limitée à une zone.

  1. Pour que les services ELB fonctionnent, vous devez configurer et appliquer votre propre transfert de données ProjectNetworkPolicy personnalisé dans la règle afin d'autoriser le trafic vers les charges de travail de ce service ELB. Les règles de réseau contrôlent l'accès à vos charges de travail, et non à l'équilibreur de charge lui-même. Les ELB exposent les charges de travail à votre réseau client, ce qui nécessite des règles de réseau explicites pour autoriser le trafic externe vers le port de charge de travail, tel que 8080.

    Spécifiez l'adresse CIDR externe pour autoriser le trafic vers les charges de travail de cet équilibreur de charge externe :

    kubectl --kubeconfig GLOBAL_API_SERVER apply -f - <<EOF
    apiVersion: networking.global.gdc.goog/v1
    kind: ProjectNetworkPolicy
    metadata:
      namespace: PROJECT
      name: allow-inbound-traffic-from-external
    spec:
      policyType: Ingress
      subject:
        subjectType: UserWorkload
      ingress:
      - from:
        - ipBlock:
            cidr: CIDR
        ports:
        - protocol: TCP
          port: PORT
    EOF
    

    Remplacez les éléments suivants :

    • GLOBAL_API_SERVER : chemin d'accès kubeconfig du serveur d'API global. Si vous n'avez pas encore généré de fichier kubeconfig pour le serveur d'API global, consultez Générer manuellement un fichier kubeconfig pour en savoir plus.
    • PROJECT : nom de votre projet.
    • CIDR : CIDR externe à partir duquel l'ELB doit être accessible. Cette règle est requise, car l'équilibreur de charge externe utilise le retour direct du serveur (DSR), qui préserve l'adresse IP externe source et contourne l'équilibreur de charge sur le chemin de retour. Pour en savoir plus, consultez Créer une règle de pare-feu d'entrée globale pour le trafic inter-organisation.
    • PORT : port de backend sur les pods situés derrière l'équilibreur de charge. Cette valeur se trouve dans le champ .spec.ports[].targetPortfield du fichier manifeste de la ressource Service. Ce champ est facultatif.

    Cette configuration permet à toutes les ressources des projets d'accéder à la plage CIDR spécifiée.

  2. Créez une ressource Backend dans chaque zone pour définir le point de terminaison du CLB :

    gdcloud compute backends create BACKEND_NAME \
      --labels=LABELS \
      --project=PROJECT \
      --cluster=CLUSTER_NAME \
      --zone=ZONE
    

    Remplacez les éléments suivants :

    • BACKEND_NAME : nom de la ressource de backend, par exemple my-backend.
    • LABELS : sélecteur définissant les points de terminaison entre les pods à utiliser pour cette ressource de backend, par exemple app=web.
    • PROJECT : nom de votre projet.
    • CLUSTER_NAME : cluster Kubernetes auquel la portée des sélecteurs définis est limitée. Si ce champ n'est pas spécifié, tous les points de terminaison portant le libellé indiqué sont sélectionnés. Ce champ est facultatif.
    • ZONE : zone à utiliser pour cet appel. Pour prédéfinir l'indicateur de zone pour toutes les commandes qui l'exigent, exécutez gdcloud config set core/zone ZONE. L'indicateur de zone n'est disponible que dans les environnements multizones. Ce champ est facultatif.

    Vous pouvez utiliser la même ressource Backend pour chaque zone ou créer des ressources Backend avec des ensembles de libellés différents pour chaque zone.

  3. Créez une ressource BackendService globale :

    gdcloud compute backend-services create BACKEND_SERVICE_NAME \
      --project=PROJECT \
      --target-ports=TARGET_PORTS \
      --health-check=HEALTH_CHECK_NAME \
      --global
    

    Remplacez les éléments suivants :

    • BACKEND_SERVICE_NAME : nom choisi pour ce service de backend.
    • PROJECT : nom de votre projet.
    • TARGET_PORTS : liste de ports cibles séparés par une virgule que ce service de backend traduit. Chaque port cible spécifie le protocole, le port sur la règle de transfert et le port sur l'instance de backend. Vous pouvez spécifier plusieurs ports cibles. Ce champ doit être au format protocol:port:targetport, par exemple TCP:80:8080. Ce champ est facultatif.
    • HEALTH_CHECK_NAME : nom de la ressource de vérification de l'état. Ce champ est facultatif.
  4. Ajoutez la ressource BackendService globale à la ressource Backend zonale créée précédemment :

    gdcloud compute backend-services add-backend BACKEND_SERVICE_NAME \
      --backend=BACKEND_NAME \
      --backend-zone=ZONE \
      --project=PROJECT \
      --global
    

    Effectuez cette étape pour chaque backend zonal que vous avez créé précédemment.

  5. Créez une ressource ForwardingRule externe qui définit l'adresse IP virtuelle à laquelle le service est disponible :

    gdcloud compute forwarding-rules create FORWARDING_RULE_EXTERNAL_NAME \
      --backend-service=BACKEND_SERVICE_NAME \
      --cidr=CIDR \
      --ip-protocol-port=PROTOCOL_PORT \
      --load-balancing-scheme=EXTERNAL \
      --project=PROJECT \
      --global
    

    Remplacez les éléments suivants :

    • FORWARDING_RULE_EXTERNAL_NAME : nom de la règle de transfert.
    • CIDR : CIDR à utiliser pour votre règle de transfert. Ce champ est facultatif. Si aucune valeur n'est spécifiée, un CIDR IPv4/32 est automatiquement réservé à partir du pool d'adresses IP mondiales. Spécifiez le nom d'une ressource Subnet dans le même espace de noms que cette règle de transfert. Une ressource Subnet représente les informations de demande et d'allocation d'un sous-réseau mondial. Pour en savoir plus sur les ressources Subnet, consultez Gérer les sous-réseaux.
    • PROTOCOL_PORT : protocole et port à exposer sur la règle de transfert. Ce champ doit être au format ip-protocol=TCP:80. Le port exposé doit être le même que celui que l'application expose réellement dans le conteneur.
    • PROJECT : nom de votre projet.
  6. Pour valider l'ELB configuré, vérifiez la condition Ready sur chacun des objets créés. Vérifiez le trafic avec une requête curl à l'adresse IP virtuelle :

    1. Pour obtenir l'adresse IP virtuelle attribuée, décrivez la règle de transfert :

      gdcloud compute forwarding-rules describe FORWARDING_RULE_EXTERNAL_NAME
      
    2. Vérifiez le trafic avec une requête curl adressée à la VIP au port spécifié dans le champ PROTOCOL_PORT de la règle de transfert :

      curl http://FORWARDING_RULE_VIP:PORT
      

      Remplacez les éléments suivants :

      • FORWARDING_RULE_VIP : adresse IP virtuelle de la règle de transfert.
      • PORT : numéro de port du champ PROTOCOL_PORT dans la règle de transfert.

API

Créez un ELB qui cible les charges de travail des pods à l'aide de l'API KRM. Cet ELB cible toutes les charges de travail du projet correspondant au libellé défini dans l'objet Backend. Pour créer un ELB zonal à l'aide de l'API KRM, procédez comme suit :

  1. Pour que les services ELB fonctionnent, vous devez configurer et appliquer votre propre transfert de données ProjectNetworkPolicy personnalisé dans la règle afin d'autoriser le trafic vers les charges de travail de ce service ELB. Les règles de réseau contrôlent l'accès à vos charges de travail, et non à l'équilibreur de charge lui-même. Les ELB exposent les charges de travail à votre réseau client, ce qui nécessite des règles de réseau explicites pour autoriser le trafic externe vers le port de charge de travail, tel que 8080.

    Spécifiez l'adresse CIDR externe pour autoriser le trafic vers les charges de travail de cet équilibreur de charge externe :

    kubectl --kubeconfig GLOBAL_API_SERVER apply -f - <<EOF
    apiVersion: networking.global.gdc.goog/v1
    kind: ProjectNetworkPolicy
    metadata:
      namespace: PROJECT
      name: allow-inbound-traffic-from-external
    spec:
      policyType: Ingress
      subject:
        subjectType: UserWorkload
      ingress:
      - from:
        - ipBlock:
            cidr: CIDR
        ports:
        - protocol: TCP
          port: PORT
    EOF
    

    Remplacez les éléments suivants :

    • GLOBAL_API_SERVER : chemin d'accès kubeconfig du serveur d'API global. Si vous n'avez pas encore généré de fichier kubeconfig pour le serveur d'API global, consultez Générer manuellement un fichier kubeconfig pour en savoir plus.
    • PROJECT : nom de votre projet.
    • CIDR : CIDR externe à partir duquel l'ELB doit être accessible. Cette règle est requise, car l'équilibreur de charge externe utilise le retour direct du serveur (DSR), qui préserve l'adresse IP externe source et contourne l'équilibreur de charge sur le chemin de retour. Pour en savoir plus, consultez Créer une règle de pare-feu d'entrée globale pour le trafic inter-organisation.
    • PORT : port de backend sur les pods situés derrière l'équilibreur de charge. Cette valeur se trouve dans le champ .spec.ports[].targetPortfield du fichier manifeste de la ressource Service. Ce champ est facultatif.
  2. Créez une ressource Backend pour définir les points de terminaison du ELB. Créez des ressources Backend pour chaque zone dans laquelle les charges de travail sont placées :

    kubectl --kubeconfig MANAGEMENT_API_SERVER apply -f - <<EOF
    apiVersion: networking.gdc.goog/v1
    kind: Backend
    metadata:
      namespace: PROJECT
      name: BACKEND_NAME
    spec:
      clusterName: CLUSTER_NAME
      endpointsLabels:
        matchLabels:
          app: APP_NAME
    EOF
    

    Remplacez les éléments suivants :

    • MANAGEMENT_API_SERVER : chemin d'accès kubeconfig du serveur kubeconfig de l'API Management zonale. Si vous n'avez pas encore généré de fichier kubeconfig pour le serveur d'API dans votre zone cible, consultez Générer manuellement un fichier kubeconfig pour en savoir plus.
    • PROJECT : nom de votre projet.
    • BACKEND_NAME : le nom de la ressource Backend.
    • CLUSTER_NAME : cluster Kubernetes auquel la portée des sélecteurs définis est limitée. Si ce champ n'est pas spécifié, tous les points de terminaison portant le libellé indiqué sont sélectionnés. Ce champ est facultatif.
    • APP_NAME : nom de votre application de conteneur.

    Vous pouvez utiliser la même ressource Backend pour chaque zone ou créer des ressources Backend avec des ensembles de libellés différents pour chaque zone.

  3. Créez un objet BackendService à l'aide de la ressource Backend créée précédemment :

    kubectl --kubeconfig GLOBAL_API_SERVER apply -f - <<EOF
    apiVersion: networking.global.gdc.goog/v1
    kind: BackendService
    metadata:
      namespace: PROJECT
      name: BACKEND_SERVICE_NAME
    spec:
      backendRefs:
      - name: BACKEND_NAME
        zone: ZONE
      healthCheckName: HEALTH_CHECK_NAME
    EOF
    

    Remplacez les éléments suivants :

    • BACKEND_SERVICE_NAME : nom choisi pour votre ressource BackendService.
    • HEALTH_CHECK_NAME : nom de la ressource HealthCheck que vous avez créée précédemment. N'incluez pas ce champ si vous configurez un ELB pour des charges de travail de pod.
    • ZONE : zone dans laquelle réside la ressource Backend. Vous pouvez spécifier plusieurs backends dans le champ backendRefs. Exemple :
    - name: my-backend-1
      zone: us-east1-a
    - name: my-backend-2
      zone: us-east1-b
    

  4. Créez une ressource ForwardingRule externe définissant l'adresse IP virtuelle à laquelle le service est disponible.

    kubectl --kubeconfig GLOBAL_API_SERVER apply -f - <<EOF
    apiVersion: networking.global.gdc.goog/v1
    kind: ForwardingRuleExternal
    metadata:
      namespace: PROJECT
      name: FORWARDING_RULE_EXTERNAL_NAME
    spec:
      cidrRef: CIDR
      ports:
      - port: PORT
        protocol: PROTOCOL
      backendServiceRef:
        name: BACKEND_SERVICE_NAME
    EOF
    

    Remplacez les éléments suivants :

    • FORWARDING_RULE_EXTERNAL_NAME : nom choisi pour votre ressource ForwardingRuleExternal.
    • CIDR : CIDR à utiliser pour votre règle de transfert. Ce champ est facultatif. Si aucune valeur n'est spécifiée, un CIDR IPv4/32 est automatiquement réservé à partir du pool d'adresses IP mondiales. Spécifiez le nom d'une ressource Subnet dans le même espace de noms que cette règle de transfert. Une ressource Subnet représente les informations de demande et d'allocation d'un sous-réseau mondial. Pour en savoir plus sur les ressources Subnet, consultez Gérer les sous-réseaux.
    • PORT : port à exposer sur la règle de transfert. Utilisez le champ ports pour spécifier un tableau de ports de couche 4 pour lesquels les paquets sont transférés vers les backends configurés avec cette règle de transfert. Vous devez spécifier au moins un port. Utilisez le champ port pour spécifier un numéro de port. Le port exposé doit être le même que celui que l'application réelle expose à l'intérieur du conteneur.
    • PROTOCOL : protocole à utiliser pour la règle de transfert, tel que TCP. Une entrée du tableau ports doit se présenter comme suit :
    ports:
    - port: 80
      protocol: TCP
    
  5. Pour valider l'ELB configuré, vérifiez la condition Ready sur chacun des objets créés. Essayez de tester le trafic avec une requête curl adressée à l'adresse IP virtuelle.

    1. Récupérez l'adresse IP virtuelle du projet :

      kubectl get forwardingruleexternal -n PROJECT
      

      La sortie ressemble à ceci :

      NAME           BACKENDSERVICE                  CIDR              READY
      elb-name       BACKEND_SERVICE_NAME            192.0.2.0/32      True
      
    2. Vérifiez le trafic à l'aide d'une requête curl vers l'adresse IP virtuelle au port spécifié dans le champ PORT de la règle de transfert :

      curl http://FORWARDING_RULE_VIP:PORT
      

      Remplacez FORWARDING_RULE_VIP:PORT par l'adresse IP virtuelle et le port de la règle de transfert, par exemple 192.0.2.0:80.

Déployer des charges de travail de conteneur sur chaque cluster zonal

Les charges de travail de conteneur ne sont pas une ressource globale. Vous devez donc déployer chacune de vos applications de conteneur séparément dans les clusters Kubernetes zonaux.

  1. Connectez-vous à la zone qui héberge votre cluster Kubernetes :

    gdcloud config set core/zone ZONE
    
  2. Vérifiez que votre image de conteneur est disponible dans le registre Harbor géré. Pour en savoir plus, consultez le tutoriel Déployer une application de conteneur.

  3. Créez un fichier manifeste pour votre charge de travail de conteneur et déployez-le sur votre cluster Kubernetes zonal :

    kubectl --kubeconfig KUBERNETES_CLUSTER -n PROJECT \
        apply -f - <<EOF
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: DEPLOYMENT_NAME
    spec:
      replicas: NUMBER_OF_REPLICAS
      selector:
        matchLabels:
          run: APP_NAME
      template:
        metadata:
          labels:
            run: APP_NAME
        spec:
          containers:
          - name: CONTAINER_NAME
            image: HARBOR_INSTANCE_URL/HARBOR_PROJECT_NAME/IMAGE:TAG
    EOF
    

    Remplacez les éléments suivants :

    • KUBERNETES_CLUSTER : fichier kubeconfig du cluster Kubernetes zonal sur lequel vous déployez des charges de travail de conteneurs. Si vous n'avez pas encore généré de fichier kubeconfig pour votre cluster Kubernetes zonal, consultez Générer manuellement un fichier kubeconfig pour en savoir plus.
    • PROJECT : espace de noms du projet dans lequel déployer les charges de travail du conteneur.
    • DEPLOYMENT_NAME : nom de votre déploiement de conteneur.
    • NUMBER_OF_REPLICAS : nombre d'objets Pod répliqués gérés par le déploiement.
    • APP_NAME : nom de l'application à exécuter dans le déploiement.
    • CONTAINER_NAME : nom du conteneur.
    • HARBOR_INSTANCE_URL : URL de l'instance Harbor, par exemple harbor-1.org-1.zone1.google.gdc.test.. Pour récupérer l'URL de l'instance Harbor, consultez Afficher les instances du registre Harbor.
    • HARBOR_PROJECT_NAME : nom du projet Harbor, tel que my-project.
    • IMAGE : nom de l'image, par exemple nginx.
    • TAG : tag de la version de l'image que vous souhaitez extraire, par exemple 1.0.
  4. Répétez les étapes précédentes pour chaque zone de votre univers GDC. Assurez-vous que votre application de conteneur réside dans chaque zone que vous souhaitez pour votre stratégie de haute disponibilité.

Exposer votre application de conteneur à l'aide de Kubernetes

Vous devez exposer votre application de conteneur pour permettre l'accès à partir d'autres ressources de votre univers GDC.

  1. Créez une ressource Service de type: LoadBalancer. Cette ressource expose les pods de votre application sur un réseau.

    kubectl --kubeconfig KUBERNETES_CLUSTER -n PROJECT \
    apiVersion: v1
    kind: Service
    metadata:
      name: SERVICE_NAME
    spec:
      selector:
        app: APP_NAME
      ports:
        - port: 80
          protocol: TCP
      type: LoadBalancer
    EOF
    

    Remplacez les éléments suivants :

    • KUBERNETES_CLUSTER : fichier kubeconfig du cluster Kubernetes zonal sur lequel vous déployez des charges de travail de conteneurs.
    • PROJECT : espace de noms du projet dans lequel résident vos charges de travail de conteneur.
    • SERVICE_NAME : nom du service d'équilibreur de charge.
    • APP_NAME : libellé que vous avez appliqué à votre application de conteneur.
  2. Créez une ressource personnalisée NetworkPolicy pour autoriser tout le trafic réseau vers l'espace de noms par défaut :

    kubectl --kubeconfig KUBERNETES_CLUSTER -n PROJECT \
    apiVersion: networking.k8s.io/v1
    kind: NetworkPolicy
    metadata:
      annotations:
      name: allow-all
    spec:
      ingress:
      - from:
        - ipBlock:
            cidr: 0.0.0.0/0
      podSelector: {}
      policyTypes:
      - Ingress
    EOF
    

Provisionner un espace de stockage persistant pour vos pods

Vous devez créer une ressource PersistentVolumeClaim (PVC) pour fournir un stockage persistant aux pods d'application.

Les instructions suivantes montrent comment créer un volume à l'aide de l'outil standard-rwo StorageClass de GDC.

  1. Créer une ressource PersistentVolumeClaim Par exemple, configurez-le avec un mode d'accès ReadWriteOnce et une classe de stockage standard-rwo :

    kubectl --kubeconfig KUBERNETES_CLUSTER \
        --namespace PROJECT apply -f - <<EOF
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: PVC_NAME
    spec:
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 10Gi
      storageClassName: standard-rwo
    EOF
    

    Remplacez les éléments suivants :

    • KUBERNETES_CLUSTER : fichier kubeconfig pour le cluster Kubernetes.
    • PROJECT : espace de noms du projet dans lequel créer la PVC.
    • PVC_NAME : nom de l'objet PersistentVolumeClaim.
  2. Les objets PersistentVolume (PV) sont provisionnés de manière dynamique. Vérifiez l'état des nouveaux PV dans votre cluster Kubernetes :

    kubectl get pv --kubeconfig KUBERNETES_CLUSTER
    

    Le résultat ressemble à ce qui suit :

    NAME       CAPACITY   ACCESS MODES   STATUS      CLAIM     STORAGECLASS   AGE
    pvc-uuidd  10Gi       RWO            Bound       pvc-name  standard-rwo   60s
    
  3. Configurez vos charges de travail de conteneur pour qu'elles utilisent le PVC. Voici un exemple de fichier manifeste de pod qui utilise une PVC standard-rwo :

    kubectl --kubeconfig KUBERNETES_CLUSTER \
        --namespace PROJECT apply -f - <<EOF
    apiVersion: apps/v1
    kind: Pod
    metadata:
      name: web-server-deployment
      labels:
        app: APP_LABEL
    spec:
      containers:
      - name: CONTAINER_NAME
        image: HARBOR_INSTANCE_URL/HARBOR_PROJECT_NAME/IMAGE:TAG
        volumeMounts:
        - mountPath: MOUNT_PATH
          name: data
      volumes:
      - name: data
        persistentVolumeClaim:
          claimName: PVC_NAME
    EOF
    

    Remplacez les éléments suivants :

    • KUBERNETES_CLUSTER : fichier kubeconfig du cluster Kubernetes sur lequel vous déployez des charges de travail de conteneurs.
    • PROJECT : espace de noms du projet dans lequel réside la PVC.
    • APP_LABEL : libellé que vous avez appliqué à votre application de conteneur.
    • CONTAINER_NAME : nom du conteneur.
    • HARBOR_INSTANCE_URL : URL de l'instance Harbor, par exemple harbor-1.org-1.zone1.google.gdc.test.. Pour récupérer l'URL de l'instance Harbor, consultez Afficher les instances du registre Harbor.
    • HARBOR_PROJECT_NAME : nom du projet Harbor, tel que my-project.
    • IMAGE : nom de l'image, par exemple nginx.
    • TAG : tag de la version de l'image que vous souhaitez extraire, par exemple 1.0.
    • MOUNT_PATH : chemin d'accès dans le pod pour installer votre volume.
    • PVC_NAME : PVC que vous avez créé.

Configurer la réplication asynchrone du stockage

Les univers multizones GDC permettent d'utiliser des ressources de stockage répliquées telles que des volumes et des buckets en mode asynchrone pour les scénarios de reprise après sinistre. Ces options de ressources de stockage permettent la réplication asynchrone des données entre deux zones d'une même région. La réplication asynchrone s'effectue en arrière-plan et fournit un objectif de point de récupération (RPO) faible, mais non nul, en cas de sinistre. Toutes les données répliquées sont en ligne et immédiatement accessibles, mais une procédure de basculement manuel peut être nécessaire pour permettre l'écriture dans la zone secondaire.

Vous pouvez choisir l'un des types de réplication de stockage asynchrone suivants pour votre application de conteneur :

Créer un bucket bizone pour le stockage d'objets

Les données de stockage d'objets sont écrites dans un seul bucket dont les données sont stockées dans les deux zones. Étant donné que les données sont copiées de manière asynchrone entre les zones, il est possible que les zones ne contiennent pas les mêmes versions d'objet à un moment donné, mais elles finiront par devenir équivalentes si aucune autre modification n'est apportée. Contrairement à la réplication de volumes, les buckets répliqués sont accessibles en écriture pendant les partitions de zone. Chaque écriture dans un objet produit une version différente. La dernière version dans l'une ou l'autre zone sera l'état final une fois la connectivité rétablie.

  1. Vérifiez que votre opérateur d'infrastructure (IO) a créé la ressource personnalisée BucketLocationConfig, qui est requise pour la réplication asynchrone entre les zones pour le stockage d'objets. Cette ressource doit être déployée sur le serveur d'API global racine.

  2. Créez la ressource personnalisée Bucket à double zone :

    kubectl --kubeconfig GLOBAL_API_SERVER apply -f - <<EOF
    apiVersion: object.global.gdc.goog/v1
    kind: Bucket
    metadata:
      name: BUCKET_NAME
      namespace: PROJECT
    spec:
      location: LOCATION_NAME
      description: Sample DZ Bucket
      storageClass: Standard
    EOF
    

    Remplacez les éléments suivants :

    • GLOBAL_API_SERVER : fichier kubeconfig pour le serveur d'API global.
    • BUCKET_NAME : nom du bucket de stockage.
    • PROJECT : nom du projet dans lequel réside le bucket.
    • LOCATION_NAME : emplacement physique où se trouvent les données d'objets dans le bucket. Il doit correspondre au nom d'une ressource BucketLocation existante. Pour interroger le serveur d'API global de votre organisation afin d'obtenir la liste des ressources BucketLocation disponibles, exécutez kubectl --kubeconfig GLOBAL_API_SERVER bucketlocations. S'il n'y a pas de ressources BucketLocation, contactez votre IO pour vérifier qu'il a activé la réplication asynchrone.

Configurer la réplication asynchrone du stockage de blocs entre les zones

Le stockage de blocs répliqué fournit des volumes répliqués de manière asynchrone (PV), qui maintiennent l'équivalence des blocs entre les volumes principal et secondaire. En raison de la nature asynchrone, le volume secondaire reflète l'état de la zone principale à un moment donné dans le passé (RPO non nul). Le volume secondaire ne peut pas être monté tant qu'il reste la cible de la réplication, ce qui nécessite une intervention manuelle pour mettre fin à la relation et permettre les opérations d'écriture.

Vous devez configurer une relation de réplication du stockage entre les zones pour créer des données répliquées disponibles pour le basculement si les données de la zone source deviennent indisponibles. Cela est pertinent si vous utilisez le stockage par blocs pour votre application de conteneur.

Avant de commencer, vérifiez que votre opérateur d'infrastructure (IO) a créé et configuré les ressources personnalisées StorageClusterPeering et StorageVirtualMachinePeering pour permettre la réplication du stockage par blocs dans les zones. Cette ressource doit être déployée sur le serveur d'API racine global.

  1. Créez un fichier YAML de ressource personnalisée VolumeReplicationRelationship et déployez-le sur le serveur d'API global :

    kubectl --kubeconfig GLOBAL_API_SERVER apply -f - <<EOF
    apiVersion: storage.global.gdc.goog/v1
    kind: VolumeReplicationRelationship
    metadata:
      name: PVC_REPL_NAME
      namespace: PROJECT
    spec:
      source:
        pvc:
          clusterRef: SOURCE_PVC_CLUSTER
          pvcRef: SOURCE_PVC
        zoneRef: SOURCE_ZONE
    destination:
        pvc:
          clusterRef: DEST_PVC_CLUSTER
        zoneRef: DEST_ZONE
    EOF
    

    Remplacez les éléments suivants :

    • GLOBAL_API_SERVER : fichier kubeconfig pour le serveur d'API global.
    • PVC_REPL_NAME : nom de la relation de réplication de volume.
    • PROJECT : projet dans lequel réside l'infrastructure de stockage.
    • SOURCE_PVC_CLUSTER : cluster Kubernetes dans lequel le PVC est hébergé.
    • SOURCE_PVC : PVC de la zone source à répliquer.
    • SOURCE_ZONE : zone source où est hébergé le PVC.
    • DEST_PVC_CLUSTER : cluster Kubernetes de destination vers lequel répliquer le PVC.
    • DEST_ZONE : zone de destination vers laquelle répliquer la PVC.
  2. Créez une ressource personnalisée VolumeFailover dans la zone de destination, ce qui arrête la réplication vers la zone de destination si la zone source est indisponible pour une raison quelconque :

    kubectl --kubeconfig MANAGEMENT_API_SERVER apply -f - <<EOF
    apiVersion: storage.gdc.goog/v1
    kind: VolumeFailover
    metadata:
      name: PVC_FAILOVER_NAME
      namespace: PROJECT
    spec:
      volumeReplicationRelationshipRef: PVC_REPL_NAME
    EOF
    

    Remplacez les éléments suivants :

    • MANAGEMENT_API_SERVER : fichier kubeconfig du serveur de l'API Management zonale.
    • PVC_FAILOVER_NAME : nom du basculement de la PVC.
    • PROJECT : projet dans lequel réside l'infrastructure de stockage.
    • PVC_REPL_NAME : nom de la relation de réplication de volume.

Étapes suivantes