Synchroniser avec un dépôt hiérarchique

Ce tutoriel explique comment utiliser un dépôt racine hiérarchique Config Sync pour gérer la configuration d'un cluster Kubernetes partagé par deux équipes différentes, team-1 et team-2.

Objectifs

  • Découvrez les bonnes pratiques concernant l'utilisation d'un dépôt hiérarchique.
  • Synchronisez un cluster avec l'exemple de dépôt hiérarchique.

Coûts

Ce tutoriel utilise 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é ce tutoriel, vous pouvez éviter de continuer à payer des frais en supprimant les ressources que vous avez créées. Consultez la page Effectuer un nettoyage pour en savoir plus.

Les nouveaux utilisateurs de Google Cloud peuvent bénéficier d'un essai gratuit.

Avant de commencer

  1. Dans Google Cloud Console, sur la page de sélection du projet, sélectionnez ou créez un projet Google Cloud.

    Accéder au sélecteur de projet

  2. Assurez-vous que la facturation est activée pour votre projet Cloud. Découvrez comment vérifier que la facturation est activée pour votre projet.

  3. Avoir accès à un cluster sur lequel Config Sync est déjà installé. Si vous n'avez pas de cluster, suivez les instructions des sections "Avant de commencer" et "Préparer votre environnement" du guide de démarrage rapide pour Anthos ou du guide de démarrage rapide pour GKE.
  4. Configurez l'accès à la ligne de commande kubectl en exécutant la commande suivante :

    gcloud container clusters get-credentials CLUSTER_NAME \
        --zone ZONE \
        --project PROJECT_ID
    

    Remplacez l'élément suivant :

    • CLUSTER_NAME : nom du cluster enregistré auquel vous souhaitez appliquer cette configuration
    • ZONE : zone dans laquelle vous avez créé le cluster.
    • PROJECT_ID : ID de votre projet.

Explorer l'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/ du dépôt hierarchical-format/. Le répertoire config/ contient les répertoires et fichiers suivants :

├── cluster
│   ├── clusterrolebinding-namespace-reader.yaml
│   ├── clusterrole-namespace-reader.yaml
│   ├── clusterrole-secret-admin.yaml
│   ├── clusterrole-secret-reader.yaml
│   └── crontab-crd.yaml
├── namespaces
│   ├── limit-range.yaml
│   ├── team-1
│   │   ├── crontab.yaml
│   │   ├── namespace.yaml
│   │   ├── network-policy-default-deny-egress.yaml
│   │   ├── resource-quota-pvc.yaml
│   │   ├── rolebinding-secret-reader.yaml
│   │   └── sa.yaml
│   └── team-2
│       ├── crontab.yaml
│       ├── namespace.yaml
│       ├── network-policy-default-deny-all.yaml
│       ├── resource-quota-pvc.yaml
│       ├── rolebinding-secret-admin.yaml
│       └── sa.yaml
├── README.md
└── system
    └── repo.yaml

Un dépôt racine hiérarchique de Config Sync doit inclure trois sous-répertoires: cluster/, namespaces/ et system/.

Le répertoire cluster/ contient des configurations qui s'appliquent à des clusters entiers (tels que CRD, ClusterRole et ClusterRoleBinding) plutôt qu'à des espaces de noms.

Le répertoire namespaces/ contient les configurations associées aux objets d'espace de noms ainsi qu'aux objets à l'échelle d'un espace de noms. Chaque sous-répertoire situé sous namespaces/ inclut les configurations d'un objet d'espace de noms ainsi tous les objets à l'échelle d'un espace de noms situés sous l'espace de noms. Le nom d'un sous-répertoire doit être identique à celui de l'objet d'espace de noms. Les objets à l'échelle d'un espace de noms qui doivent être créés dans chaque espace de noms peuvent être placés directement sous namespaces/ (par exemple, namespaces/limit- range.yaml).

Dans ce tutoriel, chaque équipe dispose de son propre espace de noms Kubernetes, d'un compte de service Kubernetes, de quotas de ressources, de règles de réseau et de liaisons de rôles. L'administrateur du cluster configure une règle dans namespaces/limit-range.yaml pour limiter les allocations de ressources (aux pods ou aux conteneurs) dans les deux espaces de noms. L'administrateur du cluster configure également les objets ClusterRole et ClusterRoleBinidngs.

Le répertoire system/ contient des configurations pour l'opérateur Config Sync.


Le répertoire compiled/ (qui n'est pas obligatoire pour utiliser Config Sync) contient le résultat de nomos hydrate, qui compile les configurations sous les répertoires cluster/, namespaces/, system/, au format exact qui serait envoyé au serveur API à appliquer. Les ressources à l'échelle d'un cluster se trouvent directement dans ce répertoire. Chaque sous-répertoire inclut toutes les configurations des ressources sous un espace de noms. Le répertoire compiled/ contient les répertoires et fichiers suivants :

.
├── clusterrolebinding_namespace-reader.yaml
├── clusterrole_namespace-reader.yaml
├── clusterrole_secret-admin.yaml
├── clusterrole_secret-reader.yaml
├── customresourcedefinition_crontabs.stable.example.com.yaml
├── namespace_team-1.yaml
├── namespace_team-2.yaml
├── team-1
│   ├── crontab_my-new-cron-object.yaml
│   ├── limitrange_limits.yaml
│   ├── networkpolicy_default-deny-egress.yaml
│   ├── resourcequota_pvc.yaml
│   ├── rolebinding_secret-reader.yaml
│   └── serviceaccount_sa.yaml
└── team-2
    ├── crontab_my-new-cron-object.yaml
    ├── limitrange_limits.yaml
    ├── networkpolicy_default-deny-all.yaml
    ├── resourcequota_pvc.yaml
    ├── rolebinding_secret-admin.yaml
    └── serviceaccount_sa.yaml

Synchroniser votre cluster avec le dépôt racine à l'aide de Config Sync

Dans cette section, vous synchronisez votre cluster avec le dépôt hiérarchique à l'aide de Config Sync et de l'outil de ligne de commande gcloud.

  1. Créez un fichier apply-spec.yaml et collez-y le code suivant :

    # apply-spec.yaml
    
    applySpecVersion: 1
    spec:
      configSync:
        enabled: true
        sourceFormat: hierarchy
        syncRepo: https://github.com/GoogleCloudPlatform/anthos-config-management-samples/
        syncBranch: init
        secretType: none
        policyDir: hierarchical-format/config
    
  2. Appliquez le fichier apply-spec.yaml à l'aide de l'outil de ligne de commande gcloud:

     gcloud alpha container hub config-management apply \
         --membership=CLUSTER_NAME \
         --config=CONFIG_YAML_PATH \
         --project=PROJECT_ID
    

    Remplacez l'élément suivant :

    • CLUSTER_NAME : nom du cluster enregistré auquel vous souhaitez appliquer cette configuration
    • CONFIG_YAML_PATH : chemin d'accès à votre fichier apply-spec.yaml
    • PROJECT_ID : ID de votre projet.
  3. Vérifiez que Config Sync synchronise correctement toutes les configurations avec votre cluster:

    gcloud alpha container hub config-management status
        --project=PROJECT_ID
    

    Exemple de résultat :

    Name          Status  Last_Synced_Token  Sync_Branch  Last_Synced_Time      Policy_Controller                          Hierarchy_Controller
    CLUSTER_NAME  SYNCED  6bfc9be            init         2021-06-08T17:26:32Z  GatekeeperControllerManager NOT_INSTALLED  PENDING
    

    Une installation réussie présente l'état SYNCED.

Examiner vos configurations

Le répertoire config/ inclut les ressources suivantes:

  • ClusterRoles
  • ClusterRoleBindings
  • CRDs
  • Espaces de noms
  • RoleBindings
  • ServiceAccounts
  • ResourceQuotas
  • NetworkPolicies
  • LimitRanges
  • CRs

Ces configurations sont appliquées dès que Config Sync est configuré pour lire les données du dépôt. Dans cette section, vous allez vérifier si Config Sync gère les objets Namespace, CRD et rolebindings du répertoire.

Tous les objets gérés par Config Sync possèdent l'étiquette app.kubernetes.io/managed-by définie sur configmanagement.gke.io, et vous pouvez utiliser cette étiquette pour interroger vos ressources.

  1. Répertoriez les objets Namespace gérés par Config Sync :

    kubectl get ns -l app.kubernetes.io/managed-by=configmanagement.gke.io
    

    Exemple de résultat :

    NAME        STATUS   AGE
    team-1      Active   28m
    team-2      Active   28m
    
  2. Répertoriez les objets CRD gérés par Config Sync:

    kubectl get crds -A -l app.kubernetes.io/managed-by=configmanagement.gke.io
    

    Exemple de résultat :

    NAME                          CREATED AT
    crontabs.stable.example.com   2021-05-04T14:58:14Z
    
  3. Répertoriez les liaisons de rôle gérées par Config Sync:

    kubectl get rolebindings -A -l app.kubernetes.io/managed-by=configmanagement.gke.io
    

    Exemple de résultat :

    NAMESPACE   NAME                            ROLE                        AGE
    team-1      secret-reader                   ClusterRole/secret-reader   29m
    team-2      secret-admin                    ClusterRole/secret-admin    29m
    

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 le projet

  1. Dans Cloud Console, accédez à la page Gérer les ressources.

    Accéder à la page Gérer les ressources

  2. Dans la liste des projets, sélectionnez le projet que vous souhaitez supprimer, puis cliquez sur Supprimer.
  3. Dans la boîte de dialogue, saisissez l'ID du projet, puis cliquez sur Arrêter pour supprimer le projet.

Supprimer des ressources individuelles

Pour empêcher Config Sync de gérer votre cluster, exécutez la commande suivante:

gcloud alpha container hub config-management unmanage \
    --project=PROJECT_ID \
    --membership=CLUSTER_NAME

Pour supprimer un cluster, exécutez la commande suivante :

gcloud container clusters delete CLUSTER_NAME

Étape suivante