1. Wprowadzenie
Cześć wszystkim, dziękuję za przybycie! Chcesz poznać Google Compute Engine?
W tym module poznamy Compute Engine na przykładzie aplikacji księgi gości.
Utworzysz instancje Compute Engine, wdrożysz nginx i na koniec umieścisz z przodu sieciowy system równoważenia obciążenia. Instancję Compute Engine możesz utworzyć w konsoli graficznej lub wierszu poleceń. W tym module dowiesz się, jak korzystać z wiersza poleceń.

Google Compute Engine oferuje maszyny wirtualne działające w centrach danych Google połączonych z globalną siecią światłowodową. Dostępne narzędzia i procesy umożliwiają skalowanie od pojedynczych instancji po globalne, zrównoważone pod względem obciążenia przetwarzanie w chmurze.
Te maszyny wirtualne szybko się uruchamiają, mają pamięć masową Persistent Disk i zapewniają stałą wydajność. Maszyny są dostępne w wielu konfiguracjach, w tym w predefiniowanych rozmiarach, a także można je tworzyć za pomocą niestandardowych typów maszyn zoptymalizowanych pod kątem konkretnych potrzeb.
Maszyny wirtualne Compute Engine są też wykorzystywane przez kilka innych usług Google Cloud (Kubernetes Engine, Cloud Dataproc, Cloud Dataflow itp.).
2. Konfiguracja i wymagania
Samodzielne konfigurowanie środowiska
- 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ć.



- 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 go w dowolnym momencie zaktualizować.
- Identyfikator projektu musi być unikalny we wszystkich projektach Google Cloud i jest niezmienny (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 modułów z kodem musisz odwoływać się do identyfikatora projektu (zwykle oznaczanego jako
PROJECT_ID). Jeśli Ci się nie podoba, wygeneruj inny losowy identyfikator lub spróbuj użyć własnego i sprawdź, czy jest dostępny. Po utworzeniu projektu jest on „zamrażany”. - Istnieje też trzecia wartość, czyli numer projektu, którego używają niektóre interfejsy API. Więcej informacji o tych 3 wartościach znajdziesz w dokumentacji.
- 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ąć naliczenia opłat po zakończeniu tego samouczka, postępuj zgodnie z instrukcjami „czyszczenia” na końcu ćwiczenia. 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.
Google Cloud Shell
Z Google Cloud i Compute Engine można korzystać zdalnie na laptopie, ale w tym module użyjemy Google Cloud Shell, czyli środowiska wiersza poleceń działającego w chmurze.
Ta maszyna wirtualna oparta na Debianie zawiera wszystkie potrzebne narzędzia dla programistów. Zawiera również stały katalog domowy o pojemności 5 GB i działa w Google Cloud, co znacznie zwiększa wydajność sieci i usprawnia proces uwierzytelniania. Oznacza to, że do ukończenia tego ćwiczenia potrzebujesz tylko przeglądarki (działa ona na Chromebooku).
- Aby aktywować Cloud Shell w konsoli Cloud, kliknij Aktywuj Cloud Shell
(udostępnienie środowiska i połączenie się z nim powinno zająć tylko kilka chwil).


Po połączeniu z Cloud Shell zobaczysz, że uwierzytelnianie zostało już przeprowadzone, a projekt jest już ustawiony na Twój identyfikator projektu PROJECT_ID.
gcloud auth list
Wynik polecenia
Credentialed accounts: - <myaccount>@<mydomain>.com (active)
gcloud config list project
Wynik polecenia
[core] project = <PROJECT_ID>
Jeśli z jakiegoś powodu projekt nie jest ustawiony, po prostu wydaj to polecenie:
gcloud config set project <PROJECT_ID>
Szukasz urządzenia PROJECT_ID? Sprawdź, jakiego identyfikatora użyto w krokach konfiguracji, lub wyszukaj go w panelu konsoli Cloud:

Cloud Shell domyślnie ustawia też niektóre zmienne środowiskowe, które mogą być przydatne podczas wykonywania kolejnych poleceń.
echo $GOOGLE_CLOUD_PROJECT
Wynik polecenia
<PROJECT_ID>
- Na koniec ustaw domyślną strefę i konfigurację projektu.
gcloud config set compute/zone us-central1-f
Możesz wybrać różne strefy. Więcej informacji znajdziesz w artykule Regiony i strefy.
3. Tworzenie maszyny Compute Engine
Jak wspomnieliśmy wcześniej, w tym laboratorium użyjemy wiersza poleceń gcloud. Wszystkie te czynności można wykonać w konsoli (dostępnej na stronie console.cloud.google.com).
Najpierw utwórzmy instancję z ustawieniami domyślnymi :
$ gcloud compute instances create myinstance Created [...]. NAME: myinstance ZONE: us-central1-f MACHINE_TYPE: n1-standard-1 PREEMPTIBLE: INTERNAL_IP: 10.128.X.X EXTERNAL_IP: X.X.X.X STATUS: RUNNING
Zanotuj EXTERNAL_IP – będzie Ci później potrzebne.
Instancja jest tworzona z użyciem kilku wartości domyślnych :
- Wybrana strefa. Wszystkie instancje znajdują się w strefie. Strefę możesz wybrać podczas tworzenia instancji za pomocą flagi
--zonelub ustawić strefę domyślną (tak jak w przypadku konfiguracji początkowej) i pominąć flagę--zone. - Najnowszy obraz Debian GNU/Linux 9 (stretch). Jeśli używasz własnego niestandardowego obrazu, podaj tutaj jego nazwę. Na przykład:
--image my-own-image. n1-standard-1Typ maszyny. Możesz wybrać inny typ maszyny, np.n1-highmem-4lubn1-highcpu-6. Jeśli żaden z predefiniowanych typów maszyn nie spełnia Twoich potrzeb, użyj niestandardowego typu maszyny.- Główny dysk stały o takiej samej nazwie jak instancja. Ten dysk jest automatycznie podłączany do instancji.
Uruchom polecenie gcloud compute instances create --help, aby zobaczyć wszystkie dostępne opcje.
4. Włącz zaporę sieciową dla portu 80
Domyślnie Google Cloud Platform zezwala tylko na dostęp do kilku portów. Wkrótce zainstalujemy Nginx, więc najpierw włączmy port 80 w konfiguracji zapory.
$ gcloud compute firewall-rules create allow-80 --allow tcp:80 Created [...]. NAME: allow-80 NETWORK: default DIRECTION: INGRESS PRIORITY: 1000 ALLOW: tcp:80 DENY: DISABLED: False
Spowoduje to utworzenie reguły zapory sieciowej o nazwie allow-80, która ma domyślną listę bloków adresów IP, które mogą nawiązywać połączenia przychodzące (--source-ranges), ustawioną na 0.0.0.0/0 (Wszędzie).
Uruchom polecenie gcloud compute firewall-rules create --help, aby zobaczyć wszystkie wartości domyślne i wszystkie dostępne opcje, w tym możliwość zastosowania reguł zapory sieciowej na podstawie tagów.
5. Łączenie się z instancją przez SSH
Aby połączyć się z instancją przez SSH z wiersza poleceń (wciąż z Cloud Shell) :
$ gcloud compute ssh myinstance Waiting for SSH key to propagate. Warning: Permanently added 'compute.12345' (ECDSA) to the list of known hosts. ... yourusername@myinstance:~#
To wszystko. Całkiem proste. (W wersji produkcyjnej wpisz hasło).
Możesz też połączyć się z instancją przez SSH bezpośrednio z konsoli ( console.cloud.google.com). W tym celu otwórz Compute Engine > Instancje maszyn wirtualnych i kliknij SSH.

6. Instalowanie Nginx
Zaloguj się w myinstance, czyli nowo utworzonej instancji, i zainstaluj nginx:
$ sudo su - # apt update # apt install -y nginx # service nginx start # exit
Sprawdź, czy serwer działa, używając polecenia curl z myinstance:
$ curl -s localhost | grep nginx <title>Welcome to nginx!</title> <h1>Welcome to nginx!</h1> <p>If you see this page, the nginx web server is successfully installed and <a href="http://nginx.org/">nginx.org</a>.<br/> <a href="http://nginx.com/">nginx.com</a>.</p> <p><em>Thank you for using nginx.</em></p>
Aby znaleźć zewnętrzny adres IP instancji, wyświetl listę instancji w interfejsie internetowym:

Zakończ sesję SSH i uruchom to polecenie w Cloud Shell:
$ gcloud compute instances list NAME: myinstance ZONE: us-central1-f MACHINE_TYPE: n1-standard-1 PREEMPTIBLE: INTERNAL_IP: 10.128.X.X EXTERNAL_IP: X.X.X.X STATUS: RUNNING
Następnie przejdź do http://EXTERNAL_IP/, gdzie EXTERNAL_IP to publiczny adres IP instancji myinstance. Powinna się wyświetlić strona nginx:

7. Skrypt startowy
Zamiast konfigurować instancję za każdym razem, możesz użyć skryptu startowego, aby zainicjować ją podczas uruchamiania.
Utwórz plik o nazwie startup.sh z następującą treścią (możesz użyć ulubionego edytora tekstu: vim, nano lub emacs):
#! /bin/bash apt-get update apt-get install -y nginx service nginx start sed -i -- 's/nginx/Google Cloud Platform - '"$HOSTNAME"'/' /var/www/html/index.nginx-debian.html
Aby utworzyć nową instancję maszyny wirtualnej za pomocą tego skryptu startowego, wpisz :
$ gcloud compute instances create nginx \
--metadata-from-file startup-script=startup.sh
Created [...].
NAME: nginx
ZONE: us-central1-f
MACHINE_TYPE: n1-standard-1
PREEMPTIBLE:
INTERNAL_IP: 10.128.X.X
EXTERNAL_IP: X.X.X.X
STATUS: RUNNING
Otwórz http://EXTERNAL_IP/, aby zobaczyć zaktualizowaną stronę główną. Jeśli strona nie wyświetli się od razu, spróbuj ponownie po kilku sekundach. Gospodarz może nadal uruchamiać nginx.
8. Tworzenie klastra serwerów
Aby utworzyć klaster serwerów, musisz najpierw utworzyć szablon instancji. Po utworzeniu szablonu instancji możesz utworzyć grupę instancji, aby zarządzać liczbą instancji do utworzenia.
Najpierw utwórz szablon instancji, który używa skryptu startowego :
$ gcloud compute instance-templates create nginx-template \
--metadata-from-file startup-script=startup.sh
Created [...].
NAME: nginx-template
MACHINE_TYPE: n1-standard-1
PREEMPTIBLE:
CREATION_TIMESTAMP: 2022-03-18T15:10:37.621-07:00
Po drugie, utwórzmy pulę docelową. Pula docelowa stanowi pojedynczy punkt dostępu do wszystkich instancji w grupie i jest niezbędna do równoważenia obciążenia, które zostanie opisane w kolejnych krokach.
$ gcloud compute target-pools create nginx-pool Created [...]. NAME: nginx-pool REGION: us-central1 SESSION_AFFINITY: NONE BACKUP: HEALTH_CHECKS:
Na koniec utwórz grupę instancji za pomocą szablonu:
$ gcloud compute instance-groups managed create nginx-group \
--base-instance-name nginx \
--size 2 \
--template nginx-template \
--target-pool nginx-pool
Created [...].
NAME: nginx-group
LOCATION: us-central1-f
SCOPE: zone
BASE_INSTANCE_NAME: nginx
SIZE: 0
TARGET_SIZE: 2
INSTANCE_TEMPLATE: nginx-template
AUTOSCALED: no
Spowoduje to utworzenie 2 dodatkowych instancji maszyn wirtualnych, których nazwy poprzedza prefiks nginx-.
Powinny być teraz widoczne wszystkie utworzone instancje.
$ gcloud compute instances list NAME: myinstance ZONE: us-central1-f MACHINE_TYPE: n1-standard-1 PREEMPTIBLE: INTERNAL_IP: 10.128.X.X EXTERNAL_IP: X.X.X.X STATUS: RUNNING NAME: nginx ZONE: us-central1-f MACHINE_TYPE: n1-standard-1 PREEMPTIBLE: INTERNAL_IP: 10.128.X.X EXTERNAL_IP: X.X.X.X STATUS: RUNNING NAME: nginx-frpl ZONE: us-central1-f MACHINE_TYPE: n1-standard-1 PREEMPTIBLE: INTERNAL_IP: 10.128.X.X EXTERNAL_IP: X.X.X.X STATUS: RUNNING NAME: nginx-ztg4 ZONE: us-central1-f MACHINE_TYPE: n1-standard-1 PREEMPTIBLE: INTERNAL_IP: 10.128.X.X EXTERNAL_IP: X.X.X.X STATUS: RUNNING
9. Tworzenie systemu równoważenia obciążenia sieci
W Google Cloud Platform jest kilka rodzajów systemów równoważenia obciążenia, m.in.:
Utwórzmy regionalny sieciowy system równoważenia obciążenia obsługujący naszą grupę instancji:
$ gcloud compute forwarding-rules create nginx-lb \
--ports 80 \
--target-pool nginx-pool
Created [...].
$ gcloud compute forwarding-rules list
NAME: nginx-lb
REGION: us-central1
IP_ADDRESS: X.X.X.X
IP_PROTOCOL: TCP
TARGET: us-central1/targetPools/nginx-pool
Następnie możesz otworzyć system równoważenia obciążenia w przeglądarce, wpisując http://IP_ADDRESS/, gdzie IP_ADDRESS jest adresem wyświetlonym w wynikach wykonania poprzedniego polecenia.
Ze względu na czas nie utworzymy dziś systemu równoważenia obciążenia HTTP.
10. Zwalnianie miejsca w klastrze
Nie zapomnij wyłączyć klastra, w przeciwnym razie będzie on nadal działać i generować koszty. Te polecenia usuną instancje Google Compute Engine, grupę instancji, grupę kierowania i system równoważenia obciążenia.
$ gcloud compute forwarding-rules delete nginx-lb $ gcloud compute instance-groups managed delete nginx-group $ gcloud compute target-pools delete nginx-pool $ gcloud compute instance-templates delete nginx-template $ gcloud compute instances delete nginx $ gcloud compute instances delete myinstance $ gcloud compute firewall-rules delete allow-80
Każde z powyższych poleceń powinno wyświetlić prośbę o potwierdzenie usunięcia zasobu.
11. Co dalej?
Gratulacje! Udało Ci się ukończyć to ćwiczenie z Compute Engine.
Więcej funkcji Compute Engine
Google Compute Engine ma wiele funkcji. Możesz zapoznać się z tymi artykułami :
- Maszyny wirtualne z możliwością wywłaszczania – https://cloud.google.com/compute/docs/instances/create-start-preemptible-instance
- Węzły dzierżawione na wyłączność – https://cloud.google.com/compute/docs/nodes/create-nodes
- GPU i TPU – https://cloud.google.com/compute/docs/gpus/add-gpus
- Instancje Windows – https://cloud.google.com/compute/docs/instances/windows/creating-managing-windows-instances
- Etykietowanie zasobów – https://cloud.google.com/compute/docs/labeling-resources
- Przenoszenie maszyn wirtualnych do Compute Engine – https://cloud.google.com/compute/docs/vm-migration/
Google Kubernetes Engine
Google Kubernetes Engine (GKE) to hostowana i w pełni zarządzana usługa Kubernetes w Google Cloud. Dostępnych jest kilka ćwiczeń z programowania, które pomogą Ci rozpocząć pracę z GKE. Na początek polecamy ten :
- Codelab Google Kubernetes Engine – https://codelabs.developers.google.com/codelabs/cloud-gke-workshop-v2
Prześlij nam swoją opinię
- Poświęć chwilę na wypełnienie naszej krótkiej ankiety.