1. Przegląd
Przepisywanie lub przeprojektowywanie istniejących aplikacji, aby działały w Kubernetes, nie zawsze jest możliwe lub opłacalne w przypadku ręcznego wykonania. Migrate for Anthos może pomóc w modernizacji istniejących aplikacji i uruchomieniu ich w Kubernetes. W tym ćwiczeniu przeniesiesz 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 Kubernetes i skonfigurować go za pomocą systemu równoważenia obciążenia
Czego potrzebujesz
- Projekt Google Cloud ze skonfigurowanymi rozliczeniami. Jeśli go nie masz, musisz go utworzyć.
2. Przygotowania
To ćwiczenie można w całości wykonać w Google Cloud Platform bez instalacji ani konfiguracji lokalnej.
Włączanie interfejsów API
Zanim zaczniesz, włącz wymagane interfejsy API w projekcie Google Cloud:
Tworzenie serwera WWW 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 z jej szczegółami. Zapisz sobie Zewnętrzny adres IP – będzie nam potrzebny do sprawdzenia, czy serwer WWW działa.

Gdy instancja będzie już uruchomiona, 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ę w instancji obliczeniowej 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. Powinien być widoczny domyślny ekran powitalny nginx:

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 Migrate for Anthos
Następnie utworzymy klaster GKE, do którego ostatecznie przeniesiemy serwer WWW Compute Engine. W Cloud Console 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
Wykonanie tego polecenia może potrwać kilka minut. Po utworzeniu klastra otrzymasz dane wyjściowe z jego szczegółami:

Następnie otwórz GCP Marketplace, aby wdrożyć Migrate for Anthos:

Na stronie Marketplace Migrate for Anthos kliknij Configure (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. Upewnij się, że wybrany klaster to ten, który właśnie utworzyliśmy, i kliknij Deploy:

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

4. Od instancji obliczeniowej do zestawu stanowego
Mamy już klaster Kubernetes z uruchomionym Migrate for Anthos, więc możemy rozpocząć proces migracji. Aby wdrożyć instancję Compute w klastrze Kubernetes, wyłączymy instancję Compute Engine, aby móc utworzyć zrzuty dysków. Zanim przejdziesz dalej, zapisz sobie identyfikator instancji, który będzie nam 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ć zrzut dysków, uruchamiając ten skrypt. Pamiętaj, aby wstawić 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
Dzięki tym flagom skrypt clone_vm_disks.py wykona te czynności:
- Sprawdzi, czy instancja GCE jest wyłączona.
- Utworzy zrzut każdego dysku instancji.
- Utworzy nowy dysk z każdego zrzutu.
- Usunie utworzone zrzuty.
- Wygeneruje 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 klastrze Kubernetes wraz z trwałymi żądaniami woluminów wymaganymi do podłączenia skopiowanych dysków do kontenera serwera WWW. Możemy zastosować te zmiany za pomocą kubectl:
kubectl apply -f containerized-webserver.yaml
Sprawdź stan zestawu stanowego serwera WWW na stronie Zadania:
To normalne, że po uruchomieniu polecenia kubectl apply stan przez kilka minut będzie wskazywać „Pods are pending” (Pody są w stanie oczekiwania). Gdy stan zmieni się na „OK”, możesz przejść dalej.
5. Udostępnianie klastra systemowi równoważenia obciążenia
W tym momencie 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 tą 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ą kubectl możemy pobrać zewnętrzny adres IP usługi webserver-container:
kubectl get services
Jeśli wpiszemy zewnętrzny adres IP w przeglądarce, powinien się wyświetlić ten sam domyślny ekran powitalny nginx co wcześniej:

Udało się! Nasz serwer WWW 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. Sprawdźmy niektóre dane, które Stackdriver automatycznie rejestruje.
W menu usług kliknij link Monitorowanie. Pierwsze otwarcie tej usługi w projekcie może potrwać kilka minut, ponieważ będzie ona konfigurować obszar roboczy.
Po wczytaniu najedź kursorem na Zasoby w panelu po lewej stronie i w menu wybierz „Kubernetes Engine NEW”.
Każdy wiersz w tym panelu odpowiada zasobowi Kubernetes. Za pomocą linków nad panelem możesz przełączać się między widokami infrastruktury, zadań i usług.

W widoku Zadania rozwiń „my-gke-cluster” i przejdź do default > webserver-statefulset > webserver-statefulset-0 > webserver-statefulset. Kliknij kontener webserver-statefulset. Znajdziesz tu kilka gotowych danych rejestrowanych przez Stackdriver, w tym wykorzystanie pamięci i procesora.

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 paneli niestandardowych, których można używać do porządkowania wykresów i grafów dla wszystkich dostępnych danych. Utwórzmy panel niestandardowy, aby uzyskać szybki wgląd w niektóre dane serwera WWW.
W panelu po lewej stronie najedź kursorem na Panele, a następnie kliknij Utwórz panel.

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

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 procesora. Ten wybór spowoduje automatyczne wypełnienie pól Typ zasobu i Dane.
Następnie przefiltrujemy dane według project_id (jeśli mamy kilka 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 też przefiltrować dane według 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
Stackdriver umożliwia konfigurowanie alertów, które będą nas powiadamiać, gdy dowolne dane osiągną określone przez nas wartości progowe. Możemy na przykład skonfigurować Stackdriver tak, aby wysyłał do nas e-maile, gdy wykorzystanie procesora z poprzedniego 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 kontrolę dostępności , a następnie przeprowadzimy symulację 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 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.
W formularzu wpisz „Dostępność punktu końcowego” jako tytuł, a jako nazwę hosta wpisz zewnętrzny adres IP systemu równoważenia obciążenia.

Kliknij Zapisz , a pojawi się prośba o utworzenie powiązanych zasad tworzenia alertów:

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.

To jeszcze nie koniec. Następnie określimy kanał powiadomień, aby otrzymywać powiadomienia o naruszeniu zasad tworzenia alertów. W menu Kanał powiadomień wybierz E-mail, a następnie prawidłowy adres e-mail.

Kliknij Dodaj kanał powiadomień. Na koniec u dołu formularza nazwij zasadę „Dostępność aplikacji internetowej” i kliknij Zapisz.
Aby zobaczyć, jak będzie wyglądać alert, w Cloud Console ponownie otwórz Cloud Shell. 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 przerwie w działaniu usługi:

Cofnijmy tę zmianę. Wróć do Cloud Shell i ponownie uruchom nginx:
kubectl exec -t webserver-statefulset-0 -- /bin/bash -c "nginx"
Po kilku minutach otrzymasz kolejnego e-maila ze Stackdriver, tym razem z lepszymi wiadomościami:

8. Czyszczenie
Po przeniesieniu się z GCE do GKE za pomocą Migrate for Anthos zwalniajmy miejsce w projekcie ze wszystkich utworzonych zasobów.
Usuwanie projektu
Jeśli chcesz, 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 jeden po drugim, przejdź do następnej sekcji.
Stackdriver
Panel
Na stronie panelu kliknij ikonę ustawień
u góry strony i wybierz Usuń panel.
Zasady tworzenia alertów
Na stronie Zasady kliknij menu Działania
po prawej stronie każdej utworzonej zasady i wybierz Usuń.
Kontrola dostępności
Na stronie Kontrole dostępności kliknij menu Działania po prawej stronie każdej utworzonej kontroli i wybierz Usuń.
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. Aby pobrać nazwę, użyj tego polecenia:
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! Za pomocą Migrate for Anthos udało Ci się przenieść serwer WWW z instancji GCE do klastra Kubernetes.
Omówione zagadnienia
- Przenieśliśmy serwer WWW z GCE do klastra Kubernetes za pomocą Migrate for Anthos.
- Udostępniliśmy nasz zestaw stanowy serwera WWW, udostępniając go za pomocą usługi systemu równoważenia obciążenia Kubernetes.
- Włączyliśmy Stackdriver i utworzyliśmy panel niestandardowy.
- Skonfigurowaliśmy kontrolę dostępności wraz z zasadami tworzenia alertów, aby otrzymywać powiadomienia o awarii serwera WWW.
