Łączę z instancją prywatnej AlloyDB z aplikacji uruchomionej w Autopilocie w GKE

1. Przegląd

W tym module wdrożysz dwuwarstwowy mikroserwis z podem działającym w GKE Autopilot i połączysz go z prywatną instancją bazy danych AlloyDB. Aplikacja Customer Service jest częścią systemu Cymbal Eats i umożliwia zarządzanie zarejestrowanymi użytkownikami. Aplikacja Customer Service to mikroserwis oparty na Javie, który korzysta z platformy Quarkus.

e8a5140b09521b7a.png

AlloyDB obsługuje łączność sieciową za pomocą prywatnych wewnętrznych adresów IP skonfigurowanych na potrzeby prywatnego dostępu do usług.

Dostęp do usług prywatnych jest realizowany jako połączenie równorzędne VPC między Twoją siecią VPC a bazową siecią VPC Google Cloud, w której znajdują się Twoje zasoby AlloyDB (klastry i instancje). Prywatne połączenie umożliwia zasobom w sieci VPC komunikowanie się z zasobami AlloyDB, do których mają dostęp, wyłącznie za pomocą wewnętrznych adresów IP. Zasoby w sieci VPC nie potrzebują dostępu do internetu ani zewnętrznych adresów IP, aby uzyskać dostęp do zasobów AlloyDB.

44662d7a086358de.png

Czym jest Autopilot w GKE?

Autopilot w GKE to tryb działania, w którym Google zarządza konfiguracją klastra, w tym węzłami, skalowaniem, zabezpieczeniami i innymi wstępnie skonfigurowanymi ustawieniami. Klastry z Autopilotem są zoptymalizowane pod kątem uruchamiania większości zbiorów zadań produkcyjnych i udostępniania zasobów obliczeniowych na podstawie Twoich plików manifestu Kubernetes. Uproszczona konfiguracja jest zgodna ze sprawdzonymi metodami i rekomendacjami GKE dotyczącymi konfiguracji klastra i zbioru zadań, skalowalności oraz bezpieczeństwa. Listę wbudowanych ustawień znajdziesz w tabeli porównawczej Autopilota i klastrów standardowych.

Co to jest AlloyDB?

W pełni zarządzana usługa bazy danych zgodnej z PostgreSQL dla najbardziej wymagających zadań firmowych. AlloyDB to połączenie najlepszych rozwiązań Google z jednym z najpopularniejszych mechanizmów baz danych open source – PostgreSQL, które zapewnia wysoką wydajność, skalowalność i dostępność.

Czego się nauczysz

W tym module nauczysz się:

  • Tworzenie prywatnej instancji bazy danych AlloyDB
  • Wdrażanie aplikacji w klastrze GKE Autopilot, która łączy się z instancją AlloyDB

Wymagania wstępne

  • Zakładamy, że użytkownik zna środowiska konsoli Cloud i Cloud Shell.
  • Wcześniejsze doświadczenie z GKE i AlloyDB może być pomocne, ale nie jest wymagane.

2. Konfiguracja i wymagania

Konfigurowanie projektu w Google Cloud

  1. Zaloguj się w konsoli Google Cloud i utwórz nowy projekt lub użyj istniejącego. Jeśli nie masz jeszcze konta Gmail ani Google Workspace, musisz je utworzyć.

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • Nazwa projektu to wyświetlana nazwa uczestników tego projektu. Jest to ciąg znaków, który nie jest używany przez interfejsy API Google. Możesz ją zaktualizować w dowolnym momencie.
  • Identyfikator projektu jest unikalny we wszystkich projektach Google Cloud i nie można go zmienić po ustawieniu. Konsola Cloud automatycznie generuje unikalny ciąg znaków. Zwykle nie musisz się nim przejmować. W większości ćwiczeń z programowania musisz odwoływać się do identyfikatora projektu (zwykle jest on oznaczony jako PROJECT_ID). Jeśli wygenerowany identyfikator Ci się nie podoba, możesz wygenerować inny losowy identyfikator. Możesz też spróbować własnej nazwy i sprawdzić, czy jest dostępna. Po tym kroku nie można go zmienić i będzie obowiązywać przez cały czas trwania projektu.
  • Warto wiedzieć, że istnieje też trzecia wartość, czyli numer projektu, z której korzystają niektóre interfejsy API. Więcej informacji o tych 3 wartościach znajdziesz w dokumentacji.
  1. Następnie musisz włączyć płatności w konsoli Cloud, aby korzystać z zasobów i interfejsów API Google Cloud. Ukończenie tego laboratorium nie powinno wiązać się z dużymi kosztami, a nawet z żadnymi. Aby wyłączyć zasoby i uniknąć naliczania opłat po zakończeniu tego samouczka, możesz usunąć utworzone zasoby lub cały projekt. Nowi użytkownicy Google Cloud mogą skorzystać z bezpłatnego okresu próbnego, w którym mają do dyspozycji środki w wysokości 300 USD.

Konfiguracja środowiska

Aktywuj Cloud Shell, klikając ikonę po prawej stronie paska wyszukiwania.

eb0157a992f16fa3.png

Sklonuj repozytorium i przejdź do katalogu. Skopiuj i wklej poniższe polecenie do terminala, a potem naciśnij Enter:

git clone https://github.com/GoogleCloudPlatform/cymbal-eats.git && cd cymbal-eats/customer-service

Wdróż wymagane zależności, uruchamiając polecenie gke-lab-setup.sh.

Zostaną utworzone te zasoby:

  • Klaster i instancja AlloyDB
  • Artifact Registry do przechowywania obrazów kontenerów na potrzeby zadania Cloud Run i obsługi klienta
  • Oprogramowanie sprzęgające dostęp do VPC w przypadku zadania Cloud Run, które ma komunikować się z bazą danych AlloyDB
  • Zadanie Cloud Run do tworzenia bazy danych AlloyDB
  • Klaster GKE Autopilot
./gke-lab-setup.sh

Jeśli pojawi się prośba o autoryzację, kliknij „Autoryzuj”, aby kontynuować.

6356559df3eccdda.png

Konfiguracja zajmie około 10 minut. Sprawdź skrypt konfiguracji, który służy do tworzenia wymaganych zależności.

gke-lab-setup.sh

Zanim wykonasz kolejne czynności, poczekaj, aż skrypt zakończy działanie i zobaczysz dane wyjściowe poniżej.

Job [db-job] has successfully been created.

To execute this job, use:
gcloud beta run jobs execute db-job
OK Creating execution... Done.               
  OK Provisioning resources...
Done.
Execution [db-job-k94ps] has successfully started running.

3. Wdrażanie aplikacji

Sprawdzanie klastra AlloyDB

Aby sprawdzić utworzoną instancję AlloyDB, uruchom to polecenie:

gcloud alloydb instances describe customer-instance --cluster=customer-cluster --region=us-central1

Przykładowe dane wyjściowe:

createTime: '2023-01-06T14:40:07.213288293Z'
instanceType: PRIMARY
ipAddress: 10.77.176.2
machineConfig:
  cpuCount: 2
name: projects/cymbal-eats-20056-16671/locations/us-central1/clusters/customer-cluster/instances/customer-instance
nodes:
- zoneId: us-central1-f
queryInsightsConfig:
  queryPlansPerMinute: 5
  queryStringLength: 1024
  recordApplicationTags: true
  recordClientAddress: true
reconciling: false
state: READY
uid: df90d57d-88df-49be-a626-6dfec0513e64
updateTime: '2023-01-06T14:49:40.907977843Z'
writableNode:
  zoneId: us-central1-b

Poznaj dostępne funkcje(Statystyki zapytań, Monitorowanie) w konsoli.

3b12b0fa1367fb42.png

Sprawdź klaster GKE z Autopilotem

Ustaw zmienne środowiskowe projektu:

export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)')
export PROJECT_NAME=$(gcloud projects describe $PROJECT_ID --format='value(name)')

W ramach konfiguracji początkowej klaster został utworzony za pomocą poniższego polecenia (nie musisz go uruchamiać):

gcloud container clusters create-auto $CLUSTER_NAME --region $REGION

Uruchom to polecenie, aby wyświetlić utworzony klaster GKE w trybie Autopilota:

gcloud container clusters list

Przykładowe dane wyjściowe:

e8882c44fa0bb631.png

Uruchom polecenie, aby zapisać dane logowania do klastra:

CLUSTER_NAME=rewards-cluster
REGION=us-central1

gcloud container clusters get-credentials $CLUSTER_NAME --region=$REGION

Wdrażanie aplikacji

Następnie wdrożysz aplikację obsługi klienta.

Aplikacja Customer Service to mikroserwis oparty na Javie, który korzysta z platformy Quarkus.

Otwórz folder cymbal-eats/customer-service i uruchom polecenia, aby utworzyć i przesłać obraz kontenera:

./mvnw clean package -DskipTests

export CUSTOMER_SERVICE_IMAGE=gcr.io/$PROJECT_ID/customer-service:1.0.0

gcloud builds submit --tag $CUSTOMER_SERVICE_IMAGE .

Otwórz Cloud Build w konsoli, aby sprawdzić szczegóły najnowszej kompilacji.

49fd65309967ae47.png

Ustaw zmienną środowiskową poniżej, używając wartości prywatnego adresu IP AlloyDB:

export DB_HOST=$(gcloud beta alloydb instances describe customer-instance \
    --cluster=customer-cluster \
    --region=$REGION \
    --format=json | jq \
    --raw-output ".ipAddress")

echo $DB_HOST

Uruchom poniższe polecenia, aby utworzyć obiekt tajnych danych Kubernetes do przechowywania danych logowania do bazy danych, które będą używane przez aplikację obsługi klienta do łączenia się z bazą danych:

DB_NAME=customers
DB_USER=postgres
DB_PASSWORD=password123

kubectl create secret generic gke-alloydb-secrets \
  --from-literal=database=$DB_NAME \
  --from-literal=username=$DB_USER \
  --from-literal=password=$DB_PASSWORD \
  --from-literal=db_host=$DB_HOST

Uruchom to polecenie, aby zastąpić CUSTOMER_SERVICE_IMAGE w pliku deployment.yaml:

sed "s@CUSTOMER_SERVICE_IMAGE@$CUSTOMER_SERVICE_IMAGE@g" deployment.yaml.tmpl > customer-service-deployment.yaml

Uruchom polecenie, aby wdrożyć aplikację:

kubectl apply -f customer-service-deployment.yaml

Przejście aplikacji do stanu URUCHOMIONA może chwilę potrwać.

Uruchom to polecenie, aby utworzyć zewnętrzny adres IP, który będzie używany w krokach testu:

SERVICE_NAME=customer-service

kubectl expose deployment $SERVICE_NAME \
  --type LoadBalancer --port 80 --target-port 8080

Uruchom to polecenie, aby sprawdzić utworzone zasoby:

kubectl get all

Przykładowe dane wyjściowe:

179a23bd33793924.png

4. Testowanie aplikacji

Aby zapisać adres URL obsługi klienta, uruchom te polecenia:

kubectl get svc

Ustaw zmienną środowiskową poniżej, używając wartości zewnętrznego adresu IP z poprzedniego wyniku.

CUSTOMER_SERVICE_URL=$(kubectl get svc customer-service -o=jsonpath='{.status.loadBalancer.ingress[0].ip}')

Aby utworzyć nowy rekord klienta, uruchom te polecenia:

curl -X POST $CUSTOMER_SERVICE_URL/customer \
-H 'Content-Type: application/json' \
-d '{"id": "id1","rewardPoints": 3,"address": "1845 Denise St","city": "Mountain View","createDateTime": "2022-11-11T15:56:45.487566","email": "ajensen9090+eats@gmail.com","name": "Angela Jensen","state": "CA","updateDateTime": "2022-11-11T15:56:45.866125","zip": "94043"}'

Uruchom powyższe polecenie kilka razy, aby wygenerować komunikaty logu, które później wyświetlisz w Eksploratorze logów.

Sprawdzanie danych klientów

Aby wyświetlić utworzony rekord klienta, uruchom te polecenia:

curl $CUSTOMER_SERVICE_URL/customer | jq

Przykładowe dane wyjściowe:

[
  {
    "address": "1845 Denise St",
    "city": "Mountain View",
    "createDateTime": "2023-01-06T16:13:19.118744",
    "email": "ajensen9090+eats@gmail.com",
    "id": "id1",
    "name": "Angela Jensen",
    "rewardPoints": 3,
    "state": "CA",
    "updateDateTime": "2023-01-06T16:13:19.118896",
    "zip": "94043"
  }
]

Sprawdzanie zadań i usług GKE

Otwórz Kubernetes Engine w konsoli Cloud i sprawdź utworzone zadania i usługi.

e1217216e003a839.png

d5c97fb5950c4db.png

Logi aplikacji

Otwórz eksplorator logów i wyszukaj logi zawierające tekst „Customer already exists” (Klient już istnieje).

543c5ed97819f540.png

5. Gratulacje!

Gratulacje! Codelab został ukończony.

Omówione zagadnienia:

  • Jak utworzyć prywatną instancję bazy danych AlloyDB
  • Jak wdrożyć aplikację w klastrze GKE z Autopilotem, która łączy się z instancją AlloyDB

Co dalej?

Zapoznaj się z innymi ćwiczeniami z programowania dotyczącymi Cymbal Eats:

Czyszczenie danych

Aby uniknąć obciążenia konta Google Cloud opłatami za zasoby zużyte w tym samouczku, możesz usunąć projekt zawierający te zasoby lub zachować projekt i usunąć poszczególne zasoby.

Usuwanie projektu

Najprostszym sposobem na uniknięcie płatności jest usunięcie projektu utworzonego w tym samouczku.