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.

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:

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:

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

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

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

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

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”.

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.

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.

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.

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”:

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.

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:

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, 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.

Kliknij Zapisz. Pojawi się prośba o utworzenie powiązanej zasady 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 naszej zasady tworzenia alertów. W menu Typ kanału powiadomień wybierz E-mail, a następnie wpisz prawidłowy adres e-mail.

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:

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:

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ń
u góry strony i wybierz Usuń pulpit.
Zasady tworzenia alertów
Na stronie Zasady kliknij Usuń w menu Działania
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ć.
