Atlas Kubernetes Operator を使用すると、Kubernetes を離れることなく Atlas 内のリソースを管理できます。 このチュートリアルでは、Atlas Kubernetes Operator を使用して、Kubernetes 構成ファイルから Atlas に最初のクラスターを作成する方法を説明します。
警告
マルチテナンシー・セキュリティ ガイダンス
異なる名前空間を使用する場合でも、単一の Atlas Kubernetes Operator インストールを複数のテナント間で共有しないでください。演算子を共有するテナントは、クロス名前空間参照を使用して、他のテナントの Atlas 構成やその他のクラウドリソースへのアクセスを提供するシークレットを含む、他の名前空間のリソースにアクセスできます。テナントを分離するには、テナントごとに個別の Atlas Kubernetes Operatorインスタンスを配置します。
注意
Helm を使用して を開始することをおすすめしますか。
Atlas Kubernetes Operator を使用して Helm Charts から Atlas に最初のクラスターを作成するには、「 Helm Charts クイック スタート 」を参照してください。
前提条件
このチュートリアルには次のものが必要です。
x86-64、AMD64、または ARM64 アーキテクチャで実行中のプロセッサを含む実行中の Kubernetes クラスター。
jq1.6 以上Access to the Atlas Kubernetes Operator project on GitHub: Github の Atlas Kubernetes Operatorプロジェクトへのアクセス: https://github.com/mongodb/mongodb-atlas-kubernetes
手順
重要
カスタム リソースはデフォルトでオブジェクトを削除しなくなりました
Atlas Kubernetes Operator はカスタムリソース構成ファイルを使用して Atlas 構成を管理しますが、Atlas Kubernetes Operator2.0 以降、 Kubernetesで削除したカスタム リソースは Atlas で削除されなくなりました(デフォルトでは )。代わりに、Atlas Kubernetes Operator は Atlas 内のそれらのリソースの管理を停止します。 例、 Kubernetesで カスタム リソースを削除すると、デフォルトでは、Atlas Kubernetes Operator は Atlas
AtlasProjectから対応するプロジェクトを自動的に削除しなくなります。この動作の変更は、誤ってまたは予期せずに削除されるのを防ぐことを目的としています。 この動作を Atlas Kubernetes Operator. 以前に使用されていたデフォルトに戻す方法などの詳細については、「2 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 のインストール。
Atlas Kubernetes Operator をインストールするには、次のいずれかの方法を選択します。
Atlas CLI を使用して Atlas Kubernetes Operator をインストールするには、次のコマンドを実行します。
重要
Atlas CLI はAPIキーを作成しますが、クラスターのアウトバウンドIPを検出できません。--ipAccessList フラグを使用してKubernetesクラスターのIPまたは CIDR ブロックを許可リストに登録し、Atlas Kubernetes Operator が Atlas と通信できるようにします。
atlas kubernetes operator install --ipAccessList <IP_OR_CIDR> [options]
注意
Atlas for Government 用の Atlas Kubernetes演算子をインストールするには、前のコマンドに --atlasGov フラグを追加します。
このコマンドは自動的に次のことを行います。
Atlas組織に新しいAPIキーを作成します。
指定されたIP/CIDR をAPIキーのIP アクセス リストに追加します。
GitHub からマニフェストを取得して、Atlas Kubernetes Operator をKubernetesクラスターにインストールします。
コマンド構文とパラメータの詳細については、Atlas CLI Atlas Kubernetes Operatorのインストール の ドキュメントを参照してください。
kubectl を使用して Atlas Kubernetes Operator をインストールするには、次の手順に従います。
<VERSION>を最新リリース番号に置き換え、次のいずれかのコマンドを実行します。Atlas Kubernetes Operator でKubernetesクラスター内のすべての名前空間を監視するには、次を実行します。
kubectl apply -f https://raw.githubusercontent.com/mongodb/mongodb-atlas-kubernetes/refs/heads/main/releases/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
「 組織へのプログラムによるアクセスの付与 」の手順に従って、
Project OwnerまたはOrganization Project Creator権限を持つ API キーを作成します。
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
外部シークレットストレージを使用する場合は、機密情報をKubernetes secrets に直接配置する必要はありません。詳細については、「シークレット ストレージの構成」を参照してください。
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
サーバーレスインスタンスを作成するには、「 サーバーレスインスタンスの例 」を参照してください。
Atlas クラスター データベースにログインするためのパスワードを使用してシークレットを作成します。
P@@ssword%をパスワードに置き換え、次のコマンドを実行します。
kubectl create secret generic the-user-password --from-literal="password=P@@sword%"
kubectl label secret the-user-password atlas.mongodb.com/type=credentials
外部シークレットストレージを使用する場合は、機密情報をKubernetes secrets に直接配置する必要はありません。詳細については、「シークレット ストレージの構成」を参照してください。
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 カスタム リソースはクラスターが準備ができるまで待機します。新しい無料階層Atlasクラスターの作成にかかる時間は、15秒未満です。新しい Flex または 専有クラスターの作成には最大 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-projectAtlasProjectカスタム リソースのmetadataフィールドの値を指定します。my-atlas-clusterAtlasDeploymentカスタム リソースのmetadataフィールドの値を指定します。my-database-userAtlasDatabaseUserカスタム リソースの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