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.