Jak wdrażać aplikacje w Kubernetes

Kubernetes to jedna z najpopularniejszych platform automatyzacji do wdrażania, skalowania i obsługi kontenerów aplikacji w klastrze hostów lub węzłów.

W tym artykule omówimy jeden z głównych obiektów w Kubernetes: wdrożenie. Celem jest zrozumienie jego zachowania oraz sposobu tworzenia, aktualizowania i usuwania.

Co to jest wdrożenie?

Deployment to jeden z obiektów używanych do uruchamiania Podów. Najlepsze rozwiązania Kubernetes zachęcają do korzystania z wdrożeń dla aplikacji bezstanowych. Bez wdrożenia musiałbyś ręcznie tworzyć, aktualizować i usuwać wiele podów, co byłoby żmudne i niewykonalne dla wielu podów.

Wdrożenie deklaruje pojedynczy obiekt w YAML, który nie tylko tworzy pody, ale także zapewnia, że ​​są one aktualne i działają. Możesz także łatwo automatycznie skalować swoje aplikacje za pomocą wdrożenia na Kubernetes. W ten sposób wdrożenie służy do skalowania, wdrażania i przywracania wersji aplikacji w Podach.

Wdrożenie informuje również Kubernetes, ile kopii Poda chcemy uruchomić, a Kubernetes zajmuje się resztą. Skojarzony kontroler utworzy zestaw replik z Twojej konfiguracji podczas tworzenia wdrożenia. Kontroler powiązany z zestawem ReplicaSet utworzy serię podów z konfiguracji zestawu ReplicaSet.

Zalety korzystania z wdrożenia zamiast bezpośredniego tworzenia zestawu replik to:

  • Historyzacja obiektu: każda zmiana w obiekcie (poprzez „zastosuj” lub „edytuj”) utworzy kopię zapasową poprzedniej wersji.
  • Zarządzanie wycofywaniem i wycofywaniem zmian: Możesz cofnąć się do konfiguracji w związku z poprzednim punktem.

Tworzenie stanowiska

Istnieją dwie metody, których możemy użyć do utworzenia wdrożenia Kubernetes:

Metoda imperatywna

Interfejsy API Kubernetes umożliwiają bardziej bezpośrednie i imperatywne podejście bez konieczności używania plików konfiguracyjnych lub manifestów w formacie YAML. W takim podejściu wszystko, co musimy zrobić, to powiedzieć, co chcemy zrobić, a Kubernetes weźmie na siebie odpowiedzialność za zdefiniowanie tego, co należy zrobić, aby osiągnąć oczekiwany rezultat.

Aby użyć metody imperatywnej, użyj poniższego polecenia:

kubectl create deployment nginx-deployment --image nginx --port=80

Metoda deklaratywna

W tej metodzie musisz zadeklarować wszystko, a kiedy używasz tego kodu, Kubernetes po prostu odczytuje twoje definicje i tworzy dokładnie tak, jak przedstawiono lub zadeklarowano.

Aby użyć deklaratywnego wdrożenia, będziesz musiał utworzyć plik YAML.

Plik YAML do wdrożenia o nazwie new_deployment.yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  #Specifies the number of Pod Copies
  replicas: 3
 #Selects the Pod to be managed by the deployment
  selector:
    #Matches the defined labels
    matchLabels:
      deploy: example
  template:
    metadata:
      #Specifies the labels on the Pod.
       labels:
         deploy: example
    spec:
      containers:
        - name: nginx
          image: nginx:1.20.2 

W tym pliku YAML, po zdefiniowaniu wersji Kubernetes API, typu tworzonego obiektu oraz nazwy wdrożenia, znajduje się sekcja spec. W tej sekcji najpierw definiujesz klucz replik, który wskazuje liczbę instancji podów, które wdrożenie musi zachować.

Użyj etykiety selektora, aby zidentyfikować pody we wdrożeniu. W tym celu możesz użyć etykiety wdrożenia, która informuje, że wszystkie zasobniki pasujące do tych etykiet są pogrupowane we wdrożeniu.

Następnie masz obiekt szablonu, w którym masz model Pod w specyfikacji wdrożenia. Gdy wdrożenie tworzy pody, tworzy je przy użyciu tego szablonu. Specyfikację zwykłego poda można znaleźć pod kluczem szablonu.

Dzięki temu wdrożeniu obrazy Nginx z etykietami zostaną wdrożone w podach. Co więcej, musisz być ostrożny w tym punkcie, a Pod jest jednostką skalowalności w Kubernetes, więc musisz pomyśleć o wzorcu, którego chcesz użyć, jeśli umieścisz kilka kontenerów w tym samym Pod.

Następnie zastosuj plik new_deployment.yaml Yaml, użyj następującego polecenia:

kubectl apply -f new_deployment.yaml

Po kilku sekundach możesz uzyskać stan wdrożenia, korzystając z:

kubectl get all

Pobierz i zaktualizuj wdrożenie

Zwróć uwagę, że masz utworzone pody, wdrożenie i zestaw replik. Dlatego wdrożenie zawsze tworzy i zarządza zestawem replik. Teraz możesz użyć następującego polecenia, aby opisać wdrożenie:

kubectl describe deployment nginx-deployment 

Teraz masz pełny opis wdrożenia. Podkreśla strategię używaną do tworzenia/odbudowywania zasobników, gdy aktualizacja została zdefiniowana jako RollingUpdate.

Strategia RollingUpdate pozwala na uporządkowaną migrację jednej wersji aplikacji do nowszej wersji. Jest to domyślna strategia używana w Kubernetes.

Oprócz tego mamy również następujące strategie:

  • Odtwórz: kończy aktualnie działające instancje Pod i „odtwarza” je w nowej wersji;
  • Niebieski/zielony: Ta strategia tworzy dwa oddzielne, ale identyczne środowiska. W niebieskim środowisku aplikacja działa tak, jak jest, podczas gdy w zielonym środowisku aplikacja działa tak, jak będzie w przyszłości;
  • Kanaryjska: strategia wdrażania, w której podzbiór użytkowników bierze udział w przyrostowym wydawaniu aplikacji lub usługi.

Jeśli zdecydujesz się na „rolling-update”, możesz skonfigurować jego zachowanie pod kątem liczby pożądanych replik.

  • maxSurge pozwala wskazać (w procentach lub wartościach bezwzględnych), ile podów może utworzyć oprócz liczby aktualnie skonfigurowanych replik.
  • maxUnavailable pozwala wskazać (w procentach lub wartościach bezwzględnych), ile podów może być „niedostępnych” podczas aktualizacji, w zależności od liczby skonfigurowanych replik.

W zależności od aplikacji i Twojego autoskalera konfiguracje te pozwolą Ci zapewnić QoS lub przyspieszyć wdrożenia.

Następnie musisz przeskalować pody do 10 i zmienić tag obrazu Nginx na najnowszy.

kubectl scale deployment nginx-deployment --replicas=10

Zwróć uwagę, że tworzymy 5 kontenerów, a na 10 Podów mamy 5 dostępnych.

Po kilku sekundach użyj następującego polecenia:

kubectl get all

Tutaj możesz zobaczyć, że wszystkie pody zostały utworzone, a kontenery działają.

Usuwanie obrazu stanowiska

Aby usunąć wdrożenie Kubernetes, możesz użyć następujących poleceń:

kubectl delete deploy nginx-deployment 
kubectl delete deploy new_deployment.yaml

Ster: Uprość wdrożenia

Gdy chcesz wdrożyć złożoną aplikację, która wykorzystuje dziesiątki, a nawet setki zasobów Kubernetes, narzędzie kubectl staje się nieodpowiednie, dlatego opracowano narzędzie Helm. Helm to menedżer pakietów dla Kubernetes, który opiera się na kubectl i upraszcza wdrażanie aplikacji.

W słowniku Helm aplikacja nazywa się wydaniem. Jest powiązany z wykresem, czyli zbiorem plików konfiguracyjnych w formacie YAML zawierającym zmienne globalne i szablony opisujące zasoby Kubernetes.

Wniosek

Wdrożenie jest podstawowym obiektem Kubernetes. Ponieważ wielka moc pociąga za sobą wielką odpowiedzialność, musisz być ostrożny podczas jej konfigurowania lub ryzykować nieoczekiwane zachowania. Aby przejść dalej z konfiguracjami wdrażania, możesz zapoznać się z dokumentacją Kubernetes.

Możesz także zapoznać się z najlepszymi samouczkami Kubernetes, aby uczyć się od zera i zostać ekspertem.