借助Atlas Kubernetes Operator试运行功能,您可以查看Atlas Kubernetes Operator将在Atlas中更改哪些内容,并将这些自定义资源应用于 K8S集群。Atlas Kubernetes Operator为其将在Atlas中创建/更新/删除的每个资源发出事件。在试运行模式下运行的Atlas Kubernetes Operator发出的事件可以按“试运行”原因进行筛选。此功能对于 升级您的Atlas Operator 资源 非常有用。
先决条件
要使用Atlas Kubernetes Operator试运行功能,您需要:
可以访问权限新的Kubernetes或OpenShift集群。
将Atlas Kubernetes Operator自定义资源应用到新的Kubernetes集群。应用资源时,请确保提供带有凭证的 密钥。您需要一个新的集群,因为在现有Kubernetes集群上升级 CRD 可能会导致Atlas Kubernetes Operator无法协调现有的自定义资源。此外,应用的 CRD 可能是具有潜在重大更改的新版本。
注意
特定Kubernetes集群中只能存在一个版本的 AKO CRD。这意味着,要测试升级到新版本的Atlas Kubernetes Operator,您需要部署一个新的Kubernetes集群(可能是临时集群)来执行试运行。
在您要执行空运行的Atlas Kubernetes Operator版本的集群中安装 CRD。
在Kubernetes集群中创建一个
mongodb-atlas-operator
服务帐户。为服务帐户创建角色 和角色绑定,并具有与Atlas Kubernetes Operator自定义资源相关的以下权限。您可以手动或使用Atlas CLI创建这些资源。
list
get
create
update
delete
试运行事件
空运行进程会发出以下消息类型,每种消息类型可以是 Normal
或 Warning
类型:
Would [verb] ([HTTP-Method]) [Atlas resource URL]
如果将更改应用于Atlas环境,则对给定Atlas Kubernetes Operator资源以及Kubernetes所需的Kubernetes进程进行描述。处于空运行模式时, Atlas Kubernetes Operator仅会为会在Atlas中创建/更新/删除资源的HTTP动作发出空运行事件,例如
POST
、PATCH
、PUT
、DELETE
。
Done
不会再报告任何空运行事件。
Finished
运行试运行进程的Kubernetes作业已完成。
步骤
应用以下Kubernetes作业。
将以下示例保存在名为 dry-run-job.yaml
的文件中,并通过运行kubectl apply -f dry-run-job.yaml
将其应用集群。这将使用 --dry-run
参数将Atlas Kubernetes Operator作为Kubernetes作业启动。Atlas Kubernetes Operator中的每次协调仅运行一次,如果Atlas中的资源规范与其状态之间发生变化,则为每个资源发出事件。
您可以多次运行此命令,而无需对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
列出空运行输出。
Kubernetes作业完成后,您可以通过运行以下命令列出发出的事件:
kubectl -n mongodb-atlas-system get events --field-selector reason=DryRun
此命令将返回类似于以下内容的输出:
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
列出空运行输出。
Kubernetes作业完成后,您可以通过运行以下命令列出发出的事件:
kubectl -n mongodb-atlas-system get events --field-selector reason=DryRun
此命令将返回类似于以下内容的输出:
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
日志资源差异
当 --log-level
设立为 debug
时, Atlas Kubernetes Operator会提供您对Atlas Kubernetes Operator托管的Atlas资源所做的更改的详细差异。与“空运行”功能结合使用时,此差异特别有用,因为它允许您查看Atlas Kubernetes Operator自定义资源的当前状态与Atlas Kubernetes Operator将应用Atlas环境的状态之间的差异。
此差异功能是通过将发送到Atlas 的任何 PUT 或 PATCH 请求的结果与Atlas环境中Atlas Kubernetes Operator自定义资源的当前状态进行比较来获知的。
注意
为了便于进行比较, Atlas Kubernetes Operator向Atlas发出 GET请求,以学习;了解Atlas中资源的当前状态。因此,我们建议您仅在非生产环境中将日志级别设立为调试,因为此功能会增加Atlas的负载。
要查看差异,您需要在运行Atlas Kubernetes Operator命令时设立--log-level=debug
标志。由于Atlas Kubernetes Operator使用结构化日志记录,因此我们建议在结构化日志记录查看器中分析JSON差异,以提高可读性。以下示例显示了以 YAML 格式呈现的Atlas Kubernetes Operator DEBUG
日志行,如结构化日志查看器中所示:
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://...