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ń.
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
- 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ć.
- 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.
- 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).
- Aby aktywować Cloud Shell z poziomu konsoli Cloud, kliknij Aktywuj Cloud Shell (udostępnienie środowiska i połączenie z nim powinno zająć tylko chwilę).
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:
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>
- 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ładn1-highmem-4
lubn1-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.
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:
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:
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 :
- 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
- Procesory graficzne Jednostki TPU – https://cloud.google.com/compute/docs/gpus/add-gpus
- Instancje systemu Windows – https://cloud.google.com/compute/docs/instances/windows/creating-managing-windows-instances
- Zasoby oznaczania etykietami: https://cloud.google.com/compute/docs/labeling-resources
- Migrowanie 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 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 :
- Ćwiczenie z programowania w 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 bardzo krótkiej ankiety