En este instructivo, se muestra cómo usar un repositorio raíz jerárquico del Sincronizador de configuración para administrar la configuración de un clúster de Kubernetes compartido por dos equipos diferentes, team-1
y team-2
.
Objetivos
- Obtener información sobre prácticas recomendadas para usar un repositorio jerárquico
- Sincronizar un clúster con el repositorio jerárquico de ejemplo
Costos
En este documento, usarás los siguientes componentes facturables de Google Cloud:
Para generar una estimación de costos en función del uso previsto, usa la calculadora de precios.
Cuando finalices este instructivo, podrás borrar los recursos creados para evitar que se te siga facturando. Para obtener más información, consulta Cómo realizar una limpieza.
Antes de comenzar
-
En la página del selector de proyectos de la consola de Google Cloud, selecciona o crea un proyecto de Google Cloud.
-
Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud. Obtén información sobre cómo verificar si la facturación está habilitada en un proyecto.
Debes tener acceso a un clúster con el Sincronizador de configuración ya instalado. Si no tienes ese clúster, sigue las instrucciones de las secciones “Antes de comenzar” y “Prepara tu entorno” del instructivo Sincroniza desde los repositorios de Git.
- Configura el acceso a la línea de comandos de
kubectl
mediante la ejecución del siguiente comando:
gcloud container clusters get-credentials CLUSTER_NAME \ --zone ZONE \ --project PROJECT_ID
Reemplaza lo siguiente:
CLUSTER_NAME
: El nombre del clúster registrado en el que deseas aplicar esta configuraciónZONE
: La zona en la que creaste el clúster.PROJECT_ID
: El ID de tu proyecto
- Configura el acceso a la línea de comandos de
Explora la arquitectura del repositorio
En este instructivo, debes configurar el Sincronizador de configuración para que se sincronice con los archivos de configuración en el directorio config/
del repositorio hierarchical-format/
.
El directorio config/
contiene los siguientes directorios y archivos:
├── 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 repositorio raíz jerárquico válido del Sincronizador de configuración debe incluir tres subdirectorios: cluster/
, namespaces/
y system/
.
El directorio cluster/
contiene opciones de configuración que se aplican a clústeres completos (como CRD, ClusterRoles y ClusterRoleBindings), en lugar de a espacios de nombres.
El directorio namespaces/
contiene opciones de configuración para los objetos de espacio de nombres y los objetos con alcance de espacio de nombres. Cada subdirectorio de namespaces/
incluye la configuración para un objeto de espacio de nombres y todos los objetos con permisos de espacio de nombres del espacio de nombres. El nombre de un subdirectorio debe ser el mismo que el nombre del objeto del espacio de nombres. Los objetos con permisos de espacios de nombres que se deben crear en cada espacio de nombres se pueden colocar directamente en namespaces/
(por ejemplo, namespaces/limit-
range.yaml
).
En este instructivo, cada equipo tiene su propio espacio de nombres de Kubernetes, cuenta de servicio de Kubernetes, cuotas de recursos, políticas de red y vinculaciones de funciones. El administrador del clúster configura una política en namespaces/limit-range.yaml
para restringir las asignaciones de recursos (a Pods o contenedores) en ambos espacios de nombres. El administrador del clúster también configura ClusterRoles y ClusterRoleBindings.
El directorio system/
contiene opciones de configuración para el operador del Sincronizador de configuración.
El directorio compiled/
(que no es necesario para usar el Sincronizador de configuración) contiene el resultado de nomos hydrate
, que compila los archivos de configuración en los directorios cluster/
, namespaces/
, system/
en el formato exacto que se enviaría al servidor de la API para su aplicación. Los recursos con permisos de clúster se encuentran directamente en este directorio. Cada subdirectorio incluye todos los archivos de configuración para los recursos en un espacio de nombres. El directorio compiled/
contiene los siguientes directorios y archivos:
.
├── 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
Sincroniza tu clúster con el repositorio raíz mediante el Sincronizador de configuración
En esta sección, deberás sincronizar tu clúster con el repositorio jerárquico mediante el Sincronizador de configuración y la CLI de Google Cloud.
Crea un archivo llamado
apply-spec.yaml
y pega el siguiente texto en él:# 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
Aplica el archivo
apply-spec.yaml
con la CLI de Google Cloud:gcloud alpha container fleet config-management apply \ --membership=CLUSTER_NAME \ --config=CONFIG_YAML_PATH \ --project=PROJECT_ID
Reemplaza lo siguiente:
CLUSTER_NAME
: El nombre del clúster registrado en el que deseas aplicar esta configuraciónCONFIG_YAML_PATH
: La ruta de acceso a tu archivoapply-spec.yaml
PROJECT_ID
: El ID de tu proyecto
Verifica si el Sincronizador de configuración sincroniza correctamente todos los archivos de configuración con el clúster:
gcloud alpha container fleet config-management status --project=PROJECT_ID
Resultado de ejemplo:
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
Si la instalación se realiza correctamente, tendrá el estado
SYNCED
.
Examina tus archivos de configuración
El directorio config/
incluye los siguientes recursos:
- ClusterRoles
- ClusterRoleBindings
- CRD
- Espacios de nombres
- RoleBindings
- ServiceAccounts
- ResourceQuotas
- NetworkPolicies
- LimitRanges
- CR
Estos archivos de configuración se aplican en cuanto se configure el Sincronizador de configuración para leer desde el repositorio. En esta sección, debes comprobar si el Sincronizador de configuración administra los espacios de nombres, CRD y vinculaciones de funciones en el directorio.
Todos los objetos administrados por el Sincronizador de configuración tienen la etiqueta app.kubernetes.io/managed-by
configurada en configmanagement.gke.io
y puedes usarla para consultar tus recursos.
Enumera los espacios de nombres que administra el Sincronizador de configuración:
kubectl get ns -l app.kubernetes.io/managed-by=configmanagement.gke.io
Resultado de ejemplo:
NAME STATUS AGE team-1 Active 28m team-2 Active 28m
Enumera las CRD administradas por el Sincronizador de configuración:
kubectl get crds -A -l app.kubernetes.io/managed-by=configmanagement.gke.io
Resultado de ejemplo:
NAME CREATED AT crontabs.stable.example.com 2021-05-04T14:58:14Z
Enumera las vinculaciones de funciones administradas por el Sincronizador de configuración:
kubectl get rolebindings -A -l app.kubernetes.io/managed-by=configmanagement.gke.io
Resultado de ejemplo:
NAMESPACE NAME ROLE AGE team-1 secret-reader ClusterRole/secret-reader 29m team-2 secret-admin ClusterRole/secret-admin 29m
Realiza una limpieza
Para evitar que se apliquen cargos a tu cuenta de Google Cloud por los recursos usados en este instructivo, borra el proyecto que contiene los recursos o conserva el proyecto y borra los recursos individuales.
Borra el proyecto
- En la consola de Google Cloud, ve a la página Administrar recursos.
- En la lista de proyectos, elige el proyecto que quieres borrar y haz clic en Borrar.
- En el diálogo, escribe el ID del proyecto y, luego, haz clic en Cerrar para borrar el proyecto.
Borra los recursos individuales
Para evitar que el Sincronizador de configuración administre tu clúster, ejecuta el siguiente comando:
gcloud alpha container fleet config-management unmanage \
--project=PROJECT_ID \
--membership=CLUSTER_NAME
Para borrar un clúster, ejecuta el siguiente comando:
gcloud container clusters delete CLUSTER_NAME
¿Qué sigue?
- Explora arquitecturas de referencia, diagramas y prácticas recomendadas sobre Google Cloud. Consulta nuestro Cloud Architecture Center.