您可以使用 Atlas Kubernetes Operator 管理 Atlas 中的资源,而无需离开 Kubernetes。本教程演示如何使用 Atlas Kubernetes Operator 从 Kubernetes 配置文件在 Atlas 中创建第一个集群。
先决条件
本教程要求:
- 正在运行的 Kubernetes 集群,其节点运行 x86-64、AMD64 或 ARM64 架构的处理器。 
- jq1.6 或更高版本
您可以访问 GitHub 上的 Atlas Kubernetes Operator 项目:
要使用 Atlas CLI 安装 Atlas Kubernetes Operator, 请运行以下命令:
atlas kubernetes operator install [options] 
要了解有关命令语法和参数的更多信息,请参阅Atlas CLI Atlas Kubernetes Operator安装 的 文档。
步骤
重要
自定义资源不再默认删除对象
- Atlas Kubernetes Operator使用自定义资源配置文件来管理Atlas配置,但从Atlas Kubernetes Operator2.0 开始,您在Kubernetes中删除的自定义资源不再(默认)在Atlas中删除。相反, Atlas Kubernetes Operator只是停止管理Atlas中的这些资源。 - AtlasProject示例,如果您在Kubernetes中删除 自定义资源,默认默认, Atlas Kubernetes Operator不再自动从Atlas中删除相应的项目。这种行为更改旨在帮助防止意外删除。 要学习;了解详情,包括如何将此行为恢复为在Atlas Kubernetes Operator.2 0之前使用的默认,请参阅新默认值: Atlas Kubernetes2 Operator.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 
为您的组织创建 API 密钥。
注意
您需要以下公共 API 密钥、私有 API 密钥和组织 ID 信息, 配置 Atlas Kubernetes Operator 对 Atlas 的访问权限。
向组织授予编程访问权限并配置API Access List 。
您需要以下公共 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 Kubernetes Operator。
在以下场景之一,请将<version>替换为最新版本号:
- 如果您希望 Atlas Kubernetes Operator 监视 Kubernetes 集群中的所有命名空间,请运行以下命令: - kubectl apply -f https://raw.githubusercontent.com/mongodb/mongodb-atlas-kubernetes/v<version>/deploy/all-in-one.yaml 
- 如果您希望 Atlas Kubernetes Operator 仅监视其命名空间,则必须从 - deploy/namespaced目录安装配置文件:- kubectl apply -f https://raw.githubusercontent.com/mongodb/mongodb-atlas-kubernetes/v<version>/deploy/namespaced/crds.yaml - kubectl apply -f https://raw.githubusercontent.com/mongodb/mongodb-atlas-kubernetes/v<version>/deploy/namespaced/namespaced-config.yaml 
使用您的 API 密钥和组织 ID 创建密钥。
要创建并标记密钥,请使用您的API密钥和组织ID运行以下命令:
kubectl create secret generic mongodb-atlas-operator-api-key \     --from-literal="orgId=<atlas_organization_id>" \     --from-literal="publicApiKey=<atlas_api_public_key>" \     --from-literal="privateApiKey=<atlas_api_private_key>" \     -n mongodb-atlas-system 
kubectl label secret mongodb-atlas-operator-api-key atlas.mongodb.com/type=credentials -n mongodb-atlas-system 
创建AtlasProject 自定义资源。
运行以下命令以创建AtlasProject自定义资源:
注意
以下示例未指定 spec.connectionSecretRef.name 。如果未指定,Atlas Kubernetes Operator 将使用之前使用 API 密钥和组织 ID 设立的默认连接密钥。
部署Atlas Kubernetes Operator自定义资源。
cat <<EOF | kubectl apply -f - apiVersion: atlas.mongodb.com/v1 kind: AtlasProject metadata:   name: my-project spec:   name: Test Atlas Operator Project   projectIpAccessList:     - ipAddress: <your-ip-address-range>       comment: "Adding your IP to Atlas access list" EOF 
创建AtlasDeployment 自定义资源。
运行以下命令之一以创建AtlasDeployment自定义资源并创建集群:
付费层级:
cat <<EOF | kubectl apply -f - apiVersion: atlas.mongodb.com/v1 kind: AtlasDeployment metadata:   name: my-atlas-cluster spec:   projectRef:     name: my-project   deploymentSpec:     clusterType: REPLICASET     name: "Test-cluster"     tags:       - key: "environment"         value: "production"     replicationSpecs:       - zoneName: US-Zone         regionConfigs:           - electableSpecs:               instanceSize: M10               nodeCount: 3             providerName: AWS             regionName: US_EAST_1             priority: 7 EOF 
免费套餐:
cat <<EOF | kubectl apply -f - apiVersion: atlas.mongodb.com/v1 kind: AtlasDeployment metadata:   name: my-atlas-cluster spec:   projectRef:     name: my-project   deploymentSpec:     clusterType: REPLICASET     name: "Test-cluster"     replicationSpecs:       - regionConfigs:           - regionName: US_EAST_1             providerName: TENANT             backingProviderName: AWS             electableSpecs:               instanceSize: M0               nodeCount: 3 EOF 
创建AtlasDatabaseUser 自定义资源。
运行以下命令以创建AtlasDatabaseUser自定义资源:
注意
spec.passwordSecretRef 必须引用您以前创建的密码。
cat <<EOF | kubectl apply -f - apiVersion: atlas.mongodb.com/v1 kind: AtlasDatabaseUser metadata:   name: my-database-user spec:   roles:     - roleName: "readWriteAnyDatabase"       databaseName: "admin"   projectRef:     name: my-project   username: theuser   passwordSecretRef:     name: the-user-password EOF 
检查数据库用户的状态。
运行以下命令,直到收到True响应,这表明数据库用户已准备就绪:
注意
AtlasDatabaseUser自定义资源等待集群准备就绪。 创建新集群最多可能需要 10 分钟。
kubectl get atlasdatabaseusers my-database-user -o=jsonpath='{.status.conditions[?(@.type=="Ready")].status}' 
检索 Atlas Kubernetes Operator 创建的用于连接到集群的密钥。
- 复制以下命令: - 重要- 以下命令需要 - jq1.6 或更高版本。- kubectl get secret {my-project}-{my-atlas-cluster}-{my-database-user} -o json | jq -r '.data | with_entries(.value |= @base64d)'; 
- 对于自定义资源,用详细信息替换以下占位符: - my-project- 指定 - AtlasProject自定义资源的- metadata字段的值。- my-atlas-cluster- 指定 - AtlasDeployment自定义资源的- metadata字段的值。- my-database-user- 指定 - AtlasDatabaseUser自定义资源的- metadata字段的值。
- 运行命令。 - 注意- 您的连接字符串将与以下示例不同。 - { - "connectionStringStandard": "mongodb://theuser:P%40%40sword%25@test-cluster-shard-00-00.peqtm.mongodb.net:27017,test-cluster-shard-00-01.peqtm.mongodb.net:27017,test-cluster-shard-00-02.peqtm.mongodb.net:27017/?ssl=true&authSource=admin&replicaSet=atlas-pk82fl-shard-0", - "connectionStringStandardSrv": "mongodb+srv://theuser:P%40%40sword%25@test-cluster.peqtm.mongodb.net", - "password": "P@@sword%", - "username": "theuser" - } - 您可以在应用程序中使用此密钥: - containers: - - name: test-app - env: - - name: "CONNECTION_STRING" - valueFrom: - secretKeyRef: - name: test-atlas-operator-project-test-cluster-theuser - key: connectionStringStandardSrv