Con la funcionalidad del Atlas Kubernetes Operator Dry Run, puedes ver qué va a cambiar Atlas Kubernetes Operator en Atlas cuando se apliquen esos recursos personalizados al clúster de K8S. Atlas Kubernetes Operator emite eventos para cada recurso que se va a crear/actualizar/borrar en Atlas. Los eventos emitidos por el Atlas Kubernetes Operator ejecutándose en modo de Dry Run pueden filtrarse por la razón "Dry Run". Esta funcionalidad es útil para actualizar tus recursos de Atlas Operator.
Requisitos previos
Para usar la función Dry Run de Atlas Kubernetes Operator, necesitas:
Tener acceso a un nuevo clúster de Kubernetes u OpenShift.
Aplica los recursos personalizados de Atlas Kubernetes Operator a tu nuevo clúster de Kubernetes. Cuando apliques tus recursos, asegúrate de proporcionar un secreto con credenciales. Necesita un nuevo clúster, porque actualizar los CRD en su clúster de Kubernetes existente podría dejar al Atlas Kubernetes Operator incapaz de conciliar los recursos personalizados existentes. Además, los CRD que se aplican pueden ser una versión más nueva con posibles cambios disruptivos.
Nota
Solo puede existir una versión de los CRD de AKO en un clúster específico de Kubernetes. Esto significa que para probar la actualización a una nueva versión del Atlas Kubernetes Operator, se debe implementar un nuevo clúster de Kubernetes (posiblemente un clúster temporal) para ejecutar la prueba seca.
Instale CRD en su clúster para la versión de Atlas Kubernetes Operator con la que desee ejecutar dry-run.
Crear un(a)
mongodb-atlas-operatorcuenta de servicio en tu clúster de Kubernetes.Crear un rol y rolebinding para tu cuenta de servicio con los siguientes permisos relacionados con tus recursos personalizados de Atlas Kubernetes Operator. Puedes crear estos recursos manualmente o con el CLI de Atlas.
listgetcreateupdatedelete
Eventos de ejecución en seco
El proceso de ejecución en seco emite cualquiera de los siguientes tipos de mensajes, cada uno de los cuales puede ser de tipo Normal o Warning:
Would [verb] ([HTTP-Method]) [Atlas resource URL]Una descripción de un recurso determinado de Atlas Kubernetes Operator y el proceso necesario de Kubernetes para la aplicación de cambios en tu entorno de Atlas. Cuando está en modo Dry Run, Atlas Kubernetes Operator solo emite eventos de simulación para verbos HTTP que crearían/actualizarían/eliminarían recursos en Atlas, como
POST,PATCH,PUT,DELETE.
DoneNo se reportarán más eventos de ejecución de prueba.
FinishedLa tarea de Kubernetes que ejecuta el proceso dry-run se ha completado.
Procedimiento
Aplica la siguiente tarea de Kubernetes.
Guarde el siguiente ejemplo en un archivo llamado dry-run-job.yaml y aplíquelo a su clúster ejecutando kubectl apply -f dry-run-job.yaml. Esto iniciará el Atlas Kubernetes Operator como una tarea de Kubernetes con el parámetro --dry-run. Cada reconciliación en Atlas Kubernetes Operator se ejecutará solo una vez, emitiendo eventos para cada recurso si hay cambios entre las especificaciones del recurso y su estado en Atlas.
Puede ejecutar este comando varias veces sin realizar ningún cambio en sus recursos de Atlas.
1 apiVersion: batch/v1 2 kind: Job 3 metadata: 4 name: ako-dry-run 5 namespace: mongodb-atlas-system 6 spec: 7 backoffLimit: 1 8 template: 9 spec: 10 containers: 11 - args: 12 - --atlas-domain=https://cloud.mongodb.com/ 13 - --log-level=info 14 - --log-encoder=json 15 - --dry-run 16 command: 17 - /manager 18 env: 19 - name: OPERATOR_POD_NAME 20 value: ako-dry-run 21 - name: OPERATOR_NAMESPACE 22 value: mongodb-atlas-system 23 - name: WATCH_NAMESPACE 24 value: mongodb-atlas-system 25 - name: JOB_NAME 26 value: ako-dry-run 27 image: quay.io/mongodb/mongodb-atlas-kubernetes-operator:2.8.0 28 imagePullPolicy: Always 29 livenessProbe: 30 failureThreshold: 3 31 httpGet: 32 path: /healthz 33 port: 8081 34 scheme: HTTP 35 initialDelaySeconds: 15 36 periodSeconds: 20 37 successThreshold: 1 38 timeoutSeconds: 1 39 name: ako-dry-run 40 restartPolicy: Never 41 serviceAccountName: mongodb-atlas-operator
Enumere la salida de ejecución en seco.
Cuando se termine la tarea de Kubernetes, puedes listar los eventos emitidos ejecutando el siguiente comando:
kubectl -n mongodb-atlas-system get events --field-selector reason=DryRun
Este comando devolverá una salida similar a la siguiente:
LAST SEEN TYPE REASON OBJECT MESSAGE 103s Normal DryRun atlasproject/my-project Would delete (DELETE) /api/atlas/v1.0/groups/6558f184beba40022cbb2043/integrations/SLACK 101s Warning DryRun atlasproject/my-project finished dry run
Ejecuta el siguiente comando Atlas CLI.
Ejecute el siguiente comando de Atlas CLI para iniciar el proceso de ejecución en seco. Puedes ejecutar este comando varias veces sin realizar cambios en tus recursos de Atlas.
atlas kubernetes dry-run --targetNamespace=mongodb-atlas-system --watch
Nota
Si la bandera --watch no se proporciona, la Atlas CLI termina después de completar la instalación.
Enumere la salida de ejecución en seco.
Cuando se termine la tarea de Kubernetes, puedes listar los eventos emitidos ejecutando el siguiente comando:
kubectl -n mongodb-atlas-system get events --field-selector reason=DryRun
Este comando devolverá una salida similar a la siguiente:
LAST SEEN TYPE REASON OBJECT MESSAGE 103s Normal DryRun atlasproject/my-project Would delete (DELETE) /api/atlas/v1.0/groups/6558f184beba40022cbb2043/integrations/SLACK 101s Warning DryRun atlasproject/my-project finished dry run
Registro de diferencias de recursos
Cuando --log-level se configura en debug, el Atlas Kubernetes Operator proporciona una diferencia detallada de los cambios que realices en los recursos de Atlas gestionados por el Atlas Kubernetes Operator. Este diff es especialmente útil cuando se utiliza junto con la funcionalidad Ejecución en seco, ya que permite ver las diferencias entre el estado actual de los recursos personalizados de su Atlas Kubernetes Operator y el estado que el Atlas Kubernetes Operator aplicaría a su entorno Atlas.
Esta funcionalidad de diferencia está informada por la comparación del resultado de cualquier solicitud PUT o PATCH enviada a Atlas con el estado actual de los recursos personalizados de Atlas Kubernetes Operator en tu entorno de Atlas.
Nota
Para facilitar esta comparación, el Atlas Kubernetes Operator realiza una solicitud GET a Atlas para aprender el estado actual de los recursos en Atlas. Por lo tanto, recomendamos que solo se establezca el nivel de registro en depuración en entornos que no sean de producción, ya que esta funcionalidad puede aumentar la carga en Atlas.
Para ver las diferencias, debes configurar la bandera --log-level=debug al ejecutar el comando del Atlas Kubernetes Operator. Como Atlas Kubernetes Operator utiliza registros estructurados, recomendamos analizar el diff JSON en un visor de registros estructurados para una mejor legibilidad humana. El siguiente ejemplo muestra una línea de registro del Atlas Kubernetes Operator DEBUG procesada en formato YAML, tal como se muestra en un visor de registro estructurado:
apiVersion: atlas.mongodb.com/v1 kind: AtlasDeployment metadata: name: test namespace: flex spec: flexSpec: name: test providerSettings: backingProviderName: AWS regionName: US_EAST_1 terminationProtectionEnabled: true -> false projectRef: name: test
1 | diff: | 2 | { 3 | - "backupSettings": { 4 | - "enabled": true 5 | - }, 6 | - "clusterType": "REPLICASET", 7 | - "connectionStrings": { 8 | - "standard": "...", 9 | - "standardSrv": "..." 10 | - }, 11 | - "createDate": "2025-07-21T09:52:06Z", 12 | - "groupId": "687e0db8823af91...", 13 | - "id": "687e0dc6426db7026...", 14 | - "mongoDBVersion": "8.0.11", 15 | - "name": "test", 16 | - "providerSettings": { 17 | - "backingProviderName": "AWS", 18 | - "diskSizeGB": 5, 19 | - "providerName": "FLEX", 20 | - "regionName": "US_EAST_1" 21 | - }, 22 | - "stateName": "IDLE", 23 | "tags": [ 24 | ], 25 | - "terminationProtectionEnabled": false, 26 | + "terminationProtectionEnabled": true, 27 | - "versionReleaseSystem": "LTS" 28 | } 29 | level: DEBUG 30 | msg: JSON diff 31 | time: 2025-07-22T18:07:01.163+0200 32 | url: https://...