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

1. Przegląd

Przepisanie lub przekształcenie istniejących aplikacji, aby działały w 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 uruchomieniu ich w Kubernetes. W tym module dowiesz się, jak przenieść istniejącą aplikację internetową hostowaną w Compute Engine do Kubernetes Engine za pomocą Migrate for Anthos.

Czego się nauczysz

  • Jak wdrożyć Migrate for Anthos w klastrze Kubernetes
  • Jak utworzyć kontener w zestawie stanowym na podstawie istniejącej instancji Compute Engine
  • Jak wdrożyć kontener w środowisku Kubernetes i skonfigurować go za pomocą systemu równoważenia obciążenia

Czego potrzebujesz

  • projekt Google Cloud ze skonfigurowanymi rozliczeniami; Jeśli nie masz konta, musisz je utworzyć.

2. Przygotowania

Ten przewodnik można w całości uruchomić na Google Cloud Platform bez konieczności instalowania ani konfigurowania czegokolwiek lokalnie.

Włączanie interfejsów API

Zanim zaczniesz, włącz wymagane interfejsy API w projekcie Google Cloud:

Tworzenie serwera WWW na instancji Compute

Utwórzmy instancję obliczeniową, której użyjemy do hostowania początkowego serwera WWW nginx, oraz reguły zapory sieciowej, które pozwolą nam wyświetlić domyślną stronę docelową serwera WWW. Możemy to zrobić na kilka sposobów, ale dla ułatwienia 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 część tego polecenia utworzy instancję Google Cloud w strefie us-central1-a, a druga część utworzy regułę zapory sieciowej o nazwie „default-allow-http”, która zezwoli na ruch HTTP w naszej sieci.

Po utworzeniu instancji wyświetli się tabela ze szczegółami instancji. Zapisz Zewnętrzny adres IP – będzie on potrzebny później do sprawdzenia, czy serwer WWW działa.

a08aa5bf924b107d.png

Gdy instancja będzie działać, 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ę na instancję obliczeniową zainstaluj nginx:

sudo apt install nginx

Wyloguj się z sesji SSH za pomocą polecenia logout.

Sprawdźmy, czy serwer WWW działa, wpisując w przeglądarce zewnętrzny adres IP instancji, który został zapisany wcześniej. 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ą Migrate for Anthos.

3. Klaster Kubernetes z usługą Migrate for Anthos

Następnie utworzymy klaster GKE, do którego ostatecznie przeniesiemy serwer WWW Compute Engine. W Cloud Console wykonaj te czynności:

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

Wykonanie tego polecenia może potrwać kilka minut. Po utworzeniu klastra otrzymasz dane wyjściowe z jego szczegółami:

c69778b8fb8ac72b.png

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

45f5753cae53ccb5.png

Na stronie usługi Migrate for Anthos w Marketplace kliknij „Skonfiguruj”, a jeśli pojawi się prośba, wybierz projekt z listy. Na następnej stronie pojawi się formularz z wpisanymi wartościami domyślnymi. Sprawdź, czy wybrany klaster to ten, który został utworzony, i kliknij Wdróż:

94dc6238b2affd16.png

Migrate for Anthos powinien być teraz wdrożony w klastrze Kubernetes. Po zakończeniu wdrażania na stronie aplikacji Kubernetes Engine zobaczysz stan „OK”:

5bf601103a5335cf.png

4. Od instancji obliczeniowej do zbioru stanowego

Mamy już klaster Kubernetes z uruchomioną usługą Migrate for Anthos, więc możemy rozpocząć proces migracji. Aby wdrożyć instancję obliczeniową w klastrze Kubernetes, wyłączymy instancję Compute Engine, aby można było utworzyć zrzuty dysków. Zanim przejdziesz dalej, zanotuj identyfikator instancji, który będzie potrzebny później:

gcloud compute instances describe webserver --zone us-central1-a | grep ^id

Wyłączmy instancję obliczeniową:

gcloud compute instances stop webserver --zone us-central1-a

Gdy instancja zostanie zatrzymana, możemy bezpiecznie utworzyć migawkę dysków, uruchamiając ten skrypt. Pamiętaj, aby wstawić identyfikator projektuidentyfikator 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

Dzięki tym flagom clone_vm_disks.py:

  • Sprawdź, czy instancja GCE jest wyłączona.
  • Utwórz zrzut z każdego dysku instancji.
  • Utwórz nowy dysk z każdego zrzutu
  • usuwać utworzone przez siebie zrzuty,
  • Wygeneruj w bieżącym katalogu roboczym plik YAML do wdrożenia zestawu stanowego, który będzie hostować serwer WWW.

Wygenerowany plik YAML udostępni zestaw stanowy w naszym klastrze Kubernetes wraz z roszczeniami dotyczącymi woluminów stałych, które są wymagane do zamontowania skopiowanych dysków w naszym kontenerze serwera internetowego. Możemy wprowadzić te zmiany za pomocą kubectl:

kubectl apply -f containerized-webserver.yaml

Sprawdź stan elementu webserver-statefulset na stronie Zbiory zadań:

To normalne, że po uruchomieniu polecenia kubectl apply stan „Pody oczekują” utrzymuje się przez kilka minut. Gdy stan zmieni się na „OK”, przejdź dalej.

5. Udostępnianie klastra systemowi równoważenia obciążenia

W tym momencie nasz klaster Kubernetes powinien uruchamiać serwer WWW jako zestaw stanowy, ale musimy też udostępnić jego kontener systemowi równoważenia obciążenia, aby uzyskać dostęp do serwera WWW za pomocą zewnętrznego adresu IP. W Cloud Shell utwórz nowy plik o nazwie loadbalancer.yaml z następującą treś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

Teraz zastosuj go za pomocą kubectl:

kubectl apply -f loadbalancer.yaml

Za pomocą narzędzia kubectl możemy pobrać zewnętrzny adres IP usługi webserver-container:

kubectl get services

Jeśli wpiszemy w przeglądarce zewnętrzny adres IP, powinna się wyświetlić ta sama domyślna strona powitalna nginx, co wcześniej:

5c08e3b2bd17e03.png

Udało się! Nasz serwer internetowy GCE jest teraz hostowany w Kubernetes. Super!

6. Stackdriver Monitoring

Dane

Jako zarządzana usługa Kubernetes, Kubernetes Engine jest automatycznie wyposażona w funkcje logowania i monitorowania za pomocą Stackdriver. Przyjrzyjmy się niektórym wskaźnikom, które Stackdriver rejestruje automatycznie.

Kliknij link Monitoring w menu usług. Pierwsze otwarcie tej usługi w projekcie może potrwać kilka minut, ponieważ w tym czasie będzie konfigurowany obszar roboczy.

Po załadowaniu najedź kursorem na Zasoby w panelu po lewej stronie i z menu wybierz „Kubernetes Engine NOWY”.

4e62c8ad3f2b3fe9.png

Każdy wiersz na tym panelu przedstawia zasób Kubernetes. Między widokami infrastruktury, obciążeń i usług możesz przełączać się za pomocą linków nad panelem.

62066a9251d19843.png

W widoku Zadania rozwiń kolejno „my-gke-cluster”, default, webserver-statefulset, webserver-statefulset-0 i webserver-statefulset. Kliknij kontener zestawu stanowego serwera internetowego. Znajdziesz tu kilka gotowych danych zbieranych przez Stackdriver, w tym wykorzystanie pamięci i procesora.

d054778de301429e.png

Wykresy wyświetlane w tym panelu to te, których będziemy mogli użyć do utworzenia panelu niestandardowego.

Niestandardowe panele informacyjne

Stackdriver umożliwia tworzenie niestandardowych paneli, na których możemy porządkować wykresy i grafy dotyczące dowolnych dostępnych danych. Utwórzmy niestandardowy panel, który będzie zawierać przegląd niektórych danych serwera WWW.

W panelu po lewej stronie najedź kursorem na Panele informacyjne, a następnie kliknij Utwórz panel.

56a0513efe60de3e.png

Teraz, gdy mamy już pusty panel, możemy dodać do niego dane, które chcemy śledzić. Nadajmy naszemu panelowi bez tytułu przydatną nazwę, np. „Kontenery mojego serwera internetowego”, i w prawym górnym rogu kliknij „Dodaj wykres”:

bd66ba91f3125028.png

Pamiętasz gotowe wskaźniki? Dodajmy wykres wykorzystania procesora kontenera. W polu Tytuł wykresu wpisz „Wykorzystanie procesora”. W polu „Znajdź typ zasobu i wskaźnik” wpisz request_utilization i na przefiltrowanej liście wybierz Wykorzystanie żądań procesora. Ten wybór spowoduje wypełnienie pól Typ zasobu i Wskaźnik.

Następnie musimy odfiltrować dane według identyfikatora projektu (jeśli mamy kilka projektów) i nazwy kontenera. W polu Filtr wpisz project_id, wybierz go z przefiltrowanej listy, a następnie wybierz projekt w polu Wartość. Musimy też filtrować według parametru container_name. W polu Filtr wpisz container_name, wybierz tę wartość z przefiltrowanej listy i w polu Wartość wybierz webserver-statefulset. Kliknij Zapisz.

Mamy już panel z pierwszym wykresem.

3d3d45e4357454e0.png

7. Kontrola dostępności i zasady tworzenia alertów

Dzięki Stackdriver możemy skonfigurować alerty, które będą nas powiadamiać, gdy dowolne dane osiągną określone przez nas wartości progowe. Możemy na przykład skonfigurować wysyłanie e-maili przez Stackdriver, gdy wykorzystanie procesora w ostatnim kroku przekroczy określony próg przez dłuższy czas, co może wskazywać na problem z aplikacją. Aby pokazać, jak wyglądają te alerty, skonfigurujmy kontrole dostępności, a następnie zasymulujmy przerwę 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 sugeruje strona Kontrole dostępności, skonfigurujmy pierwszą kontrolę dostępności. W prawym górnym rogu strony kliknij przycisk Dodaj kontrolę dostępności.

d884560f91011009.png

W formularzu, który się pojawi, wpisz „Endpoint Uptime” jako tytuł, a jako nazwę hosta podaj zewnętrzny adres IP modułu równoważenia obciążenia.

568a8f1e27ae8417.png

Kliknij Zapisz. Pojawi się prośba o utworzenie powiązanej zasady tworzenia alertów:

f89d53a106a709f4.png

Kliknij Utwórz zasadę tworzenia alertów.

Nazwijmy ją „Zasady dostępności punktu końcowego”. W sekcji Konfiguracja ustaw „Warunek jest aktywowany, gdy” na „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 naszej zasady tworzenia alertów. W menu Typ kanału powiadomień wybierz E-mail, a następnie wpisz prawidłowy adres e-mail.

44c474e28a497659.png

Kliknij Dodaj kanał powiadomień. Na koniec u dołu formularza nadaj zasadzie nazwę „Dostępność aplikacji internetowej” i kliknij Zapisz.

Aby zobaczyć, jak będzie wyglądał alert, ponownie otwórz Cloud Shell w konsoli Cloud. To polecenie zatrzyma usługę nginx działającą w podzie serwera WWW:

kubectl exec -t webserver-statefulset-0 -- /bin/bash -c "nginx -s stop"

Po kilku minutach otrzymasz e-maila z alertem o awarii:

808ac1d75ce3681f.png

Cofnijmy to. Wróćmy do Cloud Shell i ponownie uruchommy nginx:

kubectl exec -t webserver-statefulset-0 -- /bin/bash -c "nginx"

Po kilku minutach otrzymasz kolejnego e-maila od Stackdrivera, tym razem z lepszymi wiadomościami niż poprzednio:

5b8262fbbc4877c.png

8. Czyszczenie

Po migracji z GCE do GKE za pomocą Migrate for Anthos wyczyśćmy projekt ze wszystkich utworzonych zasobów.

Usuwanie projektu

Jeśli wolisz, możesz usunąć cały projekt. W konsoli GCP otwórz stronę Cloud Resource Manager:

Na liście projektów wybierz projekt, nad którym pracowaliśmy, 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

Na stronie pulpitu kliknij ikonę ustawień dc259295eb33cb42.png u góry strony i wybierz Usuń pulpit.

Zasady tworzenia alertów

Na stronie Zasady kliknij Usuń w menu Działania 2ef75d82e76accaa.png po prawej stronie każdej utworzonej zasady.

Kontrola dostępności

Na stronie Kontrole dostępności wybierz Usuń w menu Działania po prawej stronie każdej utworzonej kontroli.

GCE i Kubernetes

Instancja Google Compute Engine

gcloud compute instances delete webserver --zone=us-central1-a

Klaster Kubernetes (obejmuje Migrate for Anthos, StatefulSet i usługę równoważenia obciążenia)

gcloud container clusters delete my-gke-cluster --zone=us-central1-a

Dyski

Nasz zestaw stanowy korzystał z utworzonego przez nas dysku. Aby pobrać nazwę, użyj tego kodu:

gcloud compute disks list --filter=webserver

Zastąp moją nazwę dysku swoją i usuń go za pomocą tego polecenia:

gcloud compute disks delete vls-690d-webserver --zone=us-central1-a

Wszystko usunięte.

9. Gratulacje!

Doskonale! Przeniesiono serwer WWW z instancji GCE do klastra Kubernetes za pomocą usługi Migrate for Anthos.

Omówione zagadnienia

  • Migracja serwera WWW z GCE do klastra Kubernetes za pomocą Migrate for Anthos
  • Otworzyliśmy nasz serwer WWW z zestawem stanowym dla całego świata, udostępniając go za pomocą usługi równoważenia obciążenia Kubernetes.
  • Włączyliśmy Stackdriver i utworzyliśmy niestandardowy panel.
  • Skonfigurowaliśmy kontrolę dostępności wraz z zasadami tworzenia alertów, aby otrzymywać powiadomienia, gdy nasz serwer WWW przestanie działać.