Sincroniza desde un repositorio de Git

En esta guía de inicio rápido, se muestra cómo comenzar a usar el Sincronizador de configuración en un clúster nuevo mediante el repositorio de muestras de Anthos Config Management a fin de iniciar un clúster con un conjunto de parámetros de configuración. En esta guía de inicio rápido, no necesitas acceso de escritura al repositorio. Imagina que un equipo de cumplimiento de tu organización es responsable de crear los archivos de configuración y que cada clúster debe sincronizarse con el repositorio.

Después de completar esta guía de inicio rápido, podrás seguir una guía de inicio rápido sobre cómo escribir, probar y sincronizar archivos de configuración.

Antes de comenzar

  1. Crea un clúster.

  2. Mediante los siguientes comandos, configura el comando de kubectl para autenticarte en el clúster y crea una RoleBinding a fin de convertirte en administrador del clúster. Usa el nombre del clúster donde veas [MY-CLUSTER] y la dirección de correo electrónico de la cuenta de Facturación de Cloud donde veas [USER-ACCOUNT]. Según cómo configuraste el comando de gcloud en el sistema local, es posible que debas agregar los campos --project y --zone.

    gcloud container clusters get-credentials [MY-CLUSTER]
    
    kubectl create clusterrolebinding cluster-admin-binding \
      --clusterrole cluster-admin --user [USER_ACCOUNT]
    
  3. Instala el comando nomos en el sistema local.

  4. Instala el operador de Config Management en el clúster que acabas de crear.

Configura tu clúster

Crea un archivo config-management.yaml y copia el siguiente archivo YAML en él. Te recomendamos que habilites la capacidad de sincronización de varios repositorios para agregar funciones adicionales. Para obtener más información, consulta Sincroniza desde varios repositorios.

# config-management.yaml
apiVersion: configmanagement.gke.io/v1
kind: ConfigManagement
metadata:
  name: config-management
spec:
  # clusterName is required and must be unique among all managed clusters
  clusterName: my-cluster
  # Enable multi-repo mode to use additional features
  enableMultiRepo: true

Aplica la configuración a tu clúster:

kubectl apply -f config-management.yaml

Si el comando se ejecuta de forma correcta, Kubernetes actualizará el Sincronizador de configuración en tu clúster para crear controladores y CustomResourceDefinitions (CRD). Para verificar que el Sincronizador de configuración esté en ejecución, espera a que las CRD de RootSync y RepoSync estén disponibles:

until kubectl get customresourcedefinitions rootsyncs.configsync.gke.io reposyncs.configsync.gke.io; \
do date; sleep 1; echo ""; done

Resultado:

NAME                          CREATED AT
rootsyncs.configsync.gke.io   YYYY-MM-DDThh:mm:ssZ
reposyncs.configsync.gke.io   YYYY-MM-DDThh:mm:ssZ

Luego, crea un archivo con un recurso personalizado RootSync. Te recomendamos que uses el formato unstructured, ya que te permite organizar los archivos de configuración de la manera que te resulte más conveniente. Debido a que el repositorio es legible en todo el mundo, auth se establece en none.

# root-sync.yaml
# If you are using a Config Sync version earlier than 1.7,
# use: apiVersion: configsync.gke.io/v1alpha1
apiVersion: configsync.gke.io/v1beta1
kind: RootSync
metadata:
  name: root-sync
  namespace: config-management-system
spec:
  sourceFormat: unstructured
  git:
    repo: https://github.com/GoogleCloudPlatform/anthos-config-management-samples
    branch: init
    dir: quickstart/multirepo/root
    auth: none

Aplica RootSync a tu clúster:

kubectl apply -f root-sync.yaml

Si el comando se ejecuta de forma correcta, Kubernetes actualiza el Sincronizador de configuración en el clúster para crear los conciliadores y comenzar a sincronizar la configuración del clúster desde el repositorio. Para verificar que el Sincronizador de configuración esté en ejecución, enumera todos los pods que se ejecutan en el espacio de nombres config-management-system:

kubectl get pods -n config-management-system

Resultado:

NAME                                       READY   STATUS    RESTARTS   AGE
admission-webhook-7dbc55cbf5-thlnl         1/1     Running   1          89m
admission-webhook-7dbc55cbf5-x54n9         1/1     Running   0          89m
ns-reconciler-gamestore-7478cb7b87-hf6zn   3/3     Running   0          2m37s
reconciler-manager-7cdb699bf8-fns5r        2/2     Running   0          5m29s
root-reconciler-6c7c87b7b7-txptf           3/3     Running   0          4m51s

Comprueba el estado de la sincronización

Puedes verificar si el Sincronizador de configuración sincroniza de forma correcta todos los archivos de configuración con el clúster mediante el comando nomos status.

 nomos status

Resultado:

*my-cluster
  --------------------
  <root>  https://github.com/GoogleCloudPlatform/anthos-config-management-samples/quickstart/multirepo/root@init
  SYNCED   282a2023
  --------------------
  gamestore   https://github.com/GoogleCloudPlatform/anthos-config-management-samples/quickstart/multirepo/namespaces/gamestore@init
  SYNCED      282a2023

Examina tu clúster y repositorio

El directorio quickstart/multirepo/root incluye ClusterRole, CustomResourceDefinition, parámetros de configuración del operador de Prometheus para la supervisión, Rolebinding, el espacio de nombres y RepoSync. Estos archivos de configuración se aplican en cuanto se configure el Sincronizador de configuración para leer desde el repositorio.

Todos los objetos administrados por el Sincronizador de configuración tienen la etiqueta app.kubernetes.io/managed-by configurada en configmanagement.gke.io.

  • 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:

    NAME         STATUS   AGE
    gamestore    Active   58s
    monitoring   Active   58s
    

    Examina los archivos de configuración que generaron la creación de estos espacios de nombres, como namespace-gamestore.yaml y acm-monitor/namespace-monitoring.yaml.

  • Enumera las ClusterRoles que administra el Sincronizador de configuración:

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

    Resultado:

    NAME                  CREATED AT
    namespace-reader      YYYY-MM-DDThh:mm:ssZ
    prometheus-acm        YYYY-MM-DDThh:mm:ssZ
    prometheus-operator   YYYY-MM-DDThh:mm:ssZ
    webstore-admin        YYYY-MM-DDThh:mm:ssZ
    

    Examina los archivos de configuración de ClusterRole que declaran lo siguiente:

    • clusterrole-namespace-reader.yaml
    • clusterrole-webstore-admin.yaml
  • Enumera los RepoSyncs que administra el Sincronizador de configuración:

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

    Resultado:

    NAMESPACE   NAME        SOURCECOMMIT                               SYNCCOMMIT
    gamestore   repo-sync   282a2023cf73ac94e8a85b464ac9f76d209067b0   282a2023cf73ac94e8a85b464ac9f76d209067b0
    

    Examina los parámetros configuración de RepoSync que declaran lo siguiente:

    • reposync-gamestore.yaml

Puedes examinar otros objetos, como CRD y Rolebindings, del mismo modo.

Intenta modificar de forma manual un objeto administrado

El Sincronizador de configuración evita la mutación de objetos administrados a través del webhook de admisión.

Si intentas hacer un cambio conflictivo con la modificación manual de un objeto de Kubernetes administrado por el Sincronizador de configuración, se mostrará un error. Para probar esto, intenta borrar el espacio de nombres gamestore.

kubectl delete namespace gamestore

Resultado:

error: admission webhook "v1.admission-webhook.configsync.gke.io" denied the request: requester is not authorized to delete managed resources

Realiza una limpieza

Después de completar los ejercicios de este tema, puedes borrar el clúster que usaste para las pruebas.

¿Qué sigue?