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

1. Omówienie

W tym module wdrożysz dwupoziomowy mikroserwis z podem działającym w ramach Autopilota w GKE i połączysz go z prywatną instancją bazy danych AlloyDB. Aplikacja obsługi klienta jest częścią systemu Cymbal Eats i udostępnia funkcje zarządzania zarejestrowanymi użytkownikami. Aplikacja obsługi klienta to oparty na Javie mikroserwis, który korzysta ze platformy Quarkus.

e8a5140b09521b7a.png

AlloyDB obsługuje połączenia sieciowe przez prywatne, wewnętrzne adresy IP skonfigurowane pod kątem dostępu do usług prywatnych.

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

44662d7a086358pl.png

Czym jest Autopilot w GKE?

Autopilot w GKE to tryb działania w GKE, 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 plików manifestu Kubernetes. Uproszczona konfiguracja jest zgodna ze sprawdzonymi metodami i zaleceniami GKE dotyczącymi konfigurowania, skalowalności i zabezpieczeń klastra oraz zadań. Listę wbudowanych ustawień znajdziesz w tabeli porównań Autopilota i standardów.

Co to jest AlloyDB?

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

Czego się nauczysz

Z tego modułu nauczysz się:

  • Tworzenie prywatnej instancji bazy danych AlloyDB
  • Wdróż w klastrze GKE z Autopilotem aplikację, która łączy się z instancją AlloyDB

Wymagania wstępne

  • W tym module zakładamy, że znasz środowiska konsoli Cloud i Cloud Shell.
  • Wcześniejsze środowiska GKE i AlloyDB są pomocne, ale nie wymagane.

2. Konfiguracja i wymagania

Konfigurowanie projektu Cloud

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

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • Nazwa projektu jest wyświetlaną nazwą uczestników tego projektu. To ciąg znaków, który nie jest używany przez interfejsy API Google. W każdej chwili możesz ją zmienić.
  • Identyfikator projektu jest unikalny we wszystkich projektach Google Cloud i nie można go zmienić (po jego ustawieniu nie można go zmienić). Cloud Console automatycznie wygeneruje unikalny ciąg znaków. zwykle nieważne, co ona jest. W większości ćwiczeń z programowania konieczne jest odwołanie się do identyfikatora projektu (zwykle nazywa się on PROJECT_ID). Jeśli nie podoba Ci się wygenerowany identyfikator, możesz wygenerować kolejny losowy. Możesz też spróbować własnych sił i sprawdzić, czy jest dostępna. Potem nie będzie można go zmienić. Pozostanie ono przez czas trwania projektu.
  • Dostępna jest trzecia wartość, numer projektu, z którego korzystają niektóre interfejsy API. Więcej informacji o wszystkich 3 wartościach znajdziesz w dokumentacji.
  1. Następnie musisz włączyć płatności w Cloud Console, aby korzystać z zasobów Cloud/interfejsów API. Ukończenie tego ćwiczenia z programowania nie powinno kosztować zbyt wiele. Aby wyłączyć zasoby, aby nie naliczać opłat po zakończeniu tego samouczka, możesz usunąć utworzone zasoby lub cały projekt. Nowi użytkownicy Google Cloud mogą skorzystać z programu bezpłatnego okresu próbnego o wartości 300 USD.

Konfiguracja środowiska

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

eb0157a992f16fa3.png

Sklonuj repozytorium, przejdź do katalogu, skopiuj poniższe polecenie, wklej je w terminalu i naciśnij Enter:

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

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

Zostaną utworzone te zasoby:

  • Klaster i instancja AlloyDB
  • Artifact Registry do przechowywania obrazów kontenerów na potrzeby zadań i obsługi klienta w Cloud Run
  • Oprogramowanie sprzęgające dostęp do VPC na potrzeby zadania Cloud Run komunikuje się z bazą danych AlloyDB
  • Zadanie Cloud Run do utworzenia bazy danych AlloyDB
  • Klaster z Autopilotem w GKE
./gke-lab-setup.sh

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

6356559df3eccdda.png

Konfiguracja potrwa około 10 minut. Zapoznaj się ze skryptem konfiguracji używanym do tworzenia wymaganych zależności.

gke-lab-setup.sh

Zanim wykonasz następne kroki, 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

Uruchom poniższe polecenie, aby sprawdzić utworzoną instancję AlloyDB:

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)')

Klaster został utworzony w ramach początkowej konfiguracji przy użyciu poniższego polecenia (nie musisz go uruchamiać):

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

Uruchom polecenie, aby wyświetlić utworzony klaster GKE z Autopilotem:

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 obsługi klienta to oparty na języku Java mikroserwis, który korzysta ze platformy Quarkus.

Przejdź do folderu cymbal-eats/customer-service i uruchom polecenia, aby utworzyć oraz 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 kluczy 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 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

Zanim aplikacja przejdzie w stan uruchomienia, może chwilę potrwać.

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

SERVICE_NAME=customer-service

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

Uruchom polecenie, aby sprawdzić utworzone zasoby:

kubectl get all

Przykładowe dane wyjściowe:

179a23bd33793924.png

4. Testuj aplikację

Uruchom poniższe polecenia, aby zapisać adres URL obsługi klienta.

kubectl get svc

Ustaw zmienną środowiskową poniżej, używając wartości zewnętrznego adresu IP z poprzednich danych wyjściowych.

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

Aby utworzyć nowy rekord klienta, uruchom polecenia poniżej:

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 polecenie powyżej kilka razy, aby wygenerować komunikaty logu, które będziesz później wyświetlać w eksploratorze logów.

Sprawdź dane klientów

Uruchom poniższe polecenia, aby wyświetlić utworzony rekord klienta.

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"
  }
]

Przejrzyj zadania i usługi GKE

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

e1217216e003a839.png

d5c97fb5950c4db.png

Logi aplikacji

Otwórz Eksplorator logów i wyszukaj dzienniki zawierające komunikat „Klient już istnieje”. tekstu.

543c5ed97819f540.png

5. Gratulacje!

Gratulacje. Udało Ci się ukończyć ćwiczenia z programowania.

Omówione zagadnienia:

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

Co dalej:

Poznaj inne ćwiczenia z programowania 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.

Usuwam projekt

Najprostszym sposobem na uniknięcie płatności jest usunięcie projektu utworzonego na potrzeby samouczka.