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 以上
のAtlas Kubernetes Operator プロジェクトにアクセスできます。Github
Atlas Kubernetes Operatorを使用してAtlas CLI をインストールするには、次のコマンドを実行します。
atlas kubernetes operator install [options]
To learn more about the command syntax and parameters, see the Atlas CLI documentation for atlas kubernetes operator install.
手順
重要
カスタム リソースはデフォルトでオブジェクトを削除しなくなりました
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 アカウントを登録するか、ログインします。
Register and Log in to Atlas or Register and Log in to Atlas.
組織の API キーを作成します。
注意
Atlas Kubernetes Operator から Atlas へのアクセスを構成するには、次の公開 API キー、プライベート API キー、および組織 ID 情報が必要です。
Grant Programmatic Access to an Organization and configure the API Access List.
Atlas Kubernetes Operator から Atlas へのアクセスを構成するには、次の公開 API キー、プライベート API キー、および組織 ID 情報が必要です。
Atlas Kubernetes Operator で新しい Atlasプロジェクトを作成する場合は、 組織へのプログラムによるアクセスの付与 。組織で Atlas Administration APIのIP アクセス リストが必要な場合は、 APIアクセス リストも設定する必要があります。
重要
API キーには、 Organization Project Creator組織ロール以上を割り当てる必要があります。
既存の Atlasプロジェクトを操作する場合は、 プロジェクトからプロジェクト アクセスを追加 します。組織で Atlas Administration APIのIP アクセス リストが必要な場合は、 APIアクセス リストも設定する必要があります。
重要
Project Ownerプロジェクト ロールに API キーを割り当てる必要があります。
Atlas Kubernetes Operatorの配置。
次のいずれかのシナリオでは、 <version>を最新のリリース番号に置き換えます。
Atlas Kubernetes Operator でその名前空間のみを監視する場合は、 ディレクトリから構成ファイルをインストールする必要があります。
deploy/namespacedkubectl 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
外部シークレットストレージを使用する場合は、機密情報を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 Custom リソースは、クラスターの準備が完了するまで待機します。新しいFreeクラスターの作成には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