您可以使用 Atlas Kubernetes Operator 管理 Atlas 中的资源,而无需离开 Kubernetes。本教程演示如何使用 Atlas Kubernetes Operator 从 Kubernetes 配置文件在 Atlas 中创建第一个集群。
先决条件
本教程要求:
正在运行的 Kubernetes 集群,其节点运行 x86-64、AMD64 或 ARM64 架构的处理器。
jq
1.6 或更高版本
您可以访问 GitHub 上的 Atlas Kubernetes Operator 项目:
要使用 Atlas CLI 安装 Atlas Kubernetes Operator, 请运行以下命令:
atlas kubernetes operator install [options]
要了解有关命令语法和参数的更多信息,请参阅Atlas CLI Atlas Kubernetes Operator安装 的 文档。
步骤
重要
自定义资源定义优先
为您的组织创建 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 labels: app.kubernetes.io/version: 1.6.0 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 labels: app.kubernetes.io/version: 1.6.0 spec: projectRef: name: my-project deploymentSpec: clusterType: REPLICASET name: "Test-cluster" tags: - key: "environment", value: "production" providerSettings: instanceSizeName: M10 providerName: AWS regionName: US_EAST_1 EOF
要创建无服务器实例,请参阅无服务器实例示例。
创建AtlasDatabaseUser
自定义资源。
运行以下命令以创建AtlasDatabaseUser
自定义资源:
注意
spec.passwordSecretRef
必须引用您以前创建的密码。
cat <<EOF | kubectl apply -f - apiVersion: atlas.mongodb.com/v1 kind: AtlasDatabaseUser metadata: name: my-database-user labels: app.kubernetes.io/version: 1.6.0 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 创建的用于连接到集群的密钥。
复制以下命令:
重要
以下命令需要
jq
1.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