Play w klastrze Google Cloud Kubernetes

Kubernetes to system orkiestracji kontenerów. Pozwala na łatwe wdrażanie, zarządzanie i skalowanie skonteneryzowanych aplikacji. Jego kluczową cechą jest możliwość tworzenia klastrów identycznych węzłów jednej aplikacji. Pozwala to na łatwą skalowalność nawet pomiędzy wieloma hostami.

Konfiguracja aplikacji PlayFramework

Aby uruchomić swój serwer Play w klastrze Kubernetes musisz go skonteneryzować. Instrukcję jak stworzyć podstawowy obraz Dockera dla Twojej aplikacji znajdziesz w tym artykule.

Ponieważ będziemy używać Kubernetes Stateless Pods, cała konfiguracja dla twojej aplikacji powinna być przechowywana w prod.conf lub application.conf wewnątrz obrazu twojego serwera (nie w woluminie).

Wysyłanie obrazu Dockera do repozytorium kontenerów

Aby utworzyć klaster Kubernetes w Google Cloud, musisz przesłać swój obraz do repozytorium kontenerów na Docker Hub, Google Container Registry lub coś podobnego.

Po wybraniu dostawcy Repozytorium kontenerów, musisz połączyć swojego klienta docker z repozytorium (metoda uwierzytelniania może się różnić) i popchnąć swój lokalny obraz aplikacji do niego, używając tego polecenia:

docker push REPOSITORY_URL/IMAGE_NAME:TAG 

 

Konfiguracja ustawień domyślnych dla gcloud

Istnieją dwa sposoby na skonfigurowanie Google Cloud. Pierwszy to użycie Cloud Shell, który jest wstępnie skonfigurowany z Google Cloud CLI i kubectl dostępnym poprzez Google Console. Drugi to zainstalowanie Google Cloud CLI i kubectl na lokalnym komputerze.

Pierwszą rzeczą, którą musisz skonfigurować jest Twój projekt. Musisz ustawić jego nazwę za pomocą polecenia przedstawionego poniżej, gdzie PROJECT_NAME to nazwa Twojego projektu.

gcloud config set project PROJECT_NAME 

Następną rzeczą do zrobienia jest ustawienie strefy obliczeniowej i regionu za pomocą poniższych poleceń. Pierwsza z nich ustawia strefę na COMPUTE_ZONE. Druga ustawia region na COMPUTE_REGION. Powinieneś zastąpić obie te nazwy swoją strefą i regionem.

gcloud config set compute/zone COMPUTE_ZONE 
gcloud config set compute/region COMPUTE_REGION 

 

Tworzenie klastra Kubernetes

Po skonfigurowaniu swojego projektu w gclound, kolejnym krokiem jest stworzenie klastra. Na razie będzie się on składał z 1 Node’a. Aby to osiągnąć, musisz uruchomić poniższe polecenie, gdzie CLUSTER_NAME to nazwa Twojego klastra.

gcloud container clusters create CLUSTER_NAME --num-nodes=1 

 

Wdrażanie aplikacji

Teraz, gdy stworzyłeś swój klaster Kubernetes, musisz skonfigurować kubectl do wcześniej utworzonego przez użytkownika klastra. Aby to zrobić, uruchomisz to polecenie:

gcloud container clusters get-credentials CLUSTER_NAME 

Następnym krokiem jest stworzenie deploymentu. Deployment to obiekt Kubernetes reprezentujący bezstanową aplikację składającą się z wielu identycznych Podów. Utworzysz go wykonując poniższe polecenie, gdzie DEPLOYMENT_NAME znacza nazwę Twojego wdrożenia (np. play-server), a IMAGE_URL to adres url do repozytorium z Twoim obrazem i jego określonym tagiem.

kubectl create deployment DEPLOYMENT_NAME --image=IMAGE_URL 

 

Ostatnim krokiem jest udostępnienie twojej instalacji dla innych użytkowników. Aby to osiągnąć musisz wystawić swoją instalację na działanie internetu, uruchamiając:

kubectl expose deployment DEPLOYMENT_NAME --type LoadBalancer --port 80 --target-port 9000 

To polecenie wyeksponuje wdrożenie za pomocą Google Cloud Load Balancer na porcie 80 – domyślnym porcie http. Musimy ustawić target-port, będzie on kierował ruch przychodzący na port 80 na port 9000 aplikacji – który jest domyślnym portem dla aplikacji Play.

Walidacja

Aby sprawdzić, czy Twoja aplikacja jest uruchomiona, powinieneś uruchomić:

kubectl get pods 

Powinieneś zobaczyć jeden DEPLOYMENT_NAME Pod uruchomiony.

Aby uzyskać dostęp do swojej aplikacji potrzebujesz jej zewnętrznego adresu IP. Powinieneś go znaleźć uruchamiając:

kubectl get service DEPLOYMENT_NAME 

Teraz możesz go skopiować i wkleić do paska URL w przeglądarce. Jeśli wszystko zostało skonfigurowane poprawnie, powinieneś zobaczyć swoją aplikację Play.

Side Note

Wszystkie polecenia używające kubectl są ogólnymi poleceniami Kubernetes i powinny działać z każdym innym dostawcą Kubernetes, takim jak AWS, Digital Ocean lub lokalnie hostowanym jak minikube.

Polecenia używające gcloud są specyficzne dla Google Cloud.