Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
V tomto článku vytvoříte prostředky infrastruktury potřebné k nasazení vysoce dostupné databáze PostgreSQL v AKS pomocí operátoru CloudNativePG (CNPG).
Důležité
Opensourcový software je zmíněn v dokumentaci a ukázkách AKS. Software, který nasadíte, je vyloučený ze smluv o úrovni služeb AKS, omezené záruky a podpora Azure. Při používání opensourcových technologií společně s AKS se obraťte na možnosti podpory, které jsou k dispozici v příslušných komunitách a správci projektů, a vytvořte plán.
Microsoft zodpovídá za vytváření opensourcových balíčků, které nasazujeme v AKS. Tato odpovědnost zahrnuje úplné vlastnictví procesu sestavení, skenování, podepisování, ověřování a opravy pomocí hotfix spolu s kontrolou binárních souborů v kontejnerových obrazech. Další informace najdete v tématu Správa ohrožení zabezpečení pro AKS a pokrytí podpory pro AKS.
Než začnete
- Projděte si přehled nasazení a ujistěte se, že splňujete všechny požadavky v tématu Nasazení vysoce dostupné databáze PostgreSQL v AKS pomocí Azure CLI.
- Nastavte proměnné prostředí pro použití v tomto průvodci.
- Nainstalujte požadovaná rozšíření.
Nastavení proměnných prostředí
Nastavte následující proměnné prostředí pro použití v celém tomto průvodci:
export SUFFIX=$(cat /dev/urandom | LC_ALL=C tr -dc 'a-z0-9' | fold -w 8 | head -n 1)
export LOCAL_NAME="cnpg"
export TAGS="owner=user"
export RESOURCE_GROUP_NAME="rg-${LOCAL_NAME}-${SUFFIX}"
export PRIMARY_CLUSTER_REGION="canadacentral"
export AKS_PRIMARY_CLUSTER_NAME="aks-primary-${LOCAL_NAME}-${SUFFIX}"
export AKS_PRIMARY_MANAGED_RG_NAME="rg-${LOCAL_NAME}-primary-aksmanaged-${SUFFIX}"
export AKS_PRIMARY_CLUSTER_FED_CREDENTIAL_NAME="pg-primary-fedcred1-${LOCAL_NAME}-${SUFFIX}"
export AKS_PRIMARY_CLUSTER_PG_DNSPREFIX=$(echo $(echo "a$(openssl rand -hex 5 | cut -c1-11)"))
export AKS_UAMI_CLUSTER_IDENTITY_NAME="mi-aks-${LOCAL_NAME}-${SUFFIX}"
export AKS_CLUSTER_VERSION="1.32"
export PG_NAMESPACE="cnpg-database"
export PG_SYSTEM_NAMESPACE="cnpg-system"
export PG_PRIMARY_CLUSTER_NAME="pg-primary-${LOCAL_NAME}-${SUFFIX}"
export PG_PRIMARY_STORAGE_ACCOUNT_NAME="hacnpgpsa${SUFFIX}"
export PG_STORAGE_BACKUP_CONTAINER_NAME="backups"
export MY_PUBLIC_CLIENT_IP=$(dig +short myip.opendns.com @resolver3.opendns.com)
Instalace požadovaných rozšíření
Nainstalujte rozšíření potřebná pro integraci a monitorování Kubernetes:
az extension add --upgrade --name k8s-extension --yes
az extension add --upgrade --name amg --yes
Jako předpoklad pro použití kubectlmusíte nejprve nainstalovat Krew, následovaný instalací modulu plug-in CNPG. Tyto instalace umožňují správu operátoru PostgreSQL pomocí následujících příkazů.
(
set -x; cd "$(mktemp -d)" &&
OS="$(uname | tr '[:upper:]' '[:lower:]')" &&
ARCH="$(uname -m | sed -e 's/x86_64/amd64/' -e 's/\(arm\)\(64\)\?.*/\1\2/' -e 's/aarch64$/arm64/')" &&
KREW="krew-${OS}_${ARCH}" &&
curl -fsSLO "https://github.com/kubernetes-sigs/krew/releases/latest/download/${KREW}.tar.gz" &&
tar zxvf "${KREW}.tar.gz" &&
./"${KREW}" install krew
)
export PATH="${KREW_ROOT:-$HOME/.krew}/bin:$PATH"
kubectl krew install cnpg
Vytvoření skupiny zdrojů
Pomocí příkazu vytvořte skupinu prostředků, která bude obsahovat prostředky, které vytvoříte v této příručce az group create .
az group create \
--name $RESOURCE_GROUP_NAME \
--location $PRIMARY_CLUSTER_REGION \
--tags $TAGS \
--query 'properties.provisioningState' \
--output tsv
Vytvořte spravovanou identitu přiřazenou uživatelem
V této části vytvoříte spravovanou identitu přiřazenou uživatelem (UAMI), která umožní CNPG PostgreSQL používat identitu úlohy AKS pro přístup ke službě Azure Blob Storage. Tato konfigurace umožňuje clusteru PostgreSQL v AKS připojit se ke službě Azure Blob Storage bez tajného kódu.
Vytvořte spravovanou identitu přiřazenou uživatelem pomocí příkazu
az identity create.AKS_UAMI_WI_IDENTITY=$(az identity create \ --name $AKS_UAMI_CLUSTER_IDENTITY_NAME \ --resource-group $RESOURCE_GROUP_NAME \ --location $PRIMARY_CLUSTER_REGION \ --output json)Pomocí následujících příkazů povolte identitu úloh AKS a vygenerujte účet služby pro pozdější použití v této příručce:
export AKS_UAMI_WORKLOAD_OBJECTID=$( \ echo "${AKS_UAMI_WI_IDENTITY}" | jq -r '.principalId') export AKS_UAMI_WORKLOAD_RESOURCEID=$( \ echo "${AKS_UAMI_WI_IDENTITY}" | jq -r '.id') export AKS_UAMI_WORKLOAD_CLIENTID=$( \ echo "${AKS_UAMI_WI_IDENTITY}" | jq -r '.clientId') echo "ObjectId: $AKS_UAMI_WORKLOAD_OBJECTID" echo "ResourceId: $AKS_UAMI_WORKLOAD_RESOURCEID" echo "ClientId: $AKS_UAMI_WORKLOAD_CLIENTID"
ID objektu je jedinečný identifikátor ID klienta (označovaného také jako ID aplikace), který jednoznačně identifikuje objekt zabezpečení typu Aplikace v tenantovi Microsoft Entra ID. ID prostředku je jedinečný identifikátor pro správu a vyhledání prostředku v Azure. Tyto hodnoty jsou potřeba ke zprovoznění identity úloh AKS.
Operátor CNPG automaticky vygeneruje účet služby s názvem postgres , který použijete později v průvodci k vytvoření federovaných přihlašovacích údajů, které umožňují přístup K OAuth z PostgreSQL do Azure Storage.
Vytvoření účtu úložiště v primární oblasti
Pomocí příkazu vytvořte účet úložiště objektů pro ukládání záloh PostgreSQL v primární oblasti
az storage account create.az storage account create \ --name $PG_PRIMARY_STORAGE_ACCOUNT_NAME \ --resource-group $RESOURCE_GROUP_NAME \ --location $PRIMARY_CLUSTER_REGION \ --sku Standard_ZRS \ --kind StorageV2 \ --query 'provisioningState' \ --output tsvVytvořte kontejner úložiště, do kterého se budou ukládat protokoly WAL (Write Ahead Logs) a pravidelné zálohování PostgreSQL na vyžádání a plánované pomocí příkazu
az storage container create.az storage container create \ --name $PG_STORAGE_BACKUP_CONTAINER_NAME \ --account-name $PG_PRIMARY_STORAGE_ACCOUNT_NAME \ --auth-mode loginPříklad výstupu:
{ "created": true }Poznámka:
Pokud se zobrazí chybová zpráva:
The request may be blocked by network rules of storage account. Please check network rule set using 'az storage account show -n accountname --query networkRuleSet'. If you want to change the default action to apply when no rule matches, please use 'az storage account update'. Nezapomeňte ověřit uživatelská oprávnění pro Azure Blob Storage a v případě potřeby pomocí zadaných příkazů zvýšit svoji roli naStorage Blob Data Ownera poté příkazaz storage container createopakovat.export USER_ID=$(az ad signed-in-user show --query id --output tsv) export STORAGE_ACCOUNT_PRIMARY_RESOURCE_ID=$(az storage account show \ --name $PG_PRIMARY_STORAGE_ACCOUNT_NAME \ --resource-group $RESOURCE_GROUP_NAME \ --query "id" \ --output tsv) az role assignment list --scope $STORAGE_ACCOUNT_PRIMARY_RESOURCE_ID --output table az role assignment create \ --assignee-object-id $USER_ID \ --assignee-principal-type User \ --scope $STORAGE_ACCOUNT_PRIMARY_RESOURCE_ID \ --role "Storage Blob Data Owner" \ --output tsv
Přiřaďte RBAC k účtům úložiště
Aby bylo možné povolit zálohování, musí cluster PostgreSQL číst a zapisovat do úložiště objektů. Cluster PostgreSQL spuštěný v AKS používá identitu úlohy pro přístup k účtu úložiště prostřednictvím konfiguračního parametru inheritFromAzureADoperátoru CNPG .
Pomocí příkazu
az storage account showzískejte ID primárního prostředku pro účet úložiště.export STORAGE_ACCOUNT_PRIMARY_RESOURCE_ID=$(az storage account show \ --name $PG_PRIMARY_STORAGE_ACCOUNT_NAME \ --resource-group $RESOURCE_GROUP_NAME \ --query "id" \ --output tsv) echo $STORAGE_ACCOUNT_PRIMARY_RESOURCE_IDPřiřaďte předdefinovanou roli Azure "Přispěvatel dat do úložiště objektů blob" k ID objektu v rámci ID prostředku účtu úložiště pro UAMI spojenou se spravovanou identitou pro každý cluster AKS pomocí příkazu
az role assignment create.az role assignment create \ --role "Storage Blob Data Contributor" \ --assignee-object-id $AKS_UAMI_WORKLOAD_OBJECTID \ --assignee-principal-type ServicePrincipal \ --scope $STORAGE_ACCOUNT_PRIMARY_RESOURCE_ID \ --query "id" \ --output tsv
Nastavení infrastruktury monitorování
V této části nasadíte instanci Azure Managed Grafana, pracovního prostoru Azure Monitoru a pracovního prostoru služby Azure Monitor Log Analytics, abyste umožnili monitorování clusteru PostgreSQL. Také uložíte odkazy na vytvořenou monitorovací infrastrukturu, která se použije jako vstup během procesu vytváření clusteru AKS později v průvodci. Dokončení této části může nějakou dobu trvat.
Poznámka:
Instance a clustery AKS spravované v Azure Grafana se účtují nezávisle na sobě. Další informace o cenách najdete v tématu o cenách služby Azure Managed Grafana.
Pomocí příkazu
az grafana createvytvořte spravovanou instanci Azure Grafana.export GRAFANA_PRIMARY="grafana-${LOCAL_NAME}-${SUFFIX}" export GRAFANA_RESOURCE_ID=$(az grafana create \ --resource-group $RESOURCE_GROUP_NAME \ --name $GRAFANA_PRIMARY \ --location $PRIMARY_CLUSTER_REGION \ --zone-redundancy Enabled \ --tags $TAGS \ --query "id" \ --output tsv) echo $GRAFANA_RESOURCE_IDPomocí příkazu
az monitor account createvytvořte pracovní prostor Azure Monitor.export AMW_PRIMARY="amw-${LOCAL_NAME}-${SUFFIX}" export AMW_RESOURCE_ID=$(az monitor account create \ --name $AMW_PRIMARY \ --resource-group $RESOURCE_GROUP_NAME \ --location $PRIMARY_CLUSTER_REGION \ --tags $TAGS \ --query "id" \ --output tsv) echo $AMW_RESOURCE_IDPomocí příkazu vytvořte pracovní prostor
az monitor log-analytics workspace createslužby Azure Monitor Log Analytics.export ALA_PRIMARY="ala-${LOCAL_NAME}-${SUFFIX}" export ALA_RESOURCE_ID=$(az monitor log-analytics workspace create \ --resource-group $RESOURCE_GROUP_NAME \ --workspace-name $ALA_PRIMARY \ --location $PRIMARY_CLUSTER_REGION \ --query "id" \ --output tsv) echo $ALA_RESOURCE_ID
Vytvoření clusteru AKS pro hostování clusteru PostgreSQL
V této části vytvoříte multizonový cluster AKS s fondem uzlů systému. Cluster AKS hostuje primární repliku clusteru PostgreSQL a dvě záložní repliky, každá je umístěna v jiné zóně dostupnosti, aby umožnily zónovou redundanci.
Také přidáte uživatelský fond uzlů do AKS clusteru pro hostování clusteru PostgreSQL. Použití samostatného fondu uzlů umožňuje řídit skladové položky virtuálních počítačů Azure používané pro PostgreSQL a umožňuje fondu systémů AKS optimalizovat výkon a náklady. Popisek použijete u fondu uživatelských uzlů, na který se můžete odkazovat při nasazování operátoru CNPG, jak je popsáno dále v této příručce. Dokončení této části může nějakou dobu trvat.
Důležité
Pokud se rozhodnete použít místní NVMe jako úložiště PostgreSQL v pozdějších částech této příručky, musíte zvolit skladovou položku virtuálního počítače, která podporuje místní jednotky NVMe, například skladové položky virtuálních počítačů optimalizovaných pro úložiště nebo skladové položky virtuálních počítačů s akcelerovanými GPU. Odpovídajícím způsobem aktualizujte $USER_NODE_POOL_VMSKU .
Vytvořte cluster AKS pomocí příkazu
az aks create.export SYSTEM_NODE_POOL_VMSKU="standard_d2s_v3" export USER_NODE_POOL_NAME="postgres" export USER_NODE_POOL_VMSKU="standard_d4s_v3" az aks create \ --name $AKS_PRIMARY_CLUSTER_NAME \ --tags $TAGS \ --resource-group $RESOURCE_GROUP_NAME \ --location $PRIMARY_CLUSTER_REGION \ --generate-ssh-keys \ --node-resource-group $AKS_PRIMARY_MANAGED_RG_NAME \ --enable-managed-identity \ --assign-identity $AKS_UAMI_WORKLOAD_RESOURCEID \ --network-plugin azure \ --network-plugin-mode overlay \ --network-dataplane cilium \ --nodepool-name systempool \ --enable-oidc-issuer \ --enable-workload-identity \ --enable-cluster-autoscaler \ --min-count 2 \ --max-count 3 \ --node-vm-size $SYSTEM_NODE_POOL_VMSKU \ --enable-azure-monitor-metrics \ --azure-monitor-workspace-resource-id $AMW_RESOURCE_ID \ --grafana-resource-id $GRAFANA_RESOURCE_ID \ --api-server-authorized-ip-ranges $MY_PUBLIC_CLIENT_IP \ --tier standard \ --kubernetes-version $AKS_CLUSTER_VERSION \ --zones 1 2 3 \ --output tablePočkejte na dokončení počáteční operace clusteru
az aks waitpomocí příkazu, takže další aktualizace, jako je přidání fondu uzlů uživatele, nekolidujte s probíhající aktualizací spravovaného clusteru:az aks wait \ --resource-group $RESOURCE_GROUP_NAME \ --name $AKS_PRIMARY_CLUSTER_NAME \ --createdPřidejte fond uzlů uživatele do clusteru AKS pomocí
az aks nodepool addpříkazu.az aks nodepool add \ --resource-group $RESOURCE_GROUP_NAME \ --cluster-name $AKS_PRIMARY_CLUSTER_NAME \ --name $USER_NODE_POOL_NAME \ --enable-cluster-autoscaler \ --min-count 3 \ --max-count 6 \ --node-vm-size $USER_NODE_POOL_VMSKU \ --zones 1 2 3 \ --labels workload=postgres \ --output table
Připojte se ke clusteru AKS a vytvořte názvové prostory
V této části získáte přihlašovací údaje clusteru AKS, které slouží jako klíče, které umožňují ověřování a interakci s clusterem. Po připojení vytvoříte dva obory názvů: jeden pro služby správce kontroleru CNPG a jeden pro cluster PostgreSQL a jeho související služby.
Pomocí příkazu získejte přihlašovací údaje clusteru
az aks get-credentialsAKS.az aks get-credentials \ --resource-group $RESOURCE_GROUP_NAME \ --name $AKS_PRIMARY_CLUSTER_NAME \ --output nonePomocí příkazu vytvořte obor názvů pro služby správce kontroleru CNPG, cluster PostgreSQL a související služby
kubectl create namespace.kubectl create namespace $PG_NAMESPACE --context $AKS_PRIMARY_CLUSTER_NAME kubectl create namespace $PG_SYSTEM_NAMESPACE --context $AKS_PRIMARY_CLUSTER_NAME
Teď můžete definovat jinou proměnnou prostředí na základě požadované možnosti úložiště, na kterou odkazujete později v průvodci při nasazování PostgreSQL.
Můžete odkazovat na výchozí předinstalovanou třídu úložiště ovladače CSI pro disky Azure Premium SSD:
export POSTGRES_STORAGE_CLASS="managed-csi-premium"
Aktualizace infrastruktury monitorování
Pracovní prostor Azure Monitoru pro spravované prometheus a Azure Managed Grafana se automaticky propojí s clusterem AKS pro metriky a vizualizaci během procesu vytváření clusteru. V této části povolíte shromažďování protokolů pomocí Přehledů kontejnerů AKS a ověříte, že Managed Prometheus sbírá metriky a Přehledy kontejnerů zpracovávají protokoly.
Pomocí příkazu povolte monitorování Container Insights v clusteru
az aks enable-addonsAKS.az aks enable-addons \ --addon monitoring \ --name $AKS_PRIMARY_CLUSTER_NAME \ --resource-group $RESOURCE_GROUP_NAME \ --workspace-resource-id $ALA_RESOURCE_ID \ --output tablePomocí příkazů
kubectl getaaz aks showověřte, že Managed Prometheus shromažďuje metriky a Container insights ingestuje protokoly z clusteru AKS. Prozkoumejte DaemonSet pomocí těchto příkazů.kubectl get ds ama-metrics-node \ --context $AKS_PRIMARY_CLUSTER_NAME \ --namespace=kube-system kubectl get ds ama-logs \ --context $AKS_PRIMARY_CLUSTER_NAME \ --namespace=kube-system az aks show \ --resource-group $RESOURCE_GROUP_NAME \ --name $AKS_PRIMARY_CLUSTER_NAME \ --query addonProfilesVýstup by měl vypadat podobně jako v následujícím příkladu s celkovým počtem šesti uzlů (tři pro fond uzlů systému a tři pro fond uzlů PostgreSQL) a přehledy kontejnerů ukazující
"enabled": true:NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR ama-metrics-node 6 6 6 6 6 <none> NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR ama-logs 6 6 6 6 6 <none> { "omsagent": { "config": { "logAnalyticsWorkspaceResourceID": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/rg-cnpg-9vbin3p8/providers/Microsoft.OperationalInsights/workspaces/ala-cnpg-9vbin3p8", "useAADAuth": "true" }, "enabled": true, "identity": null } }
Vytvoření veřejné statické IP adresy pro příchozí přenos dat clusteru PostgreSQL
Pokud chcete ověřit nasazení clusteru PostgreSQL a používat klientské nástroje PostgreSQL, jako psql a PgAdmin, musíte zpřístupnit primární a repliky pouze pro čtení pro příchozí spojení. V této části vytvoříte prostředek veřejné IP adresy Azure, který později zadáte do nástroje pro vyrovnávání zatížení Azure, abyste zpřístupnili koncové body PostgreSQL pro dotazy.
Pomocí příkazu získejte název skupiny
az aks showprostředků uzlu clusteru AKS.export AKS_PRIMARY_CLUSTER_NODERG_NAME=$(az aks show \ --name $AKS_PRIMARY_CLUSTER_NAME \ --resource-group $RESOURCE_GROUP_NAME \ --query nodeResourceGroup \ --output tsv) echo $AKS_PRIMARY_CLUSTER_NODERG_NAMEPomocí příkazu vytvořte veřejnou IP adresu
az network public-ip create.export AKS_PRIMARY_CLUSTER_PUBLICIP_NAME="$AKS_PRIMARY_CLUSTER_NAME-pip" az network public-ip create \ --resource-group $AKS_PRIMARY_CLUSTER_NODERG_NAME \ --name $AKS_PRIMARY_CLUSTER_PUBLICIP_NAME \ --location $PRIMARY_CLUSTER_REGION \ --sku Standard \ --zone 1 2 3 \ --allocation-method static \ --output tablePomocí příkazu získejte nově vytvořenou
az network public-ip showveřejnou IP adresu.export AKS_PRIMARY_CLUSTER_PUBLICIP_ADDRESS=$(az network public-ip show \ --resource-group $AKS_PRIMARY_CLUSTER_NODERG_NAME \ --name $AKS_PRIMARY_CLUSTER_PUBLICIP_NAME \ --query ipAddress \ --output tsv) echo $AKS_PRIMARY_CLUSTER_PUBLICIP_ADDRESSZískejte ID prostředku skupiny prostředků uzlu pomocí příkazu
az group show.export AKS_PRIMARY_CLUSTER_NODERG_NAME_SCOPE=$(az group show --name \ $AKS_PRIMARY_CLUSTER_NODERG_NAME \ --query id \ --output tsv) echo $AKS_PRIMARY_CLUSTER_NODERG_NAME_SCOPEPřiřaďte roli "Přispěvatel sítě" k ID objektu UAMI v rámci oboru skupiny prostředků uzlu příkazem
az role assignment create.az role assignment create \ --assignee-object-id ${AKS_UAMI_WORKLOAD_OBJECTID} \ --assignee-principal-type ServicePrincipal \ --role "Network Contributor" \ --scope ${AKS_PRIMARY_CLUSTER_NODERG_NAME_SCOPE}
Instalace operátoru CNPG v clusteru AKS
V této části nainstalujete operátor CNPG v clusteru AKS pomocí manifestu Helm nebo YAML.
- Kormidlo
- YAML
Přidejte úložiště HELM CNPG pomocí
helm repo addpříkazu.helm repo add cnpg https://cloudnative-pg.github.io/chartsAktualizujte úložiště Helm CNPG a nainstalujte jej na clusteru AKS pomocí příkazu
helm upgrades příznakem--install.helm upgrade --install cnpg \ --namespace $PG_SYSTEM_NAMESPACE \ --create-namespace \ --kube-context=$AKS_PRIMARY_CLUSTER_NAME \ cnpg/cloudnative-pgPomocí příkazu ověřte instalaci operátora
kubectl getv clusteru AKS.kubectl get deployment \ --context $AKS_PRIMARY_CLUSTER_NAME \ --namespace $PG_SYSTEM_NAMESPACE cnpg-cloudnative-pg
Další kroky
Přispěvatelé
Microsoft udržuje tento článek. Následující přispěvatelé ho původně napsali:
- Ken Kilty | Hlavní technický manažer programu
- Russell de Pina | Hlavní manažer technických programů
- Adrian Joian | Vedoucí zákaznický inženýr
- Jenny Hayes | Vedoucí vývojář obsahu
- Carol Smith | Vedoucí vývojář obsahu
- Erin Schaffer | Content Developer 2
Uznání
Tato dokumentace byla společně vyvinuta s EnterpriseDB, správci operátoru CloudNativePG. Děkujeme Gabriele Bartolini za revizi dřívějších konceptů tohoto dokumentu a za nabízená technická vylepšení.
Azure Kubernetes Service