1. Zanim zaczniesz
Uruchamianie witryn może być trudne ze względu na nakłady pracy związane z tworzeniem instancji maszyn wirtualnych, klastrami, podami, usługami i innymi usługami oraz zarządzaniu nimi. Takie rozwiązanie sprawdza się w przypadku większych, wielopoziomowych aplikacji, ale jeśli zależy Ci tylko na wdrożeniu i uwidocznieniu strony internetowej, jest to duży nakład pracy.
Dzięki Cloud Run, implementacji usługi Knative w Google Cloud, można wdrożyć witrynę i zarządzać nią bez dodatkowych kosztów wymaganych w przypadku wdrożeń opartych na maszynach wirtualnych lub Kubernetes. Takie podejście jest prostsze nie tylko z perspektywy zarządzania, lecz także umożliwia skalowanie do zera w przypadku braku żądań przychodzących do witryny.
Cloud Run umożliwia nie tylko programowanie bezserwerowe kontenerów, ale także uruchamianie go we własnych klastrach Google Kubernetes Engine (GKE) lub na w pełni zarządzanej platformie jako usłudze (PaaS) udostępnianej przez Cloud Run. W ramach tego ćwiczenia z programowania przetestujesz ten drugi scenariusz.
Poniższy diagram przedstawia przepływ wdrożenia i hostowania w Cloud Run. Zaczniesz od utworzenia obrazu Dockera w Cloud Build, który aktywujesz w Cloud Shell. Następnie wdróż ten obraz w Cloud Run za pomocą polecenia w Cloud Shell.
Wymagania wstępne
- Ogólna znajomość Dockera (zapoznaj się z sekcją Pierwsze kroki w witrynie Dockera).
Czego się nauczysz
- Jak utworzyć obraz Dockera w Cloud Build i przesłać go do gcr.io
- Jak wdrożyć obrazy Dockera w Cloud Run
- Jak zarządzać wdrożeniami w Cloud Run
- Jak skonfigurować punkt końcowy dla aplikacji w Cloud Run
Co utworzysz
- Witryna statyczna działająca w kontenerze Dockera
- wersję tego kontenera znajdującą się w Container Registry.
- Wdrożenie w Cloud Run witryny statycznej
Czego potrzebujesz
- Konto Google z dostępem administracyjnym do tworzenia projektów lub projekt z rolą właściciela projektu
2. Konfiguracja środowiska
Samodzielne konfigurowanie środowiska
Jeśli nie masz jeszcze konta Google, musisz je utworzyć. Następnie zaloguj się w konsoli Google Cloud i kliknij Projekt > Utwórz projekt.
Zapamiętaj identyfikator projektu, który jest automatycznie wypełniany pod nazwą projektu. Identyfikator projektu jest niepowtarzalną nazwą we wszystkich projektach Google Cloud, dlatego nazwa na zrzucie ekranu została już zajęta i nie będzie Ci odpowiadać. Zacznie się on później nazywać PROJECT_ID
.
Następnie musisz włączyć płatności w Cloud Console, aby korzystać z zasobów Google Cloud i włączyć interfejs Cloud Run API.
Włączanie Cloud Run API
Kliknij Menu nawigacyjne OK > Interfejsy API Usługi > Panel > Włącz interfejsy API i usługi. .
Wyszukaj „Cloud Run API”. i kliknij Cloud Run API > Włącz.
Wykonanie tych ćwiczeń w programie nie powinno kosztować więcej niż kilka dolarów, ale może być wyższe, jeśli zdecydujesz się użyć więcej zasobów lub w ogóle je pozostawić (patrz Czyszczenie na końcu). Więcej informacji znajdziesz w cenniku.
Nowi użytkownicy Google Cloud mogą skorzystać z bezpłatnego okresu próbnego o wartości 300 USD.
Cloud Shell
Usługami Google Cloud i Cloud Run można zarządzać zdalnie z laptopa, ale potrzebny jest Cloud Shell – środowisko wiersza poleceń działające w Google Cloud. Środowisko jest wstępnie skonfigurowane i zawiera wszystkie potrzebne biblioteki klienta i platformy.
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. Klonowanie repozytorium źródłowego
Ponieważ wdrażasz istniejącą witrynę, wystarczy sklonować źródło z repozytorium. Dzięki temu możesz skupić się na tworzeniu obrazów Dockera i ich wdrażaniu w Cloud Run.
Uruchom następujące polecenia, aby sklonować repozytorium do instancji Cloud Shell i przejść do odpowiedniego katalogu. Zainstalujesz również zależności Node.js, tak aby można było przetestować aplikację przed wdrożeniem.
cd ~ git clone https://github.com/googlecodelabs/monolith-to-microservices.git cd ~/monolith-to-microservices ./setup.sh
Spowoduje to skopiowanie repozytorium, wprowadzenie zmian w katalogu i zainstalowanie zależności niezbędnych do lokalnego uruchomienia aplikacji. Działanie skryptu może potrwać kilka minut.
Zachowaj należytą staranność i przetestuj swoją aplikację. Uruchom to polecenie, aby uruchomić serwer WWW:
cd ~/monolith-to-microservices/monolith npm start
Dane wyjściowe:
Monolith listening on port 8080!
Aby wyświetlić podgląd aplikacji, kliknij Podgląd w przeglądarce i wybierz Podejrzyj na porcie 8080.
Otworzy się nowe okno, w którym zobaczysz, jak będzie wyglądać strona internetowa sklepu Fancy Store.
Możesz zamknąć to okno po przejrzeniu witryny. Aby zatrzymać proces serwera WWW, naciśnij CONTROL+C
(Command+C
na Macu) w oknie terminala.
4. Tworzenie kontenera Dockera za pomocą Cloud Build
Po przygotowaniu plików źródłowych nadszedł czas na umieszczenie aplikacji w kontenerze Dockera.
Ten proces składa się zwykle z 2 etapów obejmujących utworzenie kontenera Dockera i przeniesienie go do rejestru w celu zapisania obrazu pobieranego potem przez GKE. Możesz jednak ułatwić sobie życie, korzystając z Cloud Build. W ten sposób możesz za pomocą jednego polecenia utworzyć kontener Dockera i umieścić obraz w Container Registry. Aby zapoznać się z ręcznym procesem tworzenia pliku Dockerfile i jego przenoszenia, zapoznaj się z krótkim wprowadzeniem do Container Registry.
Cloud Build kompresuje pliki znajdujące się w katalogu i przenosi je do zasobnika Cloud Storage. Następnie proces kompilacji pobiera wszystkie pliki z zasobnika i wykorzystuje plik Dockerfile, który znajduje się w tym samym katalogu do uruchomienia procesu kompilacji Dockera. Ponieważ dla obrazu Dockera została określona flaga --tag
z hostem gcr.io, wynikowy obraz Dockera zostanie przeniesiony do Container Registry.
Najpierw sprawdź, czy masz włączony interfejs Cloud Build API. Uruchom następujące polecenie, aby włączyć ten interfejs:
gcloud services enable cloudbuild.googleapis.com
Po włączeniu interfejsu API uruchom w Cloud Shell to polecenie, aby rozpocząć proces kompilacji:
gcloud builds submit --tag gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:1.0.0 .
Ten proces może potrwać kilka minut, a po jego zakończeniu w terminalu pojawią się dane wyjściowe podobne do tych poniżej:
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ID CREATE_TIME DURATION SOURCE IMAGES STATUS 1ae295d9-63cb-482c-959b-bc52e9644d53 2019-08-29T01:56:35+00:00 33S gs://<PROJECT_ID>_cloudbuild/source/1567043793.94-abfd382011724422bf49af1558b894aa.tgz gcr.io/<PROJECT_ID>/monolith:1.0.0 SUCCESS
Aby wyświetlić historię kompilacji lub obejrzeć ten proces w czasie rzeczywistym, możesz otworzyć konsolę Cloud i kliknąć Menu nawigacyjne OK > Cloud Build > Historia. Zobaczysz listę wszystkich utworzonych do tej pory kompilacji, ale powinna się tam znajdować tylko ta utworzona przez Ciebie.
Po kliknięciu Identyfikatora kompilacji zostaną wyświetlone wszystkie szczegóły kompilacji, w tym dane wyjściowe dzienników. Aby wyświetlić utworzony obraz kontenera, kliknij link obok opcji Obraz.
5. Wdrażanie kontenera w Cloud Run
Po umieszczeniu witryny w kontenerze i przeniesieniu jej do Container Registry nadszedł czas na wdrożenie w Cloud Run.
Są 2 sposoby wdrażania w Cloud Run:
- Cloud Run (w pełni zarządzany) to model PaaS, w którym zarządzany jest cały cykl życia kontenera. Wykorzystasz tę metodę w tym ćwiczeniu z programowania.
- Cloud Run for Anthos to usługa Cloud Run z dodatkową warstwą kontroli, która umożliwia przenoszenie klastrów i podów z GKE. Więcej informacji znajdziesz w artykule Konfigurowanie Cloud Run for Anthos w Google Cloud.
Przykłady wiersza poleceń zostaną umieszczone w Cloud Shell przy użyciu zmiennych środowiskowych skonfigurowanych wcześniej.
Wiersz poleceń
Uruchom to polecenie, aby wdrożyć aplikację:
gcloud run deploy --image=gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:1.0.0 --platform managed
Pojawi się prośba o określenie regionu, w którym chcesz uruchomić kampanię. Wybierz najbliższy region, a następnie zaakceptuj domyślną sugerowaną nazwę usługi (monolith).
Do celów testowych musisz zezwolić na nieuwierzytelnione żądania wysyłane do aplikacji. Wpisz y
w wierszu.
Sprawdzanie wdrożenia
Aby sprawdzić, czy wdrożenie zostało utworzone, uruchom następujące polecenie. Zanim Pod status
zmieni wartość na Running
, może minąć kilka chwil:
gcloud run services list
Wybierz [1] Cloud Run (usługa w pełni zarządzana).
Dane wyjściowe:
SERVICE REGION URL LAST DEPLOYED BY LAST DEPLOYED AT ✔ monolith us-east1 <your url> <your email> 2019-09-16T21:07:38.267Z
Dane wyjściowe zawierają kilka informacji. Widać wdrożenie, a także nazwę użytkownika, który je wdrożył (Twój adres e-mail) oraz adres URL, za pomocą którego możesz uzyskać dostęp do aplikacji. Wygląda na to, że udało się utworzyć wszystkie elementy.
Otwórz w przeglądarce adres URL podany na liście usług. Powinna być widoczna ta sama witryna, której podgląd był wyświetlany lokalnie.
6. Tworzenie nowej wersji z niższą wartością równoczesności
Teraz wdróż aplikację ponownie, ale tym razem dostosuj jeden z parametrów.
Domyślnie aplikacja w Cloud Run będzie miała równoczesność o wartości 80, co oznacza, że poszczególne instancje kontenerów będą równocześnie obsługiwać maksymalnie 80 żądań. To duże odchylenie od modelu funkcji jako usługi (FaaS), w którym jedna instancja równocześnie obsługuje jedno żądanie.
Wdróż ponownie ten sam obraz kontenera z wartością równoczesności równą 1 (tylko do celów testowych) i zobacz, co się stanie.
gcloud run deploy --image=gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:1.0.0 --platform managed --concurrency 1
Odpowiedz na kolejne pytania tak samo jak za pierwszym razem. Po wykonaniu polecenia sprawdź wynik w Cloud Console.
W panelu Cloud Run kliknij usługę monolith, aby wyświetlić szczegóły.
Kliknij kartę Wersje. Powinno być widoczne 2 wersje. Kliknij monolith-00002 i sprawdź szczegóły. Wartość równoczesności powinna być zmniejszona do 1.
]
Mimo że taka konfiguracja jest wystarczająca na potrzeby testowania, w większości scenariuszy produkcyjnych kontenery będą obsługiwały wiele żądań równoczesnych.
Teraz przywróć pierwotną równoczesność bez ponownego wdrażania aplikacji. Możesz ustawić wartość równoczesności na domyślną 80 lub 0, co spowoduje usunięcie wszystkich ograniczeń równoczesności i ustawienie jej na domyślną maksymalną wartość (która w momencie tego zapisu wynosi 80).
Uruchom w Cloud Shell to polecenie, aby zaktualizować bieżącą wersję:
gcloud run deploy --image=gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:1.0.0 --platform managed --concurrency 80
Zwróć uwagę, że została utworzona inna wersja, ruch został przekierowany, a równoczesność ma z powrotem wartość 80.
7. Wprowadzanie zmian w witrynie
Twój zespół marketingowy poprosił Cię o zmianę strony głównej witryny Twojej firmy. Ich zdaniem powinna zawierać więcej informacji o tym, co firma sprzedaje i co sprzedaje. W tej sekcji dodasz coś do strony głównej, aby zadowolić dział marketingu.
Wygląda na to, że jeden z Twoich programistów przygotował już odpowiednie zmiany i umieścił je w pliku o nazwie index.js.new
. Wystarczy skopiować ten plik do usługi index.js
i zmiany zostaną automatycznie zastosowane. Postępuj zgodnie z instrukcjami, by wprowadzić odpowiednie zmiany.
Uruchom następujące polecenia, skopiuj zaktualizowany plik z poprawną nazwą, a potem wydrukuj jego zawartość, aby sprawdzić wprowadzone zmiany:
cd ~/monolith-to-microservices/react-app/src/pages/Home mv index.js.new index.js cat ~/monolith-to-microservices/react-app/src/pages/Home/index.js
Wynikowy kod powinien wyglądać podobnie do tego:
/* Copyright 2019 Google LLC Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at https://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ import React from "react"; import { makeStyles } from "@material-ui/core/styles"; import Paper from "@material-ui/core/Paper"; import Typography from "@material-ui/core/Typography"; const useStyles = makeStyles(theme => ({ root: { flexGrow: 1 }, paper: { width: "800px", margin: "0 auto", padding: theme.spacing(3, 2) } })); export default function Home() { const classes = useStyles(); return ( <div className={classes.root}> <Paper className={classes.paper}> <Typography variant="h5"> Fancy Fashion & Style Online </Typography> <br /> <Typography variant="body1"> Tired of mainstream fashion ideas, popular trends and societal norms? This line of lifestyle products will help you catch up with the Fancy trend and express your personal style. Start shopping Fancy items now! </Typography> </Paper> </div> ); }
Zaktualizowane zostały komponenty React, ale musisz jeszcze utworzyć aplikację React, by wygenerować pliki statyczne. Uruchom to polecenie, by utworzyć aplikację React i skopiować ją do katalogu publicznego usługi monolith:
cd ~/monolith-to-microservices/react-app npm run build:monolith
Po zaktualizowaniu kodu musisz ponownie utworzyć kontener Dockera i opublikować go w Container Registry. Możesz użyć tego samego polecenia co wcześniej, ale tym razem zaktualizujesz etykietę wersji.
Uruchom to polecenie, aby aktywować nową kompilację Cloud Build ze zaktualizowaną wersją obrazu 2.0.0:
cd ~/monolith-to-microservices/monolith #Feel free to test your application npm start gcloud builds submit --tag gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:2.0.0 .
W następnej sekcji za pomocą tego obrazu zaktualizujesz aplikację z zerowym czasem przestoju.
8. Aktualizowanie witryny z zerowym czasem przestoju
Zmiany zostały wprowadzone i dział marketingu jest zadowolony z aktualizacji. Nadszedł czas, aby zaktualizować stronę bez przerw dla użytkowników.
Cloud Run traktuje każde wdrożenie jako nową wersję, która zostanie przełączona w tryb online, a następnie zostanie do niego przekierowany ruch.
Wykonaj kolejne zestawy instrukcji, aby zaktualizować witrynę.
Wiersz poleceń
Korzystając z wiersza poleceń, możesz ponownie wdrożyć usługę, aby zaktualizować obraz do nowej wersji, korzystając z tego polecenia:
gcloud run deploy --image=gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:2.0.0 --platform managed
Sprawdzanie wdrożenia
Sprawdź aktualizację wdrożenia, uruchamiając następujące polecenie:
gcloud run services describe monolith --platform managed
Dane wyjściowe wyglądają tak:
apiVersion: serving.knative.dev/v1alpha1 kind: Service metadata: annotations: client.knative.dev/user-image: gcr.io/my-cloudrun-codelab/monolith:2.0.0 ...
Zobaczysz, że usługa korzysta teraz z najnowszej wersji obrazu wdrożonego w nowej wersji.
Aby sprawdzić zmiany, ponownie przejdź do zewnętrznego adresu URL usługi w Cloud Run i zwróć uwagę, że tytuł aplikacji został zaktualizowany.
Uruchom to polecenie, aby wyświetlić listę usług i zapomniany adres IP:
gcloud run services list
W Twojej witrynie powinien być teraz widoczny tekst dodany do komponentu strony głównej.
9. Czyszczenie danych
Usuwanie obrazów Container Registry
# Delete the container image for version 1.0.0 of our monolith gcloud container images delete gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:1.0.0 --quiet # Delete the container image for version 2.0.0 of our monolith gcloud container images delete gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:2.0.0 --quiet
Usuwanie artefaktów Cloud Build z Cloud Storage
# The following command will take all source archives from all builds and delete them from cloud storage # Run this command to print all sources: # gcloud builds list | awk 'NR > 1 {print $4}' gcloud builds list | awk 'NR > 1 {print $4}' | while read line; do gsutil rm $line; done
Usunięcie usługi Cloud Run
gcloud run services delete monolith --platform managed
10. Gratulacje
Udało Ci się wdrożyć, przeskalować i zaktualizować witrynę za pomocą Cloud Run.