自定义资源
Atlas Kubernetes Operator 支持以下自定义资源定义:
Resource | 说明 | 简称 |
---|---|---|
配置备份合规策略以保护您的备份数据。 | abcp | |
用于备份集群 Atlas 的备份策略。 | abp | |
用于备份集群 Atlas 的备份计划。 | abs | |
a custom database role to allocate privileges to your database users. | acr | |
Atlas 中某个项目内的集群。 | ad | |
Atlas 中某个项目内的数据库用户。 | adu | |
Atlas 中的项目。 | ap | |
Atlas 中的项目团队。 | at | |
Atlas 中的联合数据库实例及其私有端点。 | adf | |
Private endpoint connection from your chosen cloud provider to Atlas. | ape | |
Atlas 集群中某些集合的索引。 | asic | |
Atlas Stream Processing 连接。 | asc | |
Atlas Stream Processing 实例。 | asi | |
Atlas 中的联合身份验证。 | afa |
重要
自定义资源不再默认删除对象
Atlas Kubernetes Operator使用自定义资源配置文件来管理Atlas配置,但从Atlas Kubernetes Operator2.0 开始,您在Kubernetes中删除的自定义资源不再(默认)在Atlas中删除。相反, Atlas Kubernetes Operator只是停止管理Atlas中的这些资源。示例,如果您在Kubernetes中删除
AtlasProject
自定义资源,默认, Atlas Kubernetes Operator不再自动从Atlas中删除相应的项目。这种行为更改旨在帮助防止意外删除。要学习;了解详情,包括如何将此行为恢复为Atlas Kubernetes Operator2 之前使用的默认行为。0 ,请参阅新默认值: Atlas Kubernetes Operator中的删除保护2 。0 。同样,如果您使用Atlas Kubernetes Operator从Kubernetes中的Atlas项目中删除团队,则Atlas Kubernetes Operator不会从Atlas中删除团队。
显式定义所需的配置详细信息,以避免隐式使用默认Atlas配置值。在某些情况下,继承Atlas默认值可能会导致协调循环,从而阻止自定义资源实现
READY
状态。示例,在AtlasDeployment
自定义资源中显式定义所需的自动伸缩行为(如所包含的示例所示)可确保自定义资源中的静态实例大小不会重复应用于已启用自动伸缩的Atlas部署。autoScaling: diskGB: enabled: true compute: enabled: true scaleDownEnabled: true minInstanceSize: M30 maxInstanceSize: M40
管理Atlas Kubernetes Operator kubectl
要使用kubectl
列出集群中的所有Atlas Kubernetes Operator资源,您可以运行:
kubectl get atlas
为了方便起见,要列出或描述特定类型的Atlas Kubernetes Operator CRD,您可以使用上表中列出的简称。 示例,要列出mongodb
命名空间中的所有atlasdatabaseusers
,您可以运行:
kubectl get adu -n mongodb
Atlas Kubernetes Operator 工作流程
使用 Atlas Kubernetes Operator 时,您可以创建新的 Atlas 项目,也可以使用现有的 Atlas 项目。
您需要以下公共 API 密钥、私有 API 密钥和组织 ID 信息, 配置 Atlas Kubernetes Operator 对 Atlas 的访问权限。
如果您希望Atlas Kubernetes Operator创建新的Atlas项目,请为组织授予编程访问权限。如果您的组织需要Atlas Administration API的IP访问列表,您还必须配置API访问权限列表。
重要
您必须为 API 密钥分配 Organization Project Creator组织角色或更高级别的角色。
如果要使用现有Atlas项目,请从项目添加项目访问权限。如果您的组织需要Atlas Administration API的IP访问列表,您还必须配置API访问权限列表。
重要
您必须为 API 密钥分配 Project Owner 项目角色。
要了解更多信息,请参阅配置对 Atlas 的访问权限。
创建和更新进程
每次更改任何支持的自定义资源中的spec
字段时,Atlas Kubernetes Operator 都会启动以下工作流程:
Atlas Kubernetes Operator 接收有关已更改自定义资源的事件。
Atlas Kubernetes Operator 更新
status.conditions
字段以反映资源尚未准备就绪:conditions: - lastTransitionTime: "2021-03-13T16:26:17Z" status: "False" type: Ready 要连接到 Atlas Administration API,Atlas Kubernetes Operator 会从以下位置之一读取组织ID 和 API密钥:
spec.connectionSecretRef.name
(如果在AtlasProject
自定义资源中指定)。默认情况下,Atlas Kubernetes Operator 将连接密钥保存在同一 命名空间 中
AtlasProject
作为 自定义资源 。将密钥存储在另一个 命名空间 中 ,指定spec.connectionSecretRef.namespace
参数。global
Atlas Kubernetes Operator 密钥<operator-deployment-name>-api-key
(如果未指定spec.connectionSecretRef.name
)。
为了在 Atlas 中创建或更新资源,Atlas Kubernetes Operator 使用连接信息对 Atlas 进行API调用。
注意
有时,在协调自定义资源期间,Atlas Kubernetes Operator 会在 Atlas 中进行多个API调用。 例如,
AtlasProject
具有用于调用匹配 API 的 IP 访问列表 配置。如果在协调过程中出现任何错误,
status.conditions
会进行更新以反映错误。例子
- lastTransitionTime: "2021-03-15T14:26:44Z" message: 'POST https://cloud.mongodb.com/api/atlas/v1.0/groups/604a47de73cd8cag77239021/accessList: 400 (request "INVALID_IP_ADDRESS_OR_CIDR_NOTATION") The address 192.0.2.1dfdfd5 must be in valid IP address or CIDR notation.' reason: ProjectIPAccessListNotCreatedInAtlas status: "False" type: IPAccessListReady 如果更新成功,则
status.conditions
表明资源已准备就绪:conditions: - lastTransitionTime: "2021-03-13T16:26:17Z" status: "True" type: Ready
删除进程
从 Atlas Kubernetes Operator 2.0开始,当您从 Kubernetes 删除自定义资源时,该对象默认保留在 Atlas 中,但 Atlas Kubernetes Operator不再控制该对象。 您可以恢复整个部署的此默认值,或使用注释覆盖特定自定义资源的此默认值,以允许 Atlas Kubernetes Operator 从 Atlas 中删除相应的对象。 如果使用注解进行覆盖,则会开始以下工作流程:
Atlas Kubernetes Operator 收到有关已删除的自定义资源的事件。
要连接到 Atlas Administration API,Atlas Kubernetes Operator 从以下位置之一读取组织 ID 和API密钥:
spec.connectionSecretRef.name
(如果在AtlasProject
自定义资源中指定)。默认情况下,Atlas Kubernetes Operator 将连接密钥保存在同一 命名空间 中
AtlasProject
作为 自定义资源 。将密钥存储在另一个 命名空间 中 ,指定spec.connectionSecretRef.namespace
参数。global
Atlas Kubernetes Operator 密钥<operator-deployment-name>-api-key
(如果未指定spec.connectionSecretRef.name
)。
要删除 Atlas 中的资源,Atlas Kubernetes Operator 使用连接信息对 Atlas 进行API调用。
注意
Atlas Kubernetes Operator 会删除在 Kubernetes 中创建的任何相关对象。 例如,如果删除
AtlasDatabaseUser
,Atlas Kubernetes Operator 会删除相关的连接 密钥 。
使用注解跳过或覆盖默认值
您可以使用注解来修改 Atlas Kubernetes Operator 的默认行为。
如果您将
mongodb.com/atlas-resource-policy: "delete"
注解添加到自定义资源的metadata
,则当您删除Atlas Kubernetes Operator资源时,Atlas Kubernetes Operator会删除Atlas中的相应对象。例子
apiVersion: atlas.mongodb.com/v1 kind: AtlasProject metadata: name: my-project annotations: mongodb.com/atlas-resource-policy: "delete" 如果您已将新的删除行为恢复为在 Atlas Kubernetes Operator 2.0 之前使用的默认行为,则可以将
mongodb.com/atlas-resource-policy: "keep"
注解添加到自定义资源的metadata
,这样当您删除 Atlas Kubernetes Operator 时,Atlas Kubernetes Operator 就不会删除该资源。操作符资源。如果您将
mongodb.com/atlas-reconciliation-policy: "skip"
注解添加到自定义资源的metadata
中,Atlas Kubernetes Operator 不会启动该资源的协调。此注解允许您暂停与规范的同步,直到您删除该注解。 您可以使用此注解对自定义资源进行手动更改,避免 Atlas Kubernetes Operator 在同步期间撤消这些更改。删除此注解后,Atlas Kubernetes Operator 会协调资源并将其与规范同步。如果您将
mongodb.com/atlas-resource-version-policy: "allow"
注解添加到自定义资源的metadata
,则即使资源的版本标签与您正在使用的 Atlas Kubernetes Operator 版本不匹配,Atlas Kubernetes Operator 也会允许您使用该资源。 如果您的资源版本是落后于 Atlas Kubernetes Operator 版本的主要版本,则最新功能可能无法使用。 次要版本差异是向后兼容的。