Cette page explique comment personnaliser la configuration de l'environnement d'exécution des conteneurs containerd sur vos nœuds Google Kubernetes Engine (GKE). Avant de lire ce document, assurez-vous de maîtriser ce qu'est un environnement d'exécution de conteneur et pourquoi vous souhaitez le personnaliser.
À propos de la configuration containerd dans GKE
Vous pouvez configurer manuellement un ensemble d'options dans l'environnement d'exécution containerd sur des nœuds GKE exécutant un système d'exploitation tel que Container-Optimized OS. La personnalisation de l'environnement d'exécution vous permet de configurer des exigences spéciales telles que l'accès aux registres d'images privés. Pour définir ces options, vous devez créer un fichier YAML appelé fichier de configuration de l'environnement d'exécution et le transmettez à GKE lorsque vous créez ou mettez à jour un cluster.
Cette méthode de personnalisation de containerd vous permet d'éviter de déployer des DaemonSet privilégiés, qui constituent un risque pour la sécurité. Lorsque vous fournissez un fichier de configuration d'exécution à GKE, GKE recrée vos nœuds et met à jour le fichier config.toml containerd sur chaque nœud avec votre configuration.
La configuration persiste lors de l'arrêt, des mises à niveau et des recréation des nœuds.
Le fichier de configuration de l'environnement d'exécution vous permet uniquement de configurer des options dans containerd. GKE accepte également la configuration d'options kubelet spécifiques et d'options de noyau Linux de bas niveau à l'aide d'un fichier distinct appelé fichier de configuration du système de nœud. Pour en savoir plus, consultez la page Personnaliser la configuration du système de nœud.
Limites
Vous ne pouvez pas utiliser un fichier de configuration d'exécution pour modifier les paramètres containerd dans les images de nœuds Windows.
Options de configuration containerd disponibles
Les sections suivantes décrivent les options que vous pouvez configurer à l'aide d'un fichier de configuration d'environnement d'exécution.
privateRegistryAccessConfig
Accédez à des registres d'images privés à l'aide d'identifiants privés que vous stockez dans Secret Manager.
Cette option est disponible avec les versions 1.27.3-gke.1700 ou ultérieures de GKE pour les images de nœuds Container-Optimized OS, et les versions 1.33 ou ultérieures pour les images de nœuds Ubuntu.
Pour obtenir des instructions, consultez Accéder à des registres privés avec des certificats CA privés.
privateRegistryAccessConfig: enabled: true certificateAuthorityDomainConfig: - gcpSecretManagerCertificateConfig: secretURI: "SECRET_LOCATION" fqdns: - "FQDN1" - "FQDN2"
Cette configuration comporte les champs suivants:
enabled: valeur booléenne permettant d'activer la configuration du registre privé. Si vous définissezenabled: false, supprimez tous les autres champs de l'élémentprivateRegistryAccessConfig.certificateAuthorityDomainConfig: contient jusqu'à cinq définitions de certificat et de noms de domaine complets.gcpSecretManagerCertificateConfig: contient un certificat stocké dans Secret Manager et un tableau de noms de domaine complets.secretURI: emplacement du certificat dans Secret Manager.privateRegistryAccessConfign'accepte que les secrets globaux danssecretURI.fqdns: liste de noms de domaine complets des registres privés. Vous pouvez également utiliser des adresses IPv4, mais nous vous recommandons d'utiliser le nom de domaine complet.
registryHosts
Configurez les paramètres avancés des registres containerd, tels que les capacités, les en-têtes personnalisés et les certificats. Cela correspond à hosts.toml de containerd.
Cette option est disponible pour les versions GKE 1.34.1-gke.2980000 ou ultérieures.
registryHosts: - server: "REGISTRY_SERVER_FQDN" hosts: - host: "MIRROR_FQDN" capabilities: - "HOST_CAPABILITY_PULL" - "HOST_CAPABILITY_RESOLVE" - "HOST_CAPABILITY_PUSH" overridePath: false dialTimeout: "30s" header: - key: "HEADER_KEY" value: - "HEADER_VALUE_1" - "HEADER_VALUE_2" ca: - gcpSecretManagerSecretUri: "projects/PROJECT_ID_OR_NUMBER/secrets/CA_SECRET/versions/VERSION" client: - cert: gcpSecretManagerSecretUri: "projects/PROJECT_ID_OR_NUMBER/secrets/CLIENT_CERT_SECRET/versions/VERSION" key: gcpSecretManagerSecretUri: "projects/PROJECT_ID_OR_NUMBER/secrets/CLIENT_KEY_SECRET/versions/VERSION"
Cette configuration comporte les champs suivants:
server: nom d'hôte du serveur de registre (par exemple,example.com). Il est utilisé pour nommer le fichier de configuration sur le nœud. Il doit s'agir d'un nom de domaine complet ou d'une adresse IPv4.hosts: liste des configurations spécifiques à l'hôte pourserver.host: nom d'hôte d'un miroir de registre (par exemple,mirror.example.com). Il doit s'agir de noms de domaine complets ou d'adresses IPv4.capabilities: liste des fonctionnalités spécifiant les opérations qu'un hôte est capable d'effectuer. Les valeurs acceptées sont les suivantes :HOST_CAPABILITY_PULL: représente la capacité à récupérer des fichiers manifestes et des blobs par condensé.HOST_CAPABILITY_RESOLVE: représente la capacité à récupérer des fichiers manifestes par nom.HOST_CAPABILITY_PUSH: représente la capacité à envoyer des blobs et des fichiers manifestes.
overridePath: valeur booléenne. Si la valeur esttrue, cela indique que le point de terminaison racine de l'API de l'hôte est défini dans le chemin d'accès de l'URL plutôt que par la spécification de l'API. Cela peut être utilisé avec des registres OCI non conformes qui ne comportent pas le préfixe/v2. La valeur par défaut estfalse.dialTimeout: chaîne de durée (par exemple,"30s") spécifiant la durée maximale autorisée pour qu'une tentative de connexion se termine. La valeur maximale autorisée est de"180s". Si ce champ n'est pas défini, containerd définit la valeur par défaut sur"30s". La valeur doit être un nombre décimal de secondes avec un suffixes.header: liste des en-têtes HTTP personnalisés à envoyer à l'hôte du registre.key: clé d'en-tête.value: liste de valeurs d'en-tête.
ca: liste des configurations de certificat pour l'autorité de certification de l'hôte du registre. Pour créer un secret pour les certificats et configurer les autorisations requises, suivez les instructions de la section Stocker vos clés publiques CA dans Secret Manager.gcpSecretManagerSecretUri: URI d'un secret dans Secret Manager contenant le certificat de l'autorité de certification. Il accepte les secrets globaux et régionaux. Voici les formats pour les types de secrets respectifs :- Format du secret global :
projects/PROJECT_ID_OR_NUMBER/secrets/SECRET_NAME/versions/VERSION. - Format du secret régional :
projects/PROJECT_ID_OR_NUMBER/locations/REGION/secrets/SECRET_NAME/versions/VERSION.
- Format du secret global :
client: liste de paires clé/certificat client pour l'authentification auprès de l'hôte du registre. Pour créer un secret pour les certificats et configurer les autorisations requises, consultez les instructions de la section Stocker vos clés publiques CA dans Secret Manager.cert: configuration du certificat client.gcpSecretManagerSecretUri: URI d'un secret dans Secret Manager contenant le certificat client. Il accepte les secrets globaux et régionaux.key: configuration de la clé privée du client.gcpSecretManagerSecretUri: URI d'un secret dans Secret Manager contenant la clé client. Il est compatible avec les secrets globaux et régionaux.
writableCgroups
Installez le système de fichiers /sys/fs/cgroup en mode lecture-écriture afin que les charges de travail puissent gérer les ressources de leurs processus enfants.
Cette option est disponible pour les versions GKE 1.34.1-gke.2541000 ou ultérieures.
Pour en savoir plus, consultez Configurer des cgroups accessibles en écriture pour les conteneurs.
writableCgroups: enabled: true
Appliquer la configuration containerd aux nouveaux clusters
Cette section explique comment appliquer un fichier de configuration containerd lorsque vous créez un cluster GKE.
Exécutez la commande suivante pour créer des clusters Autopilot :
gcloud container clusters create-autoCLUSTER_NAME\ --location=LOCATION\ --scopes="cloud-platform" \ --containerd-config-from-file="PATH_TO_CONFIG_FILE"
Remplacez les éléments suivants :
CLUSTER_NAME: nom de votre nouveau clusterLOCATION: emplacement Compute Engine du nouveau cluster.PATH_TO_CONFIG_FILE: chemin d'accès au fichier de configuration que vous avez créé, par exemple~/containerd-configuration.yaml.
Vous pouvez activer la configuration containerd sur les nouveaux clusters Standard en exécutant la commande gcloud container clusters create avec les mêmes options.
Appliquer la configuration containerd aux nouveaux pools de nœuds
Vous pouvez appliquer la configuration containerd à un nouveau pool de nœuds GKE à l'aide de la commande suivante :
gcloud container node-pools createNODE_POOL_NAME\ --cluster=CLUSTER_NAME\ --location=LOCATION\ --scopes="cloud-platform" \ --containerd-config-from-file="PATH_TO_CONFIG_FILE"
Remplacez les éléments suivants :
NODE_POOL_NAME: nom de votre nouveau pool de nœuds.CLUSTER_NAME: nom du cluster existant.LOCATION: emplacement Compute Engine du nouveau pool de nœuds.PATH_TO_CONFIG_FILE: chemin d'accès au fichier de configuration que vous avez créé, par exemple~/containerd-configuration.yaml.
Appliquer la configuration containerd aux clusters existants
Cette section vous explique comment appliquer une configuration containerd à des clusters et à des nœuds existants.
Vérifier les niveaux d'accès
Les clusters existants doivent disposer du niveau d'accès cloud-platform pour utiliser cette fonctionnalité. Cette section explique comment vérifier vos niveaux d'accès et mettre à jour un cluster existant avec un fichier de configuration de registre privé nouveau ou modifié.
Pour en savoir plus sur les niveaux d'accès par défaut dans les nouveaux clusters, consultez la section Niveaux d'accès dans GKE.
Vérifier les niveaux d'accès à Autopilot
Exécutez la commande ci-dessous.
gcloud container clusters describeCLUSTER_NAME\ --location=LOCATION\ --flatten=nodeConfig \ --format='csv[delimiter="\\n",no-heading](oauthScopes)'
Si votre cluster ne dispose pas du niveau d'accès https://www.googleapis.com/auth/cloud-platform, créez un cluster avec ce niveau d'accès.
Vérifier les niveaux d'accès standards
Pour vérifier les niveaux d'accès à votre cluster standard, vérifiez un pool de nœuds:
gcloud container node-pools describeNODE_POOL_NAME\ --cluster=CLUSTER_NAME\ --location=LOCATION\ --format='value[delimiter="\\n"](config.oauthScopes)'
Remplacez NODE_POOL_NAME par le nom du pool de nœuds.
Si votre cluster ne dispose pas du niveau d'accès https://www.googleapis.com/auth/cloud-platform, créez un pool de nœuds doté du niveau d'accès cloud-platform et supprimez le pool de nœuds existant.
Mettre à jour le cluster pour utiliser votre fichier de configuration
Exécutez la commande ci-dessous.
gcloud container clusters updateCLUSTER_NAME\ --location=LOCATION\ --containerd-config-from-file="PATH_TO_CONFIG_FILE"
Recréer des nœuds dans des clusters standards
Si votre cluster standard n'utilise pas les mises à niveau automatiques, vous devez recréer manuellement vos pools de nœuds pour appliquer la nouvelle configuration. Pour déclencher une recréation manuelle des nœuds, mettez à niveau votre cluster vers la version GKE qu'il utilise déjà.
gcloud container clusters upgradeCLUSTER_NAME\ --location=LOCATION\ --cluster-version=VERSION
Remplacez VERSION par la même version de correctifs de GKE que celle utilisée par le cluster.
Désactiver les options de configuration containerd
Désactiver privateRegistryAccessConfig
-
Mettez à jour le fichier de configuration pour spécifier
enabled: falsedansprivateRegistryAccessConfiget supprimez tous les autres champs de l'élément, comme dans l'exemple suivant :privateRegistryAccessConfig: enabled: false
- Appliquez le fichier de configuration mis à jour au cluster : Pour obtenir des instructions, consultez la page Appliquer la configuration containerd aux clusters existants.
Désactiver registryHosts
-
Mettez à jour le fichier de configuration pour spécifier un tableau vide dans l'élément
registryHosts, comme dans l'exemple suivant :registryHosts: []
- Appliquez le fichier de configuration mis à jour au cluster : Pour obtenir des instructions, consultez la page Appliquer la configuration containerd aux clusters existants.