Informacje o Skaffold

1. Cele

Skaffold to narzędzie, które obsługuje przepływ pracy podczas kompilowania, przesyłania i wdrażania aplikacji. Za pomocą Skaffold możesz łatwo skonfigurować lokalny obszar roboczy programowania, usprawnić wewnętrzną pętlę programowania, a także zintegrować swoje narzędzia z innymi narzędziami, takimi jak Kustomize i Helm, które ułatwiają zarządzanie plikami manifestu Kubernetes.

W tym samouczku poznasz podstawowe pojęcia związane ze Skaffold, użyjesz go do automatyzacji wewnętrznej pętli programisty, a następnie wdrożysz aplikację.

W ramach ćwiczenia:

  • Konfigurowanie i włączanie Skaffolda na potrzeby lokalnego środowiska programistycznego
  • Tworzenie i uruchamianie prostej aplikacji golang
  • Zarządzanie wdrażaniem aplikacji lokalnych za pomocą Skaffold
  • Wyrenderuj pliki manifestu i wdróż aplikację

2. Zanim rozpoczniesz

Przygotowuję obszar roboczy

  1. Otwórz edytor Cloud Shell, klikając ten adres URL:
https://shell.cloud.google.com

Zezwalaj na pliki cookie innych firm. Kliknij „Strona nie działa” i następnie „Zezwalaj na pliki cookie”.

7b702066a2135a3d.png

3394f82132eb4fd4.png

  1. Jeśli jeszcze tego nie zrobiono, w oknie terminala sklonuj źródło aplikacji za pomocą tego polecenia:
git clone https://github.com/GoogleCloudPlatform/software-delivery-workshop.git
  1. Przejdź do katalogu sklonowanego repozytorium:
cd software-delivery-workshop/labs/understanding-skaffold/getting-started
  1. Aby ustawić obszar roboczy Cloud Shell jako bieżący katalog, uruchom to polecenie:
cloudshell workspace .

Przygotowuję projekt

  1. Sprawdź, czy Twój projekt Google Cloud jest prawidłowo skonfigurowany, uruchamiając to polecenie:
gcloud config set project {{project-id}}

3. Pierwsze kroki z Skaffold

  1. Aby utworzyć plik konfiguracji Skaffold najwyższego poziomu (skaffold.yaml), uruchom to polecenie:
cat <<EOF > skaffold.yaml
apiVersion: skaffold/v2beta21
kind: Config
metadata:
  name: getting-started-kustomize
build:
  tagPolicy:
    gitCommit:
      ignoreChanges: true
  artifacts:
  - image: skaffold-kustomize
    context: app
    docker:
      dockerfile: Dockerfile
deploy:
  kustomize:
    paths:
    - overlays/dev
profiles:
- name: staging
  deploy:
    kustomize:
      paths:
      - overlays/staging
- name: prod
  deploy:
    kustomize:
      paths:
      - overlays/prod
EOF
  1. Otwórz plik skaffold.yaml w panelu IDE. Jest to plik konfiguracji najwyższego poziomu, który definiuje potok Skaffold.

Zwróć uwagę na format YAML podobny do Kubernetes i następujące sekcje pliku YAML:

  • build
  • deploy
  • profiles

Te sekcje określają sposób kompilacji i wdrażania aplikacji oraz profile dla każdego celu wdrożenia.

Pełną listę etapów Skaffold znajdziesz w dokumentacji dotyczącej etapów przepływu Skaffold.

4. Kompilacja

Sekcja build zawiera konfigurację, która określa sposób kompilacji aplikacji. W takim przypadku możesz zobaczyć konfigurację obsługi tagów git oraz sekcję artifacts definiującą obrazy kontenerów tworzące aplikację.

W tej sekcji znajdziesz też odniesienie do Dockerfile, które służy do tworzenia obrazów. Skaffold dodatkowo obsługuje inne narzędzia do kompilacji, takie jak Jib, Maven, Gradle, natywne Buildpacks czy Bazel, a także skrypty niestandardowe. Więcej informacji o tej konfiguracji znajdziesz w dokumentacji Skaffold Build.

5. Wdróż

Sekcja deploy zawiera konfigurację określającą sposób wdrażania aplikacji. W tym przypadku możesz zobaczyć przykład wdrożenia domyślnego, który konfiguruje Skaffold do używania narzędzia Kustomize.

Narzędzie Kustomize umożliwia generowanie plików manifestu Kubernetes poprzez połączenie zestawu plików YAML typowych komponentów (w katalogu base) z co najmniej 1 „nakładką”, która zwykle odpowiada co najmniej 1 docelowi wdrożenia (dev, test, staging i production lub podobne).

W tym przykładzie możesz zobaczyć 2 nakładki dla 3 docelowych wersji: dev, stagingprod. Nakładka dev będzie używana podczas lokalnego tworzenia wersji, a nakładki stagingprod podczas wdrażania za pomocą Skaffold.

6. Profile

Sekcja profiles zawiera konfigurację, która definiuje kompilację, testy i wdrażanie w różnych kontekstach. Różne konteksty to zwykle różne środowiska w systemie wdrażania aplikacji, takie jak staging lub prod w tym przykładzie. Oznacza to, że możesz łatwo zarządzać plikami manifestu, których zawartość musi się różnić w zależności od środowisk docelowych, bez konieczności powtarzania powtarzalnej konfiguracji.

Konfiguracja w sekcji profiles może zastąpić lub zaktualizować dowolne elementy z konfiguracji głównej (np. sekcje build, test lub deploy).

Na przykład otwórz plik overlays > prod > deployment.yaml. Zwróć uwagę, że liczba replik aplikacji jest ustawiona na 3, co zastępuje konfigurację podstawową.

  1. Otwórz plik app > main.go w oknie IDE. To jest prosta aplikacja golang, która zapisuje ciąg znaków w funkcji stdout co sekundę.
  2. Zwróć uwagę, że aplikacja wyświetla też nazwę poda Kubernetes, w którym została uruchomiona.

Wyświetlanie pliku Dockerfile

  1. Otwórz plik app > Dockerfile w panelu IDE. Ten plik zawiera sekwencję dyrektyw służących do kompilowania obrazu kontenera aplikacji dla pliku main.go. Odwołuje się do niego plik skaffold.yaml najwyższego poziomu.

7. Tworzenie za pomocą Skaffold

Konfigurowanie środowiska Kubernetes

  1. Aby sprawdzić, czy lokalny klaster Kubernetes działa i jest skonfigurowany, uruchom to polecenie:
minikube start

Może to potrwać kilka minut. Jeśli klaster został uruchomiony, powinieneś zobaczyć taki komunikat:

Done! kubectl is now configured to use "minikube" cluster and "default" namespace by default
  1. Uruchom to polecenie, aby utworzyć przestrzenie nazw Kubernetes dla dev, staging i prod:
kubectl apply -f namespaces.yaml

Powinny się wyświetlić te dane wyjściowe:

namespace/dev created
namespace/staging created
namespace/prod created

Korzystanie ze Skaffold na potrzeby programowania lokalnego

  1. Uruchom to polecenie, aby utworzyć aplikację i wdrożyć ją w lokalnym klastrze Kubernetes w Cloud Shell:
skaffold dev

Powinien rozpocząć się proces kompilacji kontenera aplikacji, który może potrwać minutę, a potem dane wyjściowe aplikacji powinny powtarzać się co sekundę:

[skaffold-kustomize] Hello world from pod skaffold-kustomize-dev-xxxxxxxxx-xxxxx

Pamiętaj, że dokładna nazwa podgrupy będzie się różnić od podanych powyżej ogólnych wyników.

Wprowadzanie zmian w aplikacji

Aplikacja działa już w lokalnym klastrze Kubernetes, więc możesz wprowadzić zmiany w kodzie. Skaffold automatycznie ponownie skompiluje i wdroży aplikację w klastrze.

  1. Otwórz plik app > main.go w panelu IDE i zmień ciąg wyjściowy:
"Hello world from pod %s!\n"

do:

"Hello Skaffold world from pod %s!\n"

Po wprowadzeniu zmiany Skaffold powinien ponownie utworzyć obraz i wdrożyć go na klastrze. Zmiana w wyjściu powinna być widoczna w oknie terminala.

  1. Teraz w pliku „app > main.go” w panelu IDE zmień wiersz:
time.Sleep(time.Second * 1)

to

time.Sleep(time.Second * 10)

Powinna się ponownie skompilować i wdrożyć aplikacja, a wiersz wyjściowy powinien pojawiać się co 10 sekund.

Wprowadzanie zmian w konfiguracji Kubernetes

Następnie wprowadzisz zmianę w konfiguracji Kubernetes, a kolejna Skaffold zostanie automatycznie wdrożona ponownie.

  1. Otwórz plik base > deployment.yaml w IDE i zmień wiersz:
replicas: 1

to

replicas: 2

Po ponownym wdrożeniu aplikacji powinny działać 2 pody – każdy z inną nazwą.

  1. Teraz zmień ten sam wiersz w pliku base > deployment.yaml na:
replicas: 1

Jeden z podów powinien być usunięty z usługi, aby pozostał tylko jeden.

  1. Na koniec naciśnij Ctrl-C w oknie terminala, aby zatrzymać lokalny proces programowania Skaffold.

Tworzenie wersji

Następnie utwórz wersję, budując obraz wersji i wdrażając go w klastrze.

  1. Aby utworzyć wersję, uruchom to polecenie:
skaffold build --file-output artifacts.json

To polecenie skompiluje ostateczny obraz (jeśli to konieczne) i wyśle szczegóły wersji do pliku artifacts.json.

Jeśli do wdrożenia w klastrach chcesz użyć narzędzia takiego jak Cloud Deploy, ten plik zawiera informacje o wersji. Oznacza to, że artefaktów nie można zmienić na drodze do życia.

  1. Aby wyświetlić zawartość pliku artifacts.json, uruchom to polecenie:
cat artifacts.json | jq

Pamiętaj, że plik zawiera odwołanie do obrazu, który zostanie użyty w ostatecznym wdrożeniu.

Wdrażanie w środowisku testowym

  1. Aby wdrożyć wersję za pomocą profilu staging, uruchom to polecenie:
skaffold deploy --profile staging --build-artifacts artifacts.json --tail

Po zakończeniu wdrażania powinny pojawić się dane wyjściowe z 2 modułów podobne do tych:

[skaffold-kustomize] Hello world from pod skaffold-kustomize-staging-xxxxxxxxxx-xxxxx!
  1. Aby zatrzymać wyświetlanie danych wyjściowych Skaffold, naciśnij Ctrl+C w oknie terminala.
  2. Aby sprawdzić, czy aplikacja działa w klastrze, uruchom to polecenie:
kubectl get all --namespace staging

Powinny się pojawić 2 różne nazwy podów, ponieważ profil staging aplikacji określa, że w wdrożeniu powinny być 2 repliki.

Wdrażanie w gałęzi produkcyjnej

  1. Aby wdrożyć wersję za pomocą profilu prod, uruchom to polecenie:
skaffold deploy --profile prod --build-artifacts artifacts.json --tail

Po zakończeniu wdrażania powinny pojawić się dane wyjściowe z 3 modułów podobne do tych:

[skaffold-kustomize] Hello world from pod skaffold-kustomize-prod-xxxxxxxxxx-xxxxx!
  1. Naciśnij Ctrl+C w oknie terminala, aby zatrzymać dane wyjściowe Skaffold.

Powinny być widoczne 3 różne nazwy podów, ponieważ w profilu prod aplikacji powinny istnieć 3 repliki we wdrożeniu.

  1. Aby sprawdzić, czy aplikacja działa w klastrze, uruchom to polecenie:
kubectl get all --namespace prod

Powinny się wyświetlić dane wyjściowe zawierające wiersze podobne do tych, które pokazują wdrożenie produkcyjne:

NAME                                      READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/skaffold-kustomize-prod   3/3     3            3           16m

Powinny być też uruchomione 3 pody aplikacji.

NAME                                           READY   STATUS    RESTARTS   AGE
pod/skaffold-kustomize-prod-xxxxxxxxxx-xxxxx   1/1     Running   0          10m
pod/skaffold-kustomize-prod-xxxxxxxxxx-xxxxx   1/1     Running   0          10m
pod/skaffold-kustomize-prod-xxxxxxxxxx-xxxxx   1/1     Running   0          10m

8. Gratulacje!

Gratulacje! Ukończyłeś/ukończyłaś moduł laboratoryjny Understanding Skaffold i wiesz, jak skonfigurować Skaffold i używać go do lokalnego programowania i wdrażania aplikacji.

Co dalej:

Dowiedz się więcej o Skaffold:

Czyszczenie

  1. Uruchom to polecenie, aby wyłączyć klaster lokalny:
minikube delete