Google Compute Engine

1. Wprowadzenie

Cześć! Dziękuję za przybycie dzisiaj. Chcesz poznać Google Compute Engine?

W ramach tego ćwiczenia w programie poznasz Compute Engine jako przykład aplikacji Księga gości.

Utworzysz instancje Compute Engine, wdrożysz nginx, a na koniec umieścisz system równoważenia obciążenia sieci na początku. Instancję Compute Engine możesz utworzyć za pomocą konsoli graficznej lub wiersza poleceń. W tym module nauczysz się używać wiersza poleceń.

ComputeEngine_128px.png

Google Compute Engine oferuje maszyny wirtualne działające w centrach danych Google połączonych z jego ogólnoświatową siecią światłowodową. Dostępne narzędzia i przepływ pracy umożliwiają skalowanie z pojedynczej instancji do globalnej, zrównoważonego obciążenia w chmurze.

Te maszyny wirtualne szybko się uruchamiają, mają dysk stały i zapewniają niezmienną wydajność. Maszyny te są dostępne w wielu konfiguracjach, w tym wstępnie zdefiniowanych rozmiarów, a także można je tworzyć z użyciem maszyn niestandardowych zoptymalizowanych pod kątem konkretnych potrzeb.

Maszyny wirtualne Compute Engine są też technologią wykorzystywaną w kilku innych usługach Google Cloud (Kubernetes Engine, Cloud Dataproc, Cloud Dataflow itp.).

2. Konfiguracja i wymagania

Samodzielne konfigurowanie środowiska

  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 i w każdej chwili możesz go zaktualizować.
  • Identyfikator projektu musi być unikalny we wszystkich projektach Google Cloud i nie można go zmienić (nie można go zmienić po ustawieniu). Cloud Console automatycznie wygeneruje unikalny ciąg znaków. zwykle nieważne, co ona jest. W większości ćwiczeń w Codelabs musisz odwoływać się do identyfikatora projektu (który zwykle nazywa się PROJECT_ID), więc jeśli Ci się nie podoba, wygeneruj kolejny losowy projekt lub wypróbuj swój własny identyfikator i sprawdź, czy jest dostępny. Potem urządzenie jest „zawieszone”. po utworzeniu projektu.
  • Występuje trzecia wartość – numer projektu – używany przez 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 konsoli Cloud, aby móc korzystać z zasobów i interfejsów API Cloud. 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, wykonaj czynności „wyczyść” znajdziesz na końcu tego ćwiczenia. Nowi użytkownicy Google Cloud mogą skorzystać z programu bezpłatnego okresu próbnego o wartości 300 USD.

Google Cloud Shell,

Google Cloud i Compute Engine można obsługiwać zdalnie z laptopa, ale w tym ćwiczeniu w programowaniu użyjemy Google Cloud Shell – środowiska wiersza poleceń działającego w chmurze.

Ta maszyna wirtualna oparta na Debianie zawiera wszystkie potrzebne narzędzia dla programistów. Zawiera stały katalog domowy o pojemności 5 GB i działa w Google Cloud, co znacznie zwiększa wydajność sieci i uwierzytelnianie. Oznacza to, że do tego ćwiczenia z programowania wystarczy przeglądarka (tak, działa ona na Chromebooku).

  1. Aby aktywować Cloud Shell z poziomu konsoli Cloud, kliknij Aktywuj Cloud Shell b125d9eb26a46cc5.png (udostępnienie środowiska i połączenie z nim powinno zająć tylko chwilę).

1067942a9a93f70.png

Zrzut ekranu 2017-06-14 o 10.13.43 PM.png

Po nawiązaniu połączenia z Cloud Shell powinno pojawić się potwierdzenie, że użytkownik jest już uwierzytelniony, a projekt jest już ustawiony na PROJECT_ID.

gcloud auth list

Dane wyjściowe polecenia

Credentialed accounts:
 - <myaccount>@<mydomain>.com (active)
gcloud config list project

Dane wyjściowe polecenia

[core]
project = <PROJECT_ID>

Jeśli z jakiegoś powodu projekt nie jest skonfigurowany, uruchom po prostu to polecenie:

gcloud config set project <PROJECT_ID>

Szukasz urządzenia PROJECT_ID? Sprawdź identyfikator użyty w krokach konfiguracji lub wyszukaj go w panelu Cloud Console:

cc3895eeac80db2c.png

Cloud Shell ustawia też domyślnie niektóre zmienne środowiskowe, które mogą być przydatne podczas uruchamiania kolejnych poleceń.

echo $GOOGLE_CLOUD_PROJECT

Dane wyjściowe polecenia

<PROJECT_ID>
  1. 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 już wspominaliśmy, w tym ćwiczeniu z programowania użyjemy wiersza poleceń gcloud. Wszystkie te czynności można wykonać za pomocą konsoli (dostępnej na stronie console.cloud.google.com).

Najpierw utwórz 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 – to będzie ważne na później.

Instancja jest tworzona z użyciem kilku wartości domyślnych :

  • Wybrana strefa. Wszystkie instancje znajdują się w strefie. W momencie tworzenia instancji możesz wybrać strefę za pomocą flagi --zone lub ustawić strefę domyślną (tak jak w początkowej konfiguracji) z pominięciem flagi --zone.
  • Najnowszy obraz systemu Debian GNU/Linux 9 (stretch). Jeśli używasz własnego niestandardowego obrazu, podaj jego nazwę tutaj. Na przykład: --image my-own-image.
  • Typ maszyny n1-standard-1. Możesz wybrać inny typ maszyny, na przykład n1-highmem-4 lub n1-highcpu-6. Jeśli żaden ze wstępnie zdefiniowanych typów maszyn nie odpowiada Twoim potrzebom, wybierz maszynę niestandardową.
  • Główny dysk stały o takiej samej nazwie jak instancja. Ten dysk jest automatycznie podłączany do instancji.

Uruchom 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 na dostęp tylko do kilku portów. Ponieważ wkrótce zainstalujemy Nginx, najpierw włączmy port 80 w konfiguracji zapory sieciowej.

$ 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 z domyślną listą bloków adresów IP, które mogą nawiązywać połączenia przychodzące (--source-ranges) z ustawieniem 0.0.0.0/0 (wszędzie).

Uruchom gcloud compute firewall-rules create --help, aby zobaczyć wszystkie wartości domyślne i wszystkie dostępne opcje, w tym możliwość stosowania reguł zapory sieciowej na podstawie tagów.

5. Łączenie się z instancją przez SSH

Aby połączyć się przez SSH z instancją z poziomu wiersza poleceń (nadal 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. To całkiem proste. (w wersji produkcyjnej pamiętaj o wpisaniu hasła :)

Możesz też połączyć się z instancją przez SSH bezpośrednio w konsoli ( console.cloud.google.com) w sekcji Compute Engine > Instancje maszyn wirtualnych i kliknę SSH.

bfbc03997a41946e.png

6. Zainstaluj Nginx

Zaloguj się do nowo utworzonej instancji myinstance i zainstaluj nginx.

$ sudo su - 
# apt update
# apt install -y nginx
# service nginx start
# exit

Sprawdź, czy serwer działa za pomocą 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>

Znajdź zewnętrzny adres IP swojej instancji, wyświetl listę instancji w interfejsie internetowym:

dcc4e56e82ba2603.png

Upewnij się, że wyjdziesz z 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 adresu http://EXTERNAL_IP/, gdzie EXTERNAL_IP jest publicznym adresem IP instancji myinstance. Powinna Ci się wyświetlić strona nginx:

49b52b9354041f3b.png

7. Skrypt startowy

Zamiast konfigurować instancję za każdym razem, możesz użyć skryptu startowego do zainicjowania instancji.

Utwórz plik o nazwie startup.sh z następującą zawartością (możesz użyć swojego 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 przy użyciu 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

Gdy otworzysz http://EXTERNAL_IP/, zobaczysz zaktualizowaną stronę główną. Jeśli strona nie wyświetli się, spróbuj ponownie po kilku sekundach, być może host wciąż uruchamia nginx.

8. Utwórz klaster 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, które zostaną utworzone.

Najpierw utwórz szablon instancji przy użyciu 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 umożliwia nam korzystanie z jednego punktu dostępu do wszystkich instancji w grupie i jest niezbędna do równoważenia obciążenia 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, korzystając z 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 o nazwach zaczynających się od nginx-.

Wszystkie utworzone instancje powinny być już widoczne.

$ 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

Istnieje kilka typów systemów równoważenia obciążenia w Google Cloud Platform, w tym :

Utwórzmy regionalny system równoważenia obciążenia sieci kierowany na 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 z poziomu przeglądarki http://IP_ADDRESS/, gdzie IP_ADDRESS jest adresem wyświetlanym w wyniku uruchomienia poprzedniego polecenia.

Ze względu na ten czas nie utworzymy dzisiaj systemu równoważenia obciążenia HTTP.

10. Czyszczenie klastra

Nie zapomnij wyłączyć klastra. W przeciwnym razie będzie on nadal działać i generować koszty. Wykonanie poniższych poleceń spowoduje usunięcie instancji Google Compute Engine, grupy instancji, grupy kierowania i systemu 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 wymagać potwierdzenia usunięcia zasobu.

11. Co dalej?

Gratulujemy ukończenia tego ćwiczenia z programowania w Compute Engine.

Więcej funkcji Compute Engine

Google Compute Engine ma bogaty zestaw funkcji. Być może zainteresują Cię niektóre z tych materiałów :

Google Kubernetes Engine,

Google Kubernetes Engine (GKE) to hostowana i w pełni zarządzana oferta Kubernetes w Google Cloud. Dostępnych jest kilka ćwiczeń z programowania, które pomogą Ci rozpocząć pracę z GKE. Oto dobry na początek :

Prześlij nam swoją opinię

  • Poświęć chwilę na wypełnienie naszej bardzo krótkiej ankiety