Skalowanie serwera usługi Azure Database for PostgreSQL w górę i w dół przy użyciu interfejsu wiersza polecenia (az lub kubectl)

Czasami może być konieczne zmianę właściwości lub definicji serwera. Na przykład:

  • Skalowanie w górę lub w dół liczby rdzeni wirtualnych używanych przez serwer
  • Skalowanie w górę lub w dół pamięci używanej przez serwer

W tym przewodniku wyjaśniono, jak skalować rdzenie wirtualne i/lub pamięć.

Skalowanie w górę lub w dół ustawień rdzeni wirtualnych lub pamięci serwera oznacza, że istnieje możliwość ustawienia wartości minimalnej i/lub maksymalnej dla każdego z ustawień rdzeni wirtualnych i pamięci. Jeśli chcesz skonfigurować serwer tak, aby używał określonej liczby rdzeni wirtualnych lub określonej ilości pamięci, należy ustawić minimalne ustawienia równe maksymalnym ustawieniu. Przed zwiększeniem wartości ustawionej dla rdzeni wirtualnych i pamięci należy się upewnić, że

  • masz wystarczającą ilość zasobów dostępnych w infrastrukturze fizycznej, która hostuje wdrożenie i
  • obciążenia podzielone na ten sam system nie konkurują o te same rdzenie wirtualne ani pamięć.

Uwaga

Jako funkcja w wersji zapoznawczej technologia przedstawiona w tym artykule podlega dodatkowym warunkom użytkowania dla wersji zapoznawczych platformy Microsoft Azure.

Najnowsze aktualizacje są dostępne w informacjach o wersji.

Pokaż bieżącą definicję serwera

Aby wyświetlić bieżącą definicję serwera i sprawdzić, jakie są bieżące ustawienia rdzeni wirtualnych i pamięci, uruchom jedną z następujących poleceń:

Za pomocą interfejsu wiersza polecenia platformy Azure (az)

az postgres server-arc show -n <server name> --k8s-namespace <namespace> --use-k8s

Interfejs wiersza polecenia z rozwiązaniem kubectl

kubectl describe postgresql/<server name> -n <namespace name>

Zwraca konfigurację grupy serwerów. Jeśli serwer został utworzony z ustawieniami domyślnymi, definicja powinna być widoczna w następujący sposób:

Spec:
  Dev:  false
  Scheduling:
    Default:
      Resources:
        Requests:
          Memory:  256Mi
...

Interpretowanie definicji serwera

W definicji serwera sekcja, która przenosi ustawienia minimalnej lub maksymalnej liczby rdzeni wirtualnych na węzeł, a minimalna lub maksymalna ilość pamięci na węzeł jest sekcją "planowanie". W tej sekcji maksymalne ustawienia będą utrwalane w podsekcji o nazwie "limity", a minimalne ustawienia są utrwalane w podsekcji o nazwie "requests".

Jeśli ustawisz minimalne ustawienia, które różnią się od maksymalnych ustawień, konfiguracja gwarantuje, że serwer zostanie przydzielony żądanym zasobom, jeśli będzie potrzebny. Nie przekroczy ona ustawionych limitów.

Zasoby (rdzenie wirtualne i pamięć), które będą rzeczywiście używane przez serwer, są maksymalnie skonfigurowane i zależą od obciążeń i zasobów dostępnych w klastrze. Jeśli ustawienia nie są maksymalne, serwer może używać maksymalnie wszystkich zasobów przydzielanych przez klaster Kubernetes do węzłów Kubernetes, na których zaplanowano serwer.

W konfiguracji domyślnej tylko minimalna pamięć jest ustawiona na 256Mi, ponieważ jest to minimalna ilość pamięci zalecanej do uruchamiania serwera PostgreSQL.

Uwaga

Ustawienie minimum nie oznacza, że serwer musi używać tego minimum. Oznacza to, że jeśli serwer go potrzebuje, gwarantowane jest przydzielenie co najmniej tego minimum. Rozważmy na przykład ustawienie --minCpu 2. Nie oznacza to, że serwer będzie używać co najmniej 2 rdzeni wirtualnych przez cały czas. Zamiast tego oznacza to, że na serwerze może zacząć używać mniej niż 2 rdzenie wirtualne, jeśli nie jest potrzebne tyle, i gwarantowane jest przydzielenie co najmniej 2 rdzeni wirtualnych, jeśli będzie ich potrzebować później. Oznacza to, że klaster Kubernetes przydziela zasoby innym obciążeniom w taki sposób, że może przydzielić 2 rdzenie wirtualne do serwera, jeśli kiedykolwiek ich potrzebuje. Ponadto skalowanie w górę i w dół nie jest operacją online, ponieważ wymaga ponownego uruchomienia zasobników kubernetes.

Uwaga

Przed zmodyfikowaniem konfiguracji systemu upewnij się, że zapoznaj się z modelem zasobów Kubernetes tutaj

Skalowanie w górę i w dół serwera

Skalowanie w górę odnosi się do zwiększania wartości rdzeni wirtualnych i/lub ustawień pamięci serwera. Skalowanie w dół odnosi się do zmniejszania wartości rdzeni wirtualnych i/lub ustawień pamięci serwera.

Ustawienia, które chcesz ustawić, należy wziąć pod uwagę w konfiguracji ustawionej dla klastra Kubernetes. Upewnij się, że nie ustawiasz wartości, których klaster Kubernetes nie będzie mógł spełnić. Może to prowadzić do błędów lub nieprzewidywalnego zachowania, takiego jak niedostępność wystąpienia bazy danych. Na przykład jeśli stan serwera pozostaje w stanie aktualizowania przez długi czas po zmianie konfiguracji, może to oznaczać, że ustawiono poniższe parametry na wartości, których klaster Kubernetes nie może spełnić. W takim przypadku przywróć zmianę lub przeczytaj _troubleshooting_section.

Jakie ustawienia należy ustawić?

  • Aby ustawić minimalną liczbę rdzeni wirtualnych, ustaw wartość --cores-request.
  • Aby ustawić maksymalną liczbę rdzeni wirtualnych, ustaw wartość --cores-limit.
  • Aby ustawić minimalną ilość pamięci, ustaw --memory-request
  • Aby ustawić maksymalną pamięć, ustaw --memory-limit

Uwaga

W przypadku platformy Kubernetes skonfigurowanie ustawienia limitu bez konfigurowania odpowiedniego ustawienia żądania wymusza, aby wartość żądania odpowiadała tej samej wartości co limit. Może to potencjalnie prowadzić do niedostępności serwera, ponieważ jego zasobniki mogą nie zostać ponownie ułożone, jeśli nie ma węzła Kubernetes dostępnego z wystarczającą ilością zasobów. W związku z tym, aby uniknąć tej sytuacji, w poniższych przykładach pokazano, jak ustawić zarówno żądanie, jak i ustawienia limitu.

Ogólna składnia to:

az postgres server-arc edit -n <server name> --memory-limit/memory-request/cores-request/cores-limit <val> --k8s-namespace <namespace> --use-k8s

Wartość wskazana dla ustawienia pamięci to liczba, po której następuje jednostka woluminu. Na przykład, aby wskazać 1 Gb, należy wskazać wartość 1024Mi lub 1Gi. Aby wskazać liczbę rdzeni, wystarczy przekazać liczbę bez jednostki.

Przykłady przy użyciu interfejsu wiersza polecenia platformy Azure

Skonfiguruj serwer tak, aby nie przekraczał 2 rdzeni:

 az postgres server-arc edit -n postgres01 --cores-request 1, --cores-limit 2  --k8s-namespace arc --use-k8s

Uwaga

Aby uzyskać szczegółowe informacje o tych parametrach, uruchom polecenie az postgres server-arc update --help.

Przykład użycia narzędzi natywnych platformy Kubernetes, takich jak kubectl

Uruchom polecenie:

kubectl edit postgresql/<server name> -n <namespace name>

Spowoduje to przejście do edytora vi , w którym można nawigować i zmieniać konfigurację. Użyj następującego polecenia, aby zamapować żądane ustawienie na nazwę pola w specyfikacji:

Uwaga

Poniżej przedstawiono przykład przedstawiający sposób edytowania konfiguracji. Przed zaktualizowaniem konfiguracji upewnij się, że ustawiono parametry na wartości, które klaster Kubernetes może honorować.

Jeśli na przykład chcesz ustawić następujące ustawienia dla ról koordynatora i procesu roboczego na następujące wartości:

  • Minimalna liczba rdzeni wirtualnych = 2
  • Maksymalna liczba rdzeni wirtualnych = 4
  • Minimalna pamięć = 512Mb
  • Maksymalna ilość pamięci = 1Gb

Należy ustawić definicję grupy serwerów tak, aby była zgodna z poniższą konfiguracją:

...
  spec:
  dev: false
  scheduling:
    default:
      resources:
        requests:
          cpu: "2"
          memory: 256Mi
        limits:
          cpu: "4"
          memory: 1Gi
...

Jeśli nie znasz edytora vi , zapoznaj się z opisem poleceń, których możesz potrzebować tutaj:

  • Tryb edycji: i
  • Poruszanie się za pomocą strzałek
  • Zakończ edycję: esc
  • Zakończ bez zapisywania: :qa!
  • Zakończ po zapisaniu: :qw!

Resetuj do wartości domyślnych

Aby zresetować limity rdzeni/pamięci/parametry żądań do wartości domyślnych, zmodyfikuj je i przekaż pusty ciąg zamiast rzeczywistej wartości. Jeśli na przykład chcesz zresetować parametr limitu rdzenia, uruchom następujące polecenia:

az postgres server-arc edit -n postgres01 --cores-request '' --k8s-namespace arc --use-k8s
az postgres server-arc edit -n postgres01 --cores-limit '' --k8s-namespace arc --use-k8s

lub

az postgres server-arc edit -n postgres01 --cores-request '' --cores-limit '' --k8s-namespace arc --use-k8s