Informacje o Skaffold

1. Cele

Skaffold to narzędzie, które obsługuje przepływ pracy podczas kompilowania, przesyłania i wdrażania aplikacji. Skaffold umożliwia łatwe konfigurowanie lokalnego obszaru roboczego, usprawnianie wewnętrznej pętli programowania i integrację z innymi narzędziami, takimi jak Kustomize i Helm, co ułatwia zarządzanie plikami manifestu Kubernetes.

W tym samouczku poznasz podstawowe koncepcje Skaffold, użyjesz tego narzędzia do zautomatyzowania wewnętrznej pętli programowania, a następnie wdrożysz aplikację.

W ramach ćwiczenia:

  • Konfigurowanie i włączanie Skaffold na potrzeby lokalnego programowania
  • Tworzenie i uruchamianie prostej aplikacji w Go
  • Zarządzanie lokalnym wdrażaniem aplikacji za pomocą Skaffold
  • Renderowanie plików manifestu i wdrażanie aplikacji

2. Zanim rozpoczniesz

Przygotowywanie obszaru roboczego

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

Zezwalaj na pliki cookie innych firm. Kliknij „Witryna nie działa”, a potem „Zezwól na pliki cookie”.

7b702066a2135a3d.png

3394f82132eb4fd4.png

  1. Jeśli jeszcze tego nie zrobisz, 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ć bieżący katalog jako obszar roboczy Cloud Shell, uruchom to polecenie:
cloudshell workspace .

Przygotowywanie projektu

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

3. Wprowadzenie do Skaffold

  1. Uruchom to polecenie, aby utworzyć plik konfiguracyjny Skaffold najwyższego poziomu skaffold.yaml:
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 okienku IDE. Jest to plik konfiguracji najwyższego poziomu, który definiuje potok Skaffold.

Zwróć uwagę na format YAML podobny do Kubernetes i te sekcje w pliku YAML:

  • build
  • deploy
  • profiles

Te sekcje określają sposób tworzenia i wdrażania aplikacji, a także profile dla każdego środowiska docelowego.

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

4. Kompilacja

Sekcja build zawiera konfigurację, która określa sposób tworzenia aplikacji. W tym przypadku możesz zobaczyć konfigurację obsługi tagów git oraz sekcję artifacts, która definiuje obrazy kontenerów składające się na aplikację.

W tej sekcji znajdziesz też odniesienie do Dockerfile, które należy wykorzystać do tworzenia obrazów. Skaffold obsługuje też inne narzędzia do kompilacji, takie jak Jib, Maven, Gradle, natywne dla chmury Buildpacks, Bazel i 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 domyślnego wdrożenia, które konfiguruje Skaffold do korzystania z narzędzia Kustomize.

Narzędzie Kustomize umożliwia generowanie manifestów Kubernetes przez łączenie zestawu typowych plików YAML komponentów (w katalogu base) z co najmniej jedną „nakładką”, która zwykle odpowiada co najmniej jednemu miejscu docelowemu wdrożenia – zwykle dev, test, stagingproduction lub podobnym.

W tym przykładzie widać 2 nakładki dla 3 elementów docelowych: dev, staging i prod. Nakładka dev będzie używana podczas lokalnego programowania, a nakładki staging i prod podczas wdrażania za pomocą narzędzia Skaffold.

6. Profile

Sekcja profiles zawiera konfigurację, która określa konfiguracje kompilacji, testowania i wdrażania w różnych kontekstach. Różne konteksty to zwykle różne środowiska w potoku wdrażania aplikacji, np. 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 środowiska docelowego, bez powtarzania konfiguracji standardowej.

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

Aby to zilustrować, otwórz plik overlays > prod > deployment.yaml. Zwróć uwagę, że liczba replik aplikacji jest tutaj skonfigurowana na 3, co zastępuje konfigurację podstawową.

  1. Otwórz plik app > main.go w okienku IDE. Jest to prosta aplikacja w języku Go, która co sekundę zapisuje ciąg znaków w stdout.
  2. Zwróć uwagę, że aplikacja wyświetla też nazwę poda Kubernetes, w którym jest uruchomiona.

Wyświetlanie pliku Dockerfile

  1. Otwórz plik app > Dockerfile w okienku IDE. Ten plik zawiera sekwencję dyrektyw do skompilowania obrazu kontenera aplikacji dla pliku main.go i jest do niego odwoływany w pliku skaffold.yaml najwyższego poziomu.

7. Programowanie za pomocą Skaffold

Konfigurowanie środowiska Kubernetes

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

Może to potrwać kilka minut. Jeśli klaster został uruchomiony, zobaczysz te dane wyjściowe:

Done! kubectl is now configured to use "minikube" cluster and "default" namespace by default
  1. Aby utworzyć przestrzenie nazw Kubernetes dla dev, stagingprod, uruchom to polecenie:
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 działającym w Cloud Shell:
skaffold dev

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

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

Pamiętaj, że dokładna nazwa poda będzie się różnić od ogólnego wyniku podanego powyżej.

Wprowadzanie zmian w aplikacji

Aplikacja działa już w lokalnym klastrze Kubernetes. Możesz wprowadzać zmiany w kodzie, a 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 ponownie skompiluje obraz i wdroży go w klastrze. Zmiana w danych wyjściowych będzie widoczna w oknie terminala.

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

do

time.Sleep(time.Second * 10)

Aplikacja powinna zostać ponownie skompilowana i wdrożona, a wiersz danych wyjściowych będzie się pojawiać co 10 sekund.

Wprowadzanie zmian w konfiguracji Kubernetes

Następnie wprowadzisz zmianę w konfiguracji Kubernetes, a Skaffold ponownie automatycznie wdroży aplikację.

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

do

replicas: 2

Po ponownym wdrożeniu aplikacji powinny być uruchomione 2 pody – każdy z inną nazwą.

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

Jeden z podów powinien zostać wyłączony z usługi, tak aby pozostał tylko jeden.

  1. Na koniec naciśnij Ctrl-C w oknie terminala, aby zatrzymać lokalne środowisko programistyczne Skaffold.

Wydawanie wersji

Następnie utworzysz 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 utworzy ostateczny obraz (w razie potrzeby) i zapisze szczegóły wersji w pliku artifacts.json.

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

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

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

Wdrażanie w środowisku przejściowym

  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 podów podobne do tych:

[skaffold-kustomize] Hello world from pod skaffold-kustomize-staging-xxxxxxxxxx-xxxxx!
  1. Aby zatrzymać dane wyjściowe 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 być widoczne 2 różne nazwy poda, ponieważ profil staging aplikacji określa, że w przypadku wdrożenia powinny być 2 repliki.

Wdrażanie w środowisku produkcyjnym

  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 podów podobne do tych:

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

Powinny być widoczne 3 różne nazwy podów, ponieważ profil prod aplikacji określa, że w przypadku wdrożenia powinny być 3 repliki.

  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 w środowisku produkcyjnym:

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

Powinny być też widoczne 3 uruchomione 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ńczono Understanding Skaffold ćwiczenie i wiesz już, jak konfigurować i używać Skaffold do lokalnego programowania i wdrażania aplikacji.

Co dalej?

Dowiedz się więcej o Skaffold:

Czyszczenie

  1. Aby wyłączyć klaster lokalny, uruchom to polecenie:
minikube delete