Sincronizar con un repositorio de solo lectura

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 con el repositorio de ejemplo foo-corp para iniciar un clúster con un conjunto de archivos de configuración. En esta guía, 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 Google 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 del Sincronizador de configuración 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. Debido a que el repositorio es legible en todo el mundo, secretType se establece en none. Para obtener una explicación de los campos, consulta Configuración del repositorio de Git.

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
  git:
    syncRepo: https://github.com/GoogleCloudPlatform/csp-config-management/
    syncBranch: 1.0.0
    secretType: none
    policyDir: "foo-corp"

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 operador del Sincronizador de configuración en tu clúster para comenzar a sincronizar su configuración desde el repositorio. Para verificar que el operador del 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
git-importer-5f8bdb59bd-7nn5m          2/2       Running   0          2m
monitor-58c48fbc66-ggrmd               1/1       Running   0          2m
syncer-7bbfd7686b-dxb45                1/1       Running   0          2m

Examina tu clúster y repositorio

El repositorio foo-corp incluye archivos de configuración en los directorios cluster/ y namespaces/. Estos archivos de configuración se aplican en cuanto se configure el operador del 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
audit              Active   4m
shipping-dev       Active   4m
shipping-prod      Active   4m
shipping-staging   Active   4m

Examina los archivos de configuración que generaron la creación de estos espacios de nombres, como namespaces/audit/namespace.yaml y namespaces/online/shipping-app-backend/shipping-dev/namespace.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               AGE
namespace-reader   6m52s
pod-creator        6m52s

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

  • cluster/namespace-reader-clusterrole.yaml
  • cluster/pod-creator-clusterrole.yaml

Puedes examinar otros objetos, como Roles y PodSecurityPolicies, de la misma manera.

Intenta modificar de forma manual un objeto administrado

Si modificas de forma manual un objeto de Kubernetes administrado por el Sincronizador de configuración, la configuración de ese objeto se actualiza de forma automática para coincidir con el archivo de configuración del objeto en tu repositorio. Para probar esto, borra el espacio de nombres shipping-dev.

kubectl delete namespace shipping-dev

Si verificas de inmediato, es posible que falte el espacio de nombres, pero en unos segundos volverá a aparecer: Por ejemplo:

kubectl get ns shipping-dev

Resultado:

Error from server (NotFound): namespaces "shipping-dev" not found

Después de unos segundos:

kubectl get ns shipping-dev

Resultado:

NAME           STATUS   AGE
shipping-dev   Active   3s

Realiza una limpieza

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

¿Qué sigue?