この記事では、Azure Kubernetes Service (AKS) で MongoDB クラスターを実行するために必要なインフラストラクチャ リソースを作成します。
前提条件
- AKS に MongoDB クラスターをデプロイするための概要に関する記事を確認する。
- Azure サブスクリプション。 アカウントがない場合は、 無料アカウントを作成してください。
- Azure CLI バージョン 2.61.0。 インストールとアップグレードについては、「Azure CLI のインストール」を参照してください。
- Helm バージョン 3 以降。 インストールするには、「Installing Helm」を参照してください。
kubectl
。これは Azure Cloud Shell が既定でインストールします。- ローカル コンピューターにインストールされている Docker。 インストールするには、「Docker を取得する」を参照してください。
環境変数を設定する
このガイド全体で使用する、必要な環境変数を設定します。
random=$(echo $RANDOM | tr '[0-9]' '[a-z]')
export MY_LOCATION=australiaeast
export MY_RESOURCE_GROUP_NAME=myResourceGroup-rg-$(echo $MY_LOCATION)
export MY_ACR_REGISTRY=mydnsrandomname$(echo $random)
export MY_IDENTITY_NAME=ua-identity-123
export MY_KEYVAULT_NAME=vault-$(echo $random)-kv
export MY_CLUSTER_NAME=cluster-aks
export SERVICE_ACCOUNT_NAME=mongodb
export SERVICE_ACCOUNT_NAMESPACE=mongodb
export AKS_MONGODB_NAMESPACE=mongodb
export AKS_MONGODB_SECRETS_NAME=cluster-aks-mongodb-secrets
export AKS_MONGODB_CLUSTER_NAME=cluster-aks-mongodb
export AKS_MONGODB_SECRETS_ENCRYPTION_KEY=cluster-aks-mongodb-secrets-mongodb-encryption-key
export AKS_AZURE_SECRETS_NAME=cluster-aks-azure-secrets
export AKS_MONGODB_BACKUP_STORAGE_ACCOUNT_NAME=mongodbsa$(echo $random)
export AKS_MONGODB_BACKUP_STORAGE_CONTAINER_NAME=backups
リソース グループを作成する
az group create
コマンドを使用して、リソース グループを作成します。az group create --name $MY_RESOURCE_GROUP_NAME --location $MY_LOCATION --output table
出力例:
Location Name ------------- -------------------------------- australiaeast myResourceGroup-rg-australiaeast
Azure Key Vault のシークレットにアクセスするための ID を作成する
この手順では、外部シークレット オペレーターが Azure Key Vault 内に保存されている MongoDB パスワードにアクセスするために使用するユーザー割り当てマネージド ID を作成します。
az identity create
コマンドを使用して、ユーザー割り当てマネージド ID を作成します。az identity create --name $MY_IDENTITY_NAME --resource-group $MY_RESOURCE_GROUP_NAME --output table export MY_IDENTITY_NAME_ID=$(az identity show --name $MY_IDENTITY_NAME -g $MY_RESOURCE_GROUP_NAME --query id -o tsv) export MY_IDENTITY_NAME_PRINCIPAL_ID=$(az identity show --name $MY_IDENTITY_NAME -g $MY_RESOURCE_GROUP_NAME --query principalId -o tsv) export MY_IDENTITY_NAME_CLIENT_ID=$(az identity show --name $MY_IDENTITY_NAME -g $MY_RESOURCE_GROUP_NAME --query clientId -o tsv)
出力例:
ClientId Location Name PrincipalId ResourceGroup TenantId ------------------------------------ ------------- --------------- ------------------------------------ -------------------------------- ------------------------------------ 00001111-aaaa-2222-bbbb-3333cccc4444 australiaeast ua-identity-123 aaaaaaaa-bbbb-cccc-1111-222222222222 myResourceGroup-rg-australiaeast aaaabbbb-0000-cccc-1111-dddd2222eeee
Azure Key Vault インスタンスを作成する
az keyvault create
コマンドを使用して、Azure Key Vault インスタンスを作成します。az keyvault create --name $MY_KEYVAULT_NAME --resource-group $MY_RESOURCE_GROUP_NAME --location $MY_LOCATION --enable-rbac-authorization false --output table export KEYVAULTID=$(az keyvault show --name $MY_KEYVAULT_NAME --query "id" --output tsv) export KEYVAULTURL=$(az keyvault show --name $MY_KEYVAULT_NAME --query "properties.vaultUri" --output tsv)
出力例:
Location Name ResourceGroup ------------- -------------- -------------------------------- australiaeast vault-cjcfc-kv myResourceGroup-rg-australiaeast
Azure Container Registry インスタンスの作成
az acr create
コマンドを使用して、コンテナー イメージを保存し、管理するための Azure Container Registry インスタンスを作成します。az acr create \ --name ${MY_ACR_REGISTRY} \ --resource-group $MY_RESOURCE_GROUP_NAME \ --sku Premium \ --location $MY_LOCATION \ --admin-enabled true \ --output table export MY_ACR_REGISTRY_ID=$(az acr show --name $MY_ACR_REGISTRY --resource-group $MY_RESOURCE_GROUP_NAME --query id -o tsv)
出力例:
NAME RESOURCE GROUP LOCATION SKU LOGIN SERVER CREATION DATE ADMIN ENABLED -------------------- -------------------------------- ------------- ------- ------------------------------- -------------------- --------------- mydnsrandomnamecjcfc myResourceGroup-rg-australiaeast australiaeast Premium mydnsrandomnamecjcfc.azurecr.io 2024-07-01T12:18:34Z True
Azure Storage アカウントを作成する
az acr create
コマンドを使用して、MongoDB バックアップを保存するための Azure ストレージ アカウントを作成します。az storage account create --name $AKS_MONGODB_BACKUP_STORAGE_ACCOUNT_NAME --resource-group $MY_RESOURCE_GROUP_NAME --location $MY_LOCATION --sku Standard_ZRS --output table az storage container create --name $AKS_MONGODB_BACKUP_STORAGE_CONTAINER_NAME --account-name $AKS_MONGODB_BACKUP_STORAGE_ACCOUNT_NAME --output table export AKS_MONGODB_BACKUP_STORAGE_ACCOUNT_KEY=$(az storage account keys list --account-name $AKS_MONGODB_BACKUP_STORAGE_ACCOUNT_NAME --query "[0].value" -o tsv) az keyvault secret set --vault-name $MY_KEYVAULT_NAME --name AZURE-STORAGE-ACCOUNT-KEY --value $AKS_MONGODB_BACKUP_STORAGE_ACCOUNT_KEY
出力例:
AccessTier AllowBlobPublicAccess AllowCrossTenantReplication CreationTime EnableHttpsTrafficOnly Kind Location MinimumTlsVersion Name PrimaryLocation ProvisioningState ResourceGroup StatusOfPrimary ------------ ----------------------- ----------------------------- -------------------------------- ------------------------ --------- ------------- ------------------- -------------- ----------------- ------------------- -------------------------------- ----------------- Hot False False 2024-08-09T07:06:41.727230+00:00 True StorageV2 australiaeast TLS1_0 mongodbsabdibh australiaeast Succeeded myResourceGroup-rg-australiaeast available Created --------- True Name Value ------------------------- ---------------------------------------------------------------------------------------- AZURE-STORAGE-ACCOUNT-KEY xxx4tE3xxxxxxxxxxxxxxxxxxxxxxxxxxxx...
AKS クラスターを作成する
以下の手順では、ワークロード ID と OpenID Connect (OIDC) 発行者を有効にして AKS クラスターを作成します。 このワークロード ID によって、キー コンテナー内に保存されている MongoDB パスワードにアクセスするためのアクセス許可が外部シークレット オペレーター サービス アカウントに付与されます。
az aks create
コマンドを使用して、AKS クラスターを作成します。az aks create \ --location $MY_LOCATION \ --name $MY_CLUSTER_NAME \ --tier standard \ --resource-group $MY_RESOURCE_GROUP_NAME \ --network-plugin azure \ --node-vm-size Standard_DS4_v2 \ --node-count 1 \ --nodepool-name systempool \ --nodepool-tags "pool=system" \ --auto-upgrade-channel stable \ --node-os-upgrade-channel NodeImage \ --attach-acr ${MY_ACR_REGISTRY} \ --enable-oidc-issuer \ --enable-workload-identity \ --zones 1 2 3 \ --generate-ssh-keys \ --output table
出力例:
AzurePortalFqdn CurrentKubernetesVersion DisableLocalAccounts DnsPrefix EnableRbac Fqdn KubernetesVersion Location MaxAgentPools Name NodeResourceGroup ProvisioningState ResourceGroup ResourceUid SupportPlan ------------------------------------------------------------------------------ -------------------------- ---------------------- ---------------------------------- ------------ ----------------------------------------------------------------------- ------------------- ------------- --------------- ----------- ------------------------------------------------------------- ------------------- -------------------------------- ------------------------ ------------------ cluster-ak-myresourcegroup--83a15f-46qdeqrv.portal.hcp.australiaeast.azmk8s.io 1.28.9 False cluster-ak-myResourceGroup--83a15f True cluster-ak-myresourcegroup--83a15f-46qdeqrv.hcp.australiaeast.azmk8s.io 1.28 australiaeast 100 cluster-aks MC_myResourceGroup-rg-australiaeast_cluster-aks_australiaeast Succeeded myResourceGroup-rg-australiaeast a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1 KubernetesOfficial
az aks nodepool add
コマンドを使用して、ユーザー ノード プールを AKS クラスターに追加します。 このノード プールは、MongoDB ポッドが実行される場所です。az aks nodepool add \ --resource-group $MY_RESOURCE_GROUP_NAME \ --cluster-name $MY_CLUSTER_NAME \ --name userpool \ --node-vm-size Standard_DS4_v2 \ --node-count 3 \ --zones 1 2 3 \ --mode User \ --output table
出力例:
Name OsType KubernetesVersion VmSize Count MaxPods ProvisioningState Mode ---------- -------- ------------------- --------------- ------- --------- ------------------- ------ userpool Linux 1.28 Standard_DS4_v2 3 30 Succeeded User
az aks show
コマンドを使用して、ワークロード ID 構成に使用する OIDC 発行者 URL を取得します。export OIDC_URL=$(az aks show --resource-group $MY_RESOURCE_GROUP_NAME --name $MY_CLUSTER_NAME --query oidcIssuerProfile.issuerUrl -o tsv)
az role assignment create
コマンドを使用して、kubelet ID にAcrPull
ロールを割り当てます。export KUBELET_IDENTITY=$(az aks show -g $MY_RESOURCE_GROUP_NAME --name $MY_CLUSTER_NAME -o tsv --query identityProfile.kubeletidentity.objectId) az role assignment create \ --assignee ${KUBELET_IDENTITY} \ --role "AcrPull" \ --scope ${MY_ACR_REGISTRY_ID} \ --output table
出力例:
CreatedBy CreatedOn Name PrincipalId PrincipalName PrincipalType ResourceGroup RoleDefinitionId RoleDefinitionName Scope UpdatedBy UpdatedOn ------------------------------------ -------------------------------- ------------------------------------ ------------------------------------ ------------------------------------ ---------------- -------------------------------- ------------------------------------------------------------------------------------------------------------------------------------------ -------------------- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ------------------------------------ -------------------------------- bbbb1b1b-cc2c-dd3d-ee4e-ffffff5f5f5f 2024-07-01T12:23:20.749750+00:00 8247e9bb-bc6b-414f-98a6-4768dbb961ad 9686a88e-25bc-4b4c-b611-d1057a26acdc 0b40421c-343b-4986-b691-980d6154429e ServicePrincipal myResourceGroup-rg-australiaeast /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/providers/Microsoft.Authorization/roleDefinitions/7f951dda-4ed3-4680-a7ca-43fe172d538d AcrPull /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/myResourceGroup-rg-australiaeast/providers/Microsoft.ContainerRegistry/registries/mydnsrandomnamecjcfc bbbb1b1b-cc2c-dd3d-ee4e-ffffff5f5f5f 2024-07-01T12:23:20.749750+00:00
AKS クラスターに接続する
az aks get-credentials
コマンドを使用して、AKS クラスターに接続するようにkubectl
を構成します。az aks get-credentials --resource-group $MY_RESOURCE_GROUP_NAME --name $MY_CLUSTER_NAME --overwrite-existing --output table
Percona イメージを Azure Container Registry にアップロードする
このセクションでは、Docker Hub から Percona イメージをダウンロードし、Azure Container Registry にアップロードします。 この手順により、イメージがプライベート レジストリと AKS クラスターで使用できるようになります。 運用環境でパブリック イメージを使わないことをお勧めします。
次の
az acr import
コマンドを使用して、Docker Hub から Percona イメージをインポートし、Azure Container Registry にアップロードします。az acr import \ --name $MY_ACR_REGISTRY \ --source docker.io/percona/percona-server-mongodb:7.0.8-5 \ --image percona-server-mongodb:7.0.8-5 az acr import \ --name $MY_ACR_REGISTRY \ --source docker.io/percona/pmm-client:2.41.2 \ --image pmm-client:2.41.2 az acr import \ --name $MY_ACR_REGISTRY \ --source docker.io/percona/percona-backup-mongodb:2.4.1 \ --image percona-backup-mongodb:2.4.1 az acr import \ --name $MY_ACR_REGISTRY \ --source docker.io/percona/percona-server-mongodb-operator:1.16.1 \ --image percona-server-mongodb-operator:1.16.1
次のステップ
Azure Kubernetes Service