Migracja z Compute Engine do Kubernetes Engine za pomocą usługi Migrate for Anthos

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.

a08aa5bf924b107d.png

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:

5c08e3b2bd17e03.png

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:

c69778b8fb8ac72b.png

Następnie przejdź do GCP Marketplace, aby wdrożyć narzędzie Migrate for Anthos:

45f5753cae53ccb5.png

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óż:

94dc6238b2affd16.png

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:

5bf601103a5335cf.png

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:

5c08e3b2bd17e03.png

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.

4e62c8ad3f2b3fe9.png

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.

62066a9251d19843.png

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.

d054778de301429e.png

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.

56a0513efe60de3e.png

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:

bd66ba91f3125028.png

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.

3d3d45e4357454e0.png

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:

49368e5700274cf2.png

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.

d884560f91011009.png

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.

568a8f1e27ae8417.png

Kliknij Zapisz. Pojawi się prośba o utworzenie zasad tworzenia alertów:

f89d53a106a709f4.png

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.

74609849348bd03e.png

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.

44c474e28a497659.png

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:

808ac1d75ce3681f.png

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:

5b8262fbbc4877c.png

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ń dc259295eb33cb42.png u góry strony panelu i wybierz Usuń panel.

Zasada tworzenia alertów

Na stronie Zasady z menu Działania 2ef75d82e76accaa.png 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.