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
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.
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. Pour en savoir plus, consultez la section Effectuer un nettoyage.
Avant de commencer
-
Dans Google Cloud Console, sur la page de sélection du projet, sélectionnez ou créez un projet Google Cloud.
-
Vérifiez que la facturation est activée pour votre projet Google Cloud. Découvrez comment vérifier si la facturation est activée sur un projet.
Avoir accès à un cluster sur lequel Config Sync est déjà installé. Si vous ne disposez pas d'un tel cluster, suivez les instructions des sections "Avant de commencer" et "Préparer votre environnement" du tutoriel de synchronisation à partir de dépôts Git.
- 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 les éléments suivants :
CLUSTER_NAME
: nom du cluster enregistré auquel vous souhaitez appliquer cette configurationZONE
: zone dans laquelle vous avez créé le cluster.PROJECT_ID
: ID de votre projet.
- Configurez l'accès à la ligne de commande
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 allez synchroniser votre cluster avec le dépôt hiérarchique à l'aide de Config Sync et de Google Cloud CLI.
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
Appliquez le fichier
apply-spec.yaml
à l'aide de Google Cloud CLI :gcloud alpha container fleet config-management apply \ --membership=CLUSTER_NAME \ --config=CONFIG_YAML_PATH \ --project=PROJECT_ID
Remplacez les éléments suivants :
CLUSTER_NAME
: nom du cluster enregistré auquel vous souhaitez appliquer cette configurationCONFIG_YAML_PATH
: chemin d'accès à votre fichierapply-spec.yaml
PROJECT_ID
: ID de votre projet.
Vérifiez que Config Sync synchronise correctement toutes les configurations avec votre cluster :
gcloud alpha container fleet 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.
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
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
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
Effectuer un nettoyage
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 supprimez les ressources individuelles.
Supprimer le projet
- Dans la console Google Cloud, accédez à la page Gérer les ressources.
- Dans la liste des projets, sélectionnez le projet que vous souhaitez supprimer, puis cliquez sur Supprimer.
- 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 fleet config-management unmanage \
--project=PROJECT_ID \
--membership=CLUSTER_NAME
Pour supprimer un cluster, exécutez la commande suivante :
gcloud container clusters delete CLUSTER_NAME
Étapes suivantes
- Découvrez des architectures de référence, des schémas et des bonnes pratiques concernant Google Cloud. Consultez notre Centre d'architecture cloud.