Vytvoření infrastruktury pro nasazení vysoce dostupné databáze PostgreSQL v AKS
V tomto článku vytvoříte infrastrukturu potřebnou 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.
Například úložiště Ray GitHub popisuje několik platforem, které se liší v době odezvy , účelu a úrovni podpory.
Microsoft zodpovídá za vytváření opensourcových balíčků, které nasazujeme v AKS. Tato odpovědnost zahrnuje úplné vlastnictví sestavení, skenování, podepisování, ověřování a opravy hotfix spolu s kontrolou binárních souborů v imagích kontejneru. Další informace najdete v tématu Správa ohrožení zabezpečení pro AKS a AKS podporují pokrytí.
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í
V tomto průvodci nastavte následující proměnné prostředí:
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="westus3"
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.29"
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 ENABLE_AZURE_PVC_UPDATES="true"
export MY_PUBLIC_CLIENT_IP=$(dig +short myip.opendns.com @resolver3.opendns.com)
Instalace požadovaných rozšíření
k8s-extension
Rozšíření aks-preview
poskytují amg
další funkce pro správu clusterů Kubernetes a dotazování prostředků Azure. Nainstalujte tato rozšíření pomocí následujících az extension add
příkazů:
az extension add --upgrade --name aks-preview --yes --allow-preview true
az extension add --upgrade --name k8s-extension --yes --allow-preview false
az extension add --upgrade --name amg --yes --allow-preview false
Jako předpoklad pro použití kubectl je nezbytné nejprve nainstalovat Krew, následovaný instalací modulu plug-in CNPG. To umožní 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ření spravované identity přiřazené 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.
Pomocí příkazu vytvořte spravovanou identitu přiřazenou uživatelem
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 k povolení 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 tsv
Vytvořte kontejner úložiště, do kterého se budou ukládat protokoly wal (Write Ahead Logs) a pravidelné postgreSQL na vyžádání a plánované zálohování pomocí
az storage container create
příkazu.az storage container create \ --name $PG_STORAGE_BACKUP_CONTAINER_NAME \ --account-name $PG_PRIMARY_STORAGE_ACCOUNT_NAME \ --auth-mode login
Pří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'
. Ověřte uživatelská oprávnění pro Azure Blob Storage a v případě potřeby zvyšte svoji roliStorage Blob Data Owner
pomocí níže uvedených příkazů a po opakováníaz storage container create
příkazu.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řazení 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 inheritFromAzureAD
operátoru CNPG .
Pomocí příkazu získejte ID primárního prostředku pro účet
az storage account show
ú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_ID
Přiřaďte předdefinované roli Azure Přispěvatel dat objektů blob úložiště k ID objektu s oborem ID prostředku účtu úložiště pro UAMI přidruženou ke spravované identitě pro každý cluster AKS pomocí
az role assignment create
příkazu.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 vytvořte spravovanou instanci
az grafana create
Grafana Azure.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_ID
Pomocí příkazu vytvořte pracovní prostor Azure Monitoru
az monitor account create
.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_ID
Pomocí příkazu vytvořte pracovní prostor
az monitor log-analytics workspace create
služ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 cluster AKS s vícezonem s fondem systémových uzlů. Cluster AKS hostuje primární repliku clusteru PostgreSQL a dvě pohotovostní repliky, které jsou v souladu s jinou zónou dostupnosti, aby bylo možné zónovou redundanci.
Také přidáte fond uzlů uživatele do clusteru AKS 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 uzlů uživatele, na který můžete odkazovat při nasazování operátoru CNPG dále v této příručce. Dokončení této části může nějakou dobu trvat.
Pomocí příkazu vytvořte cluster
az aks create
AKS.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 table
Přidejte fond uzlů uživatele do clusteru AKS pomocí
az aks nodepool add
pří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
Poznámka:
Pokud se při přidávání fondu uzlů AKS zobrazí chybová zpráva "(OperationNotAllowed) Operation is not allowed: Another operation (Updating) is in progress, please wait for it to finish before starting a new operation."
, počkejte několik minut, než se operace clusteru AKS dokončí, a pak spusťte az aks nodepool add
příkaz.
Připojení ke clusteru AKS a vytvoření oborů názvů
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-credentials
AKS.az aks get-credentials \ --resource-group $RESOURCE_GROUP_NAME \ --name $AKS_PRIMARY_CLUSTER_NAME \ --output none
Pomocí 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
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ů kontejneru AKS a ověříte, že managed Prometheus ingestuje metriky a přehledy kontejnerů ingestují protokoly.
Pomocí příkazu povolte monitorování Container Insights v clusteru
az aks enable-addons
AKS.az aks enable-addons \ --addon monitoring \ --name $AKS_PRIMARY_CLUSTER_NAME \ --resource-group $RESOURCE_GROUP_NAME \ --workspace-resource-id $ALA_RESOURCE_ID \ --output table
Pomocí příkazu a příkazu ověřte, že managed Prometheus zaznamenává metriky a přehledy kontejnerů ingestují protokoly z clusteru AKS. Zkontrolujte daemonSet pomocí
kubectl get
příkazu aaz aks show
příkazu.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 addonProfiles
Výstup by měl vypadat podobně jako v následujícím příkladu s celkovým šesti uzly (tři pro fond uzlů systému a tři pro fond uzlů PostgreSQL) a přehledy kontejneru 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 je psql a PgAdmin, musíte zpřístupnit primární a jen pro čtení replik pro příchozí přenos dat. 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 show
prostř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_NAME
Pomocí 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 table
Pomocí příkazu získejte nově vytvořenou
az network public-ip show
veř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_ADDRESS
Pomocí příkazu získejte ID prostředku skupiny
az group show
prostředků uzlu.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_SCOPE
Přiřaďte roli Přispěvatel sítě k ID objektu UAMI pomocí oboru skupiny prostředků uzlu pomocí
az role assignment create
příkazu.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.
Přidejte úložiště HELM CNPG pomocí
helm repo add
příkazu.helm repo add cnpg https://cloudnative-pg.github.io/charts
Upgradujte úložiště Helm CNPG a nainstalujte ho
helm upgrade
do clusteru AKS pomocí příkazu s příznakem--install
.helm upgrade --install cnpg \ --namespace $PG_SYSTEM_NAMESPACE \ --create-namespace \ --kube-context=$AKS_PRIMARY_CLUSTER_NAME \ cnpg/cloudnative-pg
Pomocí příkazu ověřte instalaci operátora
kubectl get
v 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í čip TPM
- Russell de Pina | Hlavní čip TPM
- 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
Azure Kubernetes Service