Cele
- Wyskaluj aplikację przy użyciu kubectl.
Skalowanie aplikacji
Poprzednio stworzyliśmy Deployment i udostępniliśmy go publicznie korzystając z Serwisu. Deployment utworzył tylko jeden Pod, w którym uruchomiona jest nasza aplikacja. Wraz ze wzrostem ruchu, będziemy musieli wyskalować aplikację, aby była w stanie obsłużyć zwiększone zapotrzebowanie użytkowników.
Jeśli nie pracowałeś z wcześniejszymi sekcjami, zacznij od sekcji Jak użyć Minikube do stworzenia klastra.
Skalowanie polega na zmianie liczby replik w Deploymencie.
Podsumowanie:
- Skalowanie Deploymentu
Od samego początku w ramach Deploymentu można uruchomić wiele instancji — skorzystaj z parametru --replicas polecenia kubectl create deployment
Informacja:
Jeśli próbujesz to zrobić po poprzedniej sekcji, mogłeś usunąć utworzoną usługę lub utworzyłeś usługę typu NodePort. W tej sekcji zakłada się, że dla wdrożenia kubernetes-bootcamp utworzono usługę o typie: LoadBalancer.
Jeśli nie usunąłeś usługi utworzonej w poprzedniej sekcji, najpierw usuń ją, a następnie uruchom następujące polecenie, aby utworzyć nową z ustawionym typem na LoadBalancer:
kubectl expose deployment/kubernetes-bootcamp --type="LoadBalancer" --port 8080
Ogólnie o skalowaniu
Kiedy zwiększamy skalę Deploymentu, uruchomienie nowych Podów jest zlecane na Węzłach, które posiadają odpowiednio dużo zasobów. Operacja skalowania zwiększy liczbę Podów do oczekiwanej wartości. W Kubernetes możliwe jest również autoskalowanie Podów, ale jest ono poza zakresem niniejszego samouczka. Istnieje także możliwość skalowania do zera — w ten sposób zatrzymane zostaną wszystkie Pody należące do konkretnego Deploymentu.
Kiedy działa jednocześnie wiele instancji jednej aplikacji, należy odpowiednio rozłożyć ruch pomiędzy każdą z nich. Serwisy posiadają zintegrowany load-balancer, który dystrybuuje ruch na wszystkie Pody w Deployment wystawionym na zewnątrz. Serwis prowadzi ciągły monitoring Podów poprzez ich punkty dostępowe (endpoints), aby zapewnić, że ruch kierowany jest tylko do tych Podów, które są faktycznie dostępne.
Skalowanie polega na zmianie liczby replik w ramach Deploymentu.
Kiedy aplikacja ma uruchomioną więcej niż jedną instancję, można prowadzić ciągłe aktualizacje (Rolling updates) bez przerw w działaniu aplikacji. O tym będzie mowa w następnej sekcji.
Skalowanie Deploymentu
Aby wyświetlić listę swoich Deploymentów, użyj komendy get deployments
:
kubectl get deployments
Wynik powinien wyglądać podobnie do:
NAME READY UP-TO-DATE AVAILABLE AGE kubernetes-bootcamp 1/1 1 1 11m
Powinniśmy mieć 1 Pod. Jeśli nie, uruchom polecenie ponownie. To pokazuje:
- NAME wymienia nazwy Deploymentów w klastrze.
- READY pokazuje stosunek replik bieżących (ang. CURRENT) do oczekiwanych (ang. DESIRED).
- UP-TO-DATE wyświetla liczbę replik zaktualizowanych w celu osiągnięcia pożądanego stanu.
- AVAILABLE pokazuje, ile replik aplikacji jest dostępnych dla użytkowników.
- AGE pokazuje, jak długo aplikacja jest uruchomiona.
Aby zobaczyć ReplicaSet utworzony przez Deployment, uruchom:
kubectl get rs
Zauważ, że nazwa ReplicaSet zawsze jest sformatowana jako [NAZWA-DEPLOYMENTU]-[LOSOWY-STRING]. Losowy ciąg jest generowany losowo i wykorzystuje pod-template-hash jako ziarno.
Dwie istotne kolumny tego wyniku to:
- DESIRED pokazuje żądaną liczbę replik aplikacji, którą określasz podczas tworzenia Deploymentu. Jest to pożądany stan.
- CURRENT pokazuje, ile replik obecnie działa.
Następnie skalujemy Deployment do 4 replik. Użyjemy polecenia kubectl scale
, po którym podajemy typ Deployment, nazwę i pożądaną liczbę instancji:
kubectl scale deployments/kubernetes-bootcamp --replicas=4
Aby ponownie wyświetlić listę swoich Deploymentów, użyj get deployments
:
kubectl get deployments
Zmiana została zastosowana i mamy 4 dostępne instancje aplikacji. Następnie sprawdźmy, czy liczba Podów uległa zmianie:
kubectl get pods -o wide
Obecnie są 4 Pody, z różnymi adresami IP. Zmiana została zarejestrowana w dzienniku zdarzeń Deploymentu. Aby to sprawdzić, użyj komendy describe:
kubectl describe deployments/kubernetes-bootcamp
Możesz również zauważyć w wyniku tego polecenia, że obecnie istnieją 4 repliki.
Równoważenie obciążenia
Sprawdźmy, czy usługa równoważy obciążenie ruchem. Aby dowiedzieć się, jaki jest wystawiony adres IP i port, możemy użyć opcji `describe service`, jak nauczyliśmy się w poprzedniej części samouczka:
kubectl describe services/kubernetes-bootcamp
Utwórz zmienną środowiskową o nazwie NODE_PORT, która ma wartość jako port węzła:
export NODE_PORT="$(kubectl get services/kubernetes-bootcamp -o go-template='{{(index .spec.ports 0).nodePort}}')"
echo NODE_PORT=$NODE_PORT
Następnie wykonamy polecenie curl
na wystawiony adres IP i port. Wykonaj to polecenie wielokrotnie:
curl http://"$(minikube ip):$NODE_PORT"
Za każdym razem trafiamy na inny Pod z każdym żądaniem. To pokazuje, że równoważenie obciążenia działa.
Wynik powinien wyglądać podobnie do:
Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-644c5687f4-wp67j | v=1 Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-644c5687f4-hs9dj | v=1 Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-644c5687f4-4hjvf | v=1 Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-644c5687f4-wp67j | v=1 Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-644c5687f4-4hjvf | v=1
Informacja:
Jeśli używasz minikube z Docker Desktop jako sterownika kontenerów, potrzebny jest tunel minikube. Wynika to z faktu, że kontenery w Docker Desktop są izolowane od Twojego hosta.
W osobnym oknie terminala wykonaj:
minikube service kubernetes-bootcamp --url
Wynik wygląda następująco:
http://127.0.0.1:51082
! Ponieważ używasz sterownika Docker na systemie Darwin, terminal musi być otwarty, aby go uruchomić.
Następnie użyj podany URL, aby uzyskać dostęp do aplikacji:
curl 127.0.0.1:51082
Zmniejsz Skalę
Aby zmniejszyć skalowalność Deployment do 2 replik, ponownie uruchom komendę scale
:
kubectl scale deployments/kubernetes-bootcamp --replicas=2
Wyświetl listę Deploymentów, aby sprawdzić, czy zmiana została zastosowana, za pomocą komendy get deployments
:
kubectl get deployments
Liczba replik zmniejszyła się do 2. Wyświetl listę liczby Podów za pomocą get pods
:
kubectl get pods -o wide
To potwierdza, że 2 Pody zostały zakończone.
Gdy będziesz gotowy, przejdź do Wykonywanie aktualizacji Rolling Update.