1. Omówienie
Przepisanie lub przeprojektowanie istniejących aplikacji pod kątem działania na platformie Kubernetes nie zawsze jest możliwe lub wykonalne ręcznie. Usługa Migrate for Anthos może pomóc w modernizacji istniejących aplikacji i uruchamianiu ich w Kubernetes. W ramach tego ćwiczenia w Codelabs dowiesz się, jak za pomocą narzędzia Migrate for Anthos przenieść istniejącą aplikację internetową hostowaną w Compute Engine do Kubernetes Engine.
Czego się nauczysz
- Jak wdrożyć Migrate for Anthos w klastrze Kubernetes
- Jak utworzyć kontener w zbiorze stanowym na podstawie istniejącej instancji Compute Engine
- Jak wdrożyć kontener w Kubernetes i skonfigurować go za pomocą systemu równoważenia obciążenia
Czego potrzebujesz
- Projekt Google Cloud ze skonfigurowanymi płatnościami. Jeśli nie masz konta Google, musisz je utworzyć.
2. Przygotowanie
To ćwiczenia w Codelabs można wykonać w całości w Google Cloud Platform bez konieczności lokalnej instalacji ani konfiguracji.
Włączanie interfejsów API
Zanim zaczniesz, włącz wymagane interfejsy API w swoim projekcie Google Cloud:
Tworzenie serwera WWW instancji Compute
Utwórzmy instancję obliczeniową, która będzie hostować nasz początkowy serwer WWW nginx, wraz z regułami zapory sieciowej, które pozwolą nam wyświetlić domyślną stronę docelową serwera WWW. Można to zrobić na kilka sposobów, ale dla wygody użytkowników użyjemy Cloud Shell.
W Cloud Shell uruchom to polecenie:
gcloud compute instances create webserver --zone=us-central1-a && \ gcloud compute firewall-rules create default-allow-http --allow=tcp:80
Pierwsza połowa tego polecenia utworzy instancję Google Cloud w strefie us-central1-a, a druga połowa utworzy regułę zapory sieciowej o nazwie „default-allow-http” który umożliwi ruch HTTP do naszej sieci.
Po utworzeniu instancji wyświetli się tabela ze szczegółami instancji. Zanotuj Zewnętrzny adres IP – będzie nam on potrzebny do późniejszego sprawdzenia, czy nasz serwer WWW działa.
Gdy instancja będzie gotowa, możemy połączyć się z nią przez SSH z Cloud Shell, aby zainstalować nginx i uruchomić serwer WWW:
gcloud compute ssh --zone us-central1-a webserver
Po zalogowaniu się do naszej instancji obliczeniowej zainstaluj nginx:
sudo apt install nginx
Wyloguj się z sesji ssh za pomocą polecenia logout
Sprawdźmy, czy nasz serwer WWW działa, wpisując w przeglądarce wcześniej przesłany zewnętrzny adres IP instancji. Powinien wyświetlić się domyślny ekran powitalny nginx:
Ten serwer WWW będzie służył jako starsza aplikacja internetowa, którą przeniesiemy do Kubernetes za pomocą usługi Migrate for Anthos.
3. Klaster Kubernetes z usługą Migrate for Anthos
Następnie utworzymy klaster GKE, w którym ostatecznie przeniesiemy serwer WWW Compute Engine. W konsoli Cloud uruchom to polecenie:
gcloud container clusters create my-gke-cluster \ --zone us-central1-a \ --cluster-version 1.13 \ --machine-type n1-standard-4 \ --image-type "UBUNTU" \ --num-nodes 1 \ --enable-stackdriver-kubernetes
Zaczekaj kilka minut na wykonanie tego polecenia. Po utworzeniu klastra otrzymasz dane wyjściowe z jego szczegółami:
Następnie przejdź do GCP Marketplace, aby wdrożyć narzędzie Migrate for Anthos:
Na stronie platformy handlowej usługi Migrate for Anthos kliknij „Skonfiguruj” i, jeśli pojawi się taka prośba, wybierz projekt z listy. Na stronie dalszych czynności pojawi się formularz z wprowadzonymi wartościami domyślnymi. Sprawdź, czy wybrany klaster jest właśnie utworzony, i kliknij Wdróż:
Usługa Migrate for Anthos powinna być teraz wdrożona w klastrze Kubernetes. Po zakończeniu wdrażania zobaczysz stan „OK”. na stronie Aplikacje Kubernetes Engine:
4. Z instancji obliczeniowej do zbioru stanowego
Mamy klaster Kubernetes z uruchomionym narzędziem Migrate for Anthos, więc możemy rozpocząć proces migracji. Aby wdrożyć instancję obliczeniową w klastrze Kubenetes, wyłączymy instancję Compute Engine, co pozwoli nam robić zrzuty dysków. Zanim przejdziesz dalej, zapisz identyfikator instancji, który będzie nam później potrzebny:
gcloud compute instances describe webserver --zone us-central1-a | grep ^id
Wyłączmy instancję obliczeniową:
gcloud compute instances stop webserver --zone us-central1-a
Teraz, gdy instancja została zatrzymana, możemy bezpiecznie wykonać zrzut dysków, uruchamiając następujący skrypt. Pamiętaj, aby podać identyfikator projektu i identyfikator instancji:
python3 /google/migrate/anthos/gce-to-gke/clone_vm_disks.py \ -p <project-id> -i <instance-id> \ -z us-central1-a \ -T us-central1-a \ -A webserver-statefulset \ -o containerized-webserver.yaml
W przypadku tych flag clone_vm_disks.py
:
- Sprawdzanie, czy instancja GCE jest wyłączona
- Utwórz zrzut z każdego dysku instancji
- Utwórz nowy dysk z każdego zrzutu
- Usuń utworzone zrzuty
- Wygeneruj plik YAML w bieżącym katalogu roboczym, aby wdrożyć zestaw stanowy będący hostem Twojego serwera WWW
Wygenerowany plik yaml udostępni zestaw stanowy w naszym klastrze Kubernetes wraz z deklaracjami stałego woluminu wymaganymi do podłączania skopiowanych dysków do kontenera serwera WWW. Możemy wprowadzić te zmiany w usłudze kubectl
:
kubectl apply -f containerized-webserver.yaml
Sprawdź stan zasobu webserver-statefulset na stronie Zadania:
Stan „Pody oczekujące” jest normalny przez kilka minut po uruchomieniu funkcji kubectl apply
. Przejdź dalej, gdy stan zmieni się na „OK”.
5. Udostępnij klaster do systemu równoważenia obciążenia
W tym momencie klaster Kubenetes powinien uruchamiać nasz serwer WWW w postaci zestawu stanowego, ale musimy też udostępnić kontener systemowi równoważenia obciążenia, aby mógł uzyskać dostęp do serwera WWW przez zewnętrzny adres IP. W Cloud Shell utwórz nowy plik o nazwie loadbalancer.yaml
z tą zawartością:
loadbalancer.yaml
apiVersion: v1
kind: Service
metadata:
name: webserver-loadbalancer
spec:
type: LoadBalancer
selector:
app: webserver-statefulset
ports:
- protocol: TCP
port: 80
targetPort: 80
A teraz zastosuj go za pomocą funkcji kubectl
:
kubectl apply -f loadbalancer.yaml
Za pomocą kubectl możemy pobrać zewnętrzny adres IP usługi kontenera serwera WWW:
kubectl get services
Jeśli wpiszesz w przeglądarce zewnętrzny adres IP, powinien wyświetlić się ten sam domyślny ekran powitalny nginx z wcześniejszego etapu:
Udało nam się! Nasz serwer WWW GCE jest teraz hostowany w Kubernetes. Super!
6. Stackdriver Monitoring
Dane
Kubernetes Engine to zarządzana usługa Kubernetes, która jest automatycznie instruowana pod kątem logowania i monitorowania w usłudze Stackdriver. Przyjrzyjmy się niektórym danym automatycznie przechwytywanym przez usługę Stackdriver.
Kliknij link Monitorowanie w menu usług. Uzyskanie dostępu do tej funkcji po raz pierwszy z poziomu projektu może potrwać kilka minut, ponieważ konfiguracja obszaru roboczego może potrwać kilka minut.
Po załadowaniu najedź na kartę Resources w lewym panelu i wybierz „Kubernetes Engine NOWY”. w menu.
Każdy wiersz w panelu reprezentuje zasób Kubernetes. Za pomocą linków nad panelem możesz przełączać się między widokiem infrastruktury, zadań i usług.
W widoku Zbiory zadań rozwiń „my-gke-cluster”. i przejść do domyślnego > webserver-statefulset > webserver-statefulset-0 > webserver-statefulset. Kliknij kontener zestawu stanowego serwera WWW. Tutaj znajdziesz niektóre gotowe wskaźniki przechwytywane przez Stackdriver, w tym wykorzystanie pamięci i procesora.
Wykresy wyświetlane w tym panelu to wykresy, których będziemy mogli użyć do utworzenia panelu niestandardowego.
Niestandardowe panele informacyjne
Stackdriver umożliwia nam tworzenie niestandardowych paneli, których używamy do porządkowania wykresów i wykresów dotyczących dowolnych dostępnych dla nas danych. Stwórzmy panel niestandardowy, który zapewni szybki wgląd w niektóre dane naszego serwera WWW.
W panelu bocznym po lewej stronie najedź na „Panele”, a następnie kliknij Utwórz panel.
Teraz gdy mamy już pusty panel, możemy dodać wskaźniki, na których chcemy mieć oko. Nadaj naszemu panelowi bez nazwy przydatną nazwę, np. „Moje kontenery serwera WWW”. i kliknij „Dodaj wykres”. w prawym górnym rogu:
Pamiętasz gotowe dane? Dodajmy wykres wykorzystania procesora kontenera. W polu Tytuł wykresu wpisz „Wykorzystanie procesora”. W polu „Znajdź typ zasobu i wskaźnik” wpisz request_utilization i z przefiltrowanej listy wybierz wykorzystanie żądania procesora. Ten wybór wypełni pola Typ zasobu i Wskaźnik.
Następnie zastosujmy filtrowanie według naszego projektu_id (jeśli mamy wiele projektów) i container_name. W polu Filtr wpisz project_id, wybierz go z przefiltrowanej listy i w polu Wartość wybierz swój projekt. Musimy także filtrować dane według elementu container_name. W polu Filtr wpisz container_name, wybierz go z przefiltrowanej listy i w polu Wartość wybierz webserver-statefulset. Kliknij Zapisz.
Mamy teraz panel z pierwszym wykresem.
7. Kontrola dostępności i zasady tworzenia alertów
W usłudze Stackdriver można skonfigurować alerty, aby powiadamiały nas, gdy jakiekolwiek wskaźniki osiągną określone przez nas wartości progowe. Możemy na przykład poprosić usługę Stackdriver o wysłanie e-maila, gdy wykorzystanie procesora w ostatnim kroku przez dłuższy czas przekroczy określony próg, co może oznaczać problem z naszą aplikacją. Aby zademonstrować, jak wyglądają takie alerty, skonfigurujmy kontrolę dostępności, a potem symulujemy przerwy w działaniu usługi.
W panelu po lewej stronie wybierz Kontrole dostępności, a następnie Przegląd kontroli dostępności:
Jak sugerujemy na stronie Kontrole dostępności, skonfigurujmy naszą pierwszą kontrolę dostępności. Kliknij przycisk Dodaj kontrolę dostępności w prawym górnym rogu strony.
W formularzu kontynuowania wpisz „Endpoint Uptime” (Czas działania punktu końcowego). a jako nazwę hosta podaj zewnętrzny adres IP systemu równoważenia obciążenia.
Kliknij Zapisz. Pojawi się prośba o utworzenie zasad tworzenia alertów:
Kliknij Utwórz zasadę tworzenia alertów.
Nazwijmy tę zasadę czasu działania punktów końcowych. W sekcji Konfiguracja ustaw opcję „Warunek aktywuje, jeśli”. do ustawienia „Dowolny ciąg czasowy narusza” i kliknij Zapisz.
To jeszcze nie koniec. Następnie określimy Kanał powiadomień, aby otrzymywać powiadomienia o naruszeniu naszych zasad tworzenia alertów. Z menu rozwijanego Typ kanału powiadomień wybierz opcję E-mail oraz prawidłowy adres e-mail.
Kliknij Dodaj kanał powiadomień. Na dole formularza wpisz nazwę zasady „Dostępność aplikacji internetowej”. i kliknij Zapisz.
Aby sprawdzić, jak będzie wyglądał alert, otwórz Cloud Shell jeszcze raz w konsoli Google Cloud. To polecenie zatrzyma usługę nginx w podzie serwera WWW:
kubectl exec -t webserver-statefulset-0 -- /bin/bash -c "nginx -s stop"
Po kilku minutach otrzymasz e-maila z powiadomieniem o przerwie w działaniu usługi:
Cofnijmy to. W Cloud Shell uruchomimy ponownie nginx:
kubectl exec -t webserver-statefulset-0 -- /bin/bash -c "nginx"
Po kilku minutach otrzymasz kolejnego e-maila dotyczącego usługi Stackdriver, ale tym razem z lepszymi wiadomościami niż wcześniej:
8. Czyszczenie
Po przejściu z GKE do GKE dzięki narzędziu Migrate for Anthos usuńmy wszystkie utworzone zasoby w naszym projekcie.
Usuwanie projektu
Jeśli wolisz, możesz usunąć cały projekt. W konsoli GCP otwórz stronę Cloud Resource Manager (Menedżer zasobów Cloud):
Na liście projektów wybierz ten, nad którym pracujemy, i kliknij Usuń. Pojawi się prośba o wpisanie identyfikatora projektu. Wpisz go i kliknij Wyłącz.
Jeśli wolisz usuwać poszczególne komponenty, przejdź do następnej sekcji.
Stackdriver
Panel
Kliknij ikonę ustawień u góry strony panelu i wybierz Usuń panel.
Zasada tworzenia alertów
Na stronie Zasady z menu Działania po prawej stronie każdej utworzonej zasady wybierz Usuń.
Kontrola dostępności
Na stronie Kontrole dostępności wybierz Usuń z menu Działania po prawej stronie każdego utworzonego kontroli.
GCE i Kubernetes
Instancja Google Compute Engine
gcloud compute instances delete webserver --zone=us-central1-a
Klaster Kubernetes (obejmuje Migrate for Anthos, zestaw stanowy i usługę systemu równoważenia obciążenia)
gcloud container clusters delete my-gke-cluster --zone=us-central1-a
Dyski
Nasz zestaw stanowy używał utworzonego przez nas dysku. Użyj tych poleceń, aby pobrać nazwę:
gcloud compute disks list --filter=webserver
Usuń go, używając nazwy swojego dysku:
gcloud compute disks delete vls-690d-webserver --zone=us-central1-a
Wszystko posprzątane!
9. Gratulacje!
Doskonale! Serwer WWW został przeniesiony z instancji GCE do klastra Kubernetes za pomocą narzędzia Migrate for Anthos.
Omówione zagadnienia
- Przenieśliśmy serwer WWW z GCE do klastra Kubernetes za pomocą usługi Migrate for Anthos.
- Otworzyliśmy nasz stanowy serwer WWW, udostępniając go światu za pomocą systemu równoważenia obciążenia Kubernetes.
- Włączyliśmy Stackdriver i utworzyliśmy własny panel
- Skonfigurowaliśmy kontrolę dostępności i zasady tworzenia alertów, aby informować nas o awariach serwera WWW.