Utiliser Config Sync dans plusieurs environnements avec le rendu automatisé


Ce tutoriel explique comment configurer Config Sync pour Google Kubernetes Engine (GKE) Enterprise dans deux environnements, un pour le développement et un pour la production, en suivant les bonnes pratiques pour Config Sync.

Dans ce scénario, vous faites partie d'une équipe d'administration de plateforme de Foo Corp. Les applications de Foo Corp sont déployées sur GKE Enterprise, avec des ressources réparties sur deux projets, dev et prod. Le projet dev contient un cluster GKE Enterprise de développement et le projet prod contient le cluster GKE Enterprise de production. En tant qu'administrateur de plateforme, votre objectif est de vous assurer que les deux environnements respectent les règles de Foo Corp. et que les ressources de base, telles que les espaces de noms Kubernetes et les comptes de service, restent cohérentes dans les deux environnements.

Le schéma suivant présente les environnements que vous allez configurer dans le présent tutoriel :

Présentation des environnements que vous allez configurer dans ce tutoriel.

Ce tutoriel utilise la fonctionnalité d'affichage automatisé de Config Sync pour afficher les ressources du cluster. Chacun des clusters est configuré pour se synchroniser à partir d'un répertoire contenant un fichier de configuration Kustomization, ce qui déclenche automatiquement le processus de rendu dans Config Sync. Pour en savoir plus, consultez la page Utiliser un dépôt avec des configurations Kustomize et des graphiques Helm.

Comme illustré dans le schéma précédent, vous allez créer les ressources suivantes dans le cadre du présent tutoriel :

  • Deux projets Google Cloud représentant les environnements de développement et de production.
  • Deux clusters GKE Enterprise, dev et prod, dans les projets distincts, avec Config Sync installé.

Architecture du dépôt

Dans ce tutoriel, vous allez configurer Config Sync pour qu'il se synchronise avec les configurations du répertoire config-source/ du dépôt. Le répertoire contient les répertoires et fichiers suivants :

config-source/
├── base
│   ├── foo
│   │   ├── kustomization.yaml
│   │   ├── namespace.yaml
│   │   └── serviceaccount.yaml
│   ├── kustomization.yaml
│   ├── pod-creator-clusterrole.yaml
│   └── pod-creator-rolebinding.yaml
├── cloudbuild.yaml
├── overlays
│   ├── dev
│   │   └── kustomization.yaml
│   └── prod
│       └── kustomization.yaml
└── README.md

Le répertoire config-source inclut les fichiers manifestes base/, ainsi que les superpositions Kustomize dev/ et prod/. Chaque répertoire contient un fichier kustomization.yaml, qui répertorie les fichiers que Kustomize doit gérer et appliquer au cluster. Une série de correctifs est définie dans dev/kustomization.yaml et prod/kustomization.yaml. Ces correctifs manipulent les ressources base/ pour cet environnement spécifique.

Par exemple, l'objet RoleBinding dev permet à tous les développeurs de Foo Corp de déployer des pods sur le cluster de développement, tandis que l'objet RoleBinding prod n'autorise qu'un agent de déploiement continu, deploy-bot@foo-corp.com, à déployer des pods en production :

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- ../../base
patches:
# ServiceAccount - make name unique per environ
- target:
    kind: ServiceAccount
    name: foo-ksa
  patch: |-
    - op: replace
      path: /metadata/name
      value: foo-ksa-dev
    - op: replace
      path: /metadata/namespace
      value: foo-dev
# Pod creators - give all Foo Corp developers access
- target:
    kind: RoleBinding
    name: pod-creators
  patch: |-
    - op: replace
      path: /subjects/0/name
      value: developers-all@foo-corp.com
commonLabels:
  environment: dev

Objectifs

  • Configurez Config Sync pour afficher et synchroniser automatiquement la configuration des deux environnements distincts.

Coûts

Dans ce document, vous utilisez les composants facturables suivants de Google Cloud :

Obtenez une estimation des coûts en fonction de votre utilisation prévue à l'aide du simulateur de coût. Les nouveaux utilisateurs de Google Cloud peuvent bénéficier d'un essai gratuit.

Une fois que vous avez terminé les tâches décrites dans ce document, vous pouvez éviter de continuer à payer des frais en supprimant les ressources que vous avez créées. Pour en savoir plus, consultez la section Effectuer un nettoyage.

Avant de commencer

Avant de commencer ce tutoriel, assurez-vous d'avoir effectué les étapes suivantes :

  1. Dans la console Google Cloud, sur la page du sélecteur de projet, choisissez ou créez deux projets Google Cloud.

    Accéder au sélecteur de projet

  2. Make sure that billing is enabled for your Google Cloud project.

  3. Mettez à jour votre Google Cloud CLI vers la version la plus récente.

  4. Installez ou mettez à niveau la commande nomos.

Créer et enregistrer vos clusters

Pour vous permettre de vous concentrer sur le workflow à utiliser lorsque vous configurez Config Sync pour plusieurs environnements, le répertoire multi-environments-kustomize contient des scripts que vous pouvez utiliser pour automatiser la configuration de Config Sync.

  1. Clonez l'exemple de dépôt :

    git clone https://github.com/GoogleCloudPlatform/anthos-config-management-samples.git
    
  2. Accédez au dossier contenant les ressources dont vous avez besoin pour ce tutoriel :

    cd anthos-config-management-samples/multi-environments-kustomize/
    
  3. Pour exécuter les scripts utilisés dans ce tutoriel, définissez les variables suivantes :

    export DEV_PROJECT="DEV_PROJECT_ID"
    export PROD_PROJECT="PROD_PROJECT_ID"
    export DEV_CLUSTER_ZONE="DEV_CLUSTER_ZONE"
    export PROD_CLUSTER_ZONE="PROD_CLUSTER_ZONE"
    export CM_CONFIG_DIR="config-sync-rendering"
    

    Remplacez les éléments suivants :

    • DEV_PROJECT_ID : ID du projet Google Cloud que vous souhaitez utiliser comme projet de développement.
    • PROD_PROJECT_ID : ID du projet Google Cloud que vous souhaitez utiliser comme projet de production.
    • DEV_CLUSTER_ZONE : zone Compute Engine dans laquelle vous souhaitez créer votre cluster de développement. Exemple : us-central1-c.
    • PROD_CLUSTER_ZONE : zone Compute Engine dans laquelle vous souhaitez créer votre cluster de production.
  4. Pour créer deux clusters, exécutez le script ./create-clusters.sh :

    ./create-clusters.sh
    

    Ce script crée un cluster GKE Enterprise nommé dev dans le projet de développement et un cluster GKE nommé prod dans le projet de production. Ce script active également l'API GKE Enterprise et se connecte à vos clusters dev et prod afin que vous puissiez accéder à leurs API avec kubectl.

    Exemple de résultat :

    kubeconfig entry generated for dev.
    Fetching cluster endpoint and auth data.
    kubeconfig entry generated for prod.
    ⭐️ Done creating clusters.
    
  5. Pour enregistrer vos clusters dans deux parcs distincts, exécutez le script register-clusters.sh :

    ./register-clusters.sh
    

    Ce script crée un compte de service Google Cloud et une clé pour l'enregistrement du cluster GKE Enterprise, puis utilise la commande gcloud container fleet memberships register pour enregistrer les clusters dev et prod dans GKE Enterprise, dans leurs projets respectifs.

    Exemple de résultat :

    Waiting for Feature Config Management to be created...done.
    ⭐️ Done registering clusters.
    

Configurer Config Sync

Maintenant que vous avez créé et enregistré vos clusters, vous pouvez installer Config Sync et vérifier l'installation.

Installer Config Sync

Pour installer Config Sync, exécutez le script install-config-sync.sh sur les clusters de développement et de production :

./install-config-sync.sh

Résultat attendu :

🔁 Installing ConfigSync on the dev cluster...
Updated property [core/project].
Switched to context "DEV_CLUSTER".
Waiting for Feature Config Management to be updated...done.
🔁 Installing ConfigSync on the prod cluster...
Updated property [core/project].
Switched to context "PROD_CLUSTER".
Waiting for Feature Config Management to be updated...done.

Config Sync est maintenant synchronisé avec les configurations de vos dépôts.

Vérifiez votre configuration.

Dans cette section, vous allez vérifier que vos clusters se synchronisent bien avec les configurations de votre dépôt :

  1. Pour vérifier l'état de l'installation de Config Sync, exécutez la commande nomos status :

    nomos status
    

    Vous devriez constater que vos clusters de développement et de production sont maintenant synchronisés avec leurs dépôts respectifs :

    gke_DEV_PROJECT_ID_us-central1-c_dev
      --------------------
      <root>   https://github.com/GoogleCloudPlatform/anthos-config-management-samples/multi-environments-kustomize/config-source/overlays/dev@main
      SYNCED   8f2e196f
      Managed resources:
         NAMESPACE   NAME                                                 STATUS
                     clusterrole.rbac.authorization.k8s.io/pod-creator    Current
                     namespace/default                                    Current
                     namespace/foo                                        Current
         default     rolebinding.rbac.authorization.k8s.io/pod-creators   Current
         foo         serviceaccount/foo-ksa-dev                           Current
    
    *gke_PROD_PROJECT_ID_us-central1-c_prod
       --------------------
       <root>   https://github.com/GoogleCloudPlatform/anthos-config-management-samples/multi-environments-kustomize/config-source/overlays/prod@main
       SYNCED   c91502ee
       Managed resources:
          NAMESPACE   NAME                                                 STATUS
                      clusterrole.rbac.authorization.k8s.io/pod-creator    Current
                      namespace/default                                    Current
                      namespace/foo                                        Current
          default     rolebinding.rbac.authorization.k8s.io/pod-creators   Current
          foo         serviceaccount/foo-ksa-prod                          Current
    
      ```
    
  2. Utilisez kubectl pour basculer vers le cluster de développement :

    kubectl config use-context "gke_${DEV_PROJECT}_${DEV_CLUSTER_ZONE}_dev"
    
  3. Pour vérifier que les ressources sont synchronisées, obtenez les espaces de noms. L'espace de noms foo doit s'afficher.

    kubectl get namespace
    

    Exemple de résultat :

    NAME                           STATUS   AGE
    config-management-monitoring   Active   9m38s
    config-management-system       Active   9m38s
    default                        Active   47h
    foo                            Active   9m5s
    kube-node-lease                Active   47h
    kube-public                    Active   47h
    kube-system                    Active   47h
    resource-group-system          Active   9m30s
    

    Vous avez maintenant configuré le rendu automatisé de la configuration pour des environnements de développement et de production, dans plusieurs projets et environnements Google Cloud.

Nettoyer

Pour éviter que les ressources utilisées lors de ce tutoriel soient facturées sur votre compte Google Cloud, supprimez le projet contenant les ressources, ou conservez le projet et les ressources individuelles.

Supprimer toutes les ressources

Pour supprimer les ressources que vous avez créées dans le cadre de ce tutoriel, tout en conservant intacts les projets de développement et de production, exécutez le script de nettoyage :

./cleanup.sh

Supprimer les projets

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

Étapes suivantes