Informacje o Skaffold

1. Cele

Skaffold to narzędzie obsługujące przepływ pracy związany z kompilowaniem, wypychaniem i wdrażaniem 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:

  • Skonfiguruj i włącz Skaffold na potrzeby lokalnego programowania
  • Tworzenie i uruchamianie prostej aplikacji golang
  • Zarządzanie wdrażaniem aplikacji lokalnych za pomocą Skaffold
  • Renderowanie plików manifestu i wdrażanie aplikacji

2. Zanim rozpoczniesz

Przygotowuję obszar roboczy

  1. Otwórz edytor Cloud Shell, korzystając z tego adresu URL:
https://shell.cloud.google.com

Zezwalaj na pliki cookie innych firm. Kliknij „Niedziałająca witryna”. a następnie „Zezwalaj na pliki cookie”.

7b702066a2135a3d.png

3394f82132eb4fd4.png

  1. Skopiuj źródło aplikacji w oknie terminala za pomocą następującego 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. Ustaw bieżący katalog w obszarze roboczym Cloud Shell, uruchamiając 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 ze Skaffold

  1. Uruchom to polecenie, aby utworzyć plik konfiguracji 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 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

Sekcje te określają sposób skompilowania i wdrożenia aplikacji oraz profile dla każdego miejsca docelowego wdrożenia.

Więcej informacji o pełnej liście etapów Skaffold znajdziesz w dokumentacji etapów potoku Skaffold.

4. Kompilacja

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

Oprócz tego w tej sekcji znajdziesz odniesienie do obiektu Dockerfile, który będzie służyć do tworzenia obrazów. Skaffold dodatkowo obsługuje inne narzędzia do kompilacji, takie jak Jib, Maven, Gradle, natywne Buildpacks oraz Bazel skrypty niestandardowe. Więcej informacji na temat tej konfiguracji znajdziesz w dokumentacji kompilacji Skaffold.

5. Wdróż

Sekcja deploy zawiera konfigurację określającą sposób wdrażania aplikacji. W takim przypadku możesz zobaczyć przykład wdrożenia domyślnego, w którym skonfigurowano Skaffold do korzystania z narzędzia Kustomize.

Narzędzie Kustomize udostępnia funkcję generowania plików manifestu Kubernetes przez połączenie zestawu popularnych plików YAML komponentu (w katalogu base) z co najmniej jedną „nakładką”. które zwykle odpowiadają co najmniej 1 celowi wdrożenia – zwykle dev, test, przejściowe i produkcyjne lub podobne.

W tym przykładzie zobaczysz 2 nakładki dla 3 środowisk docelowych: dev, staging i prod. Nakładka dev będzie używana podczas lokalnego programowania, a nakładki staging i prod do wdrażania przy użyciu 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 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 środowisk docelowych, bez konieczności powtarzania powtarzalnej konfiguracji.

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

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

  1. Otwórz plik app > main.go w panelu 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 pozwalających utworzyć obraz kontenera aplikacji dla pliku main.go. Odwołuje się on do niego w pliku skaffold.yaml najwyższego poziomu.

7. Programowanie za pomocą Skaffold

Konfigurowanie środowiska Kubernetes

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

Może to potrwać kilka minut. Jeśli klaster został uruchomiony, powinny wyświetlić się następujące dane wyjściowe:

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 skompilować 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 dane wyjściowe aplikacji powtarzane co sekundę:

[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ólnych danych wyjściowych podanych powyżej.

Wprowadzanie zmian w aplikacji

Teraz gdy aplikacja działa w lokalnym klastrze Kubernetes, możesz wprowadzić zmiany w kodzie, a Skaffold automatycznie skompiluje i ponownie 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 skompilować obraz i wdrożyć go w klastrze. Zmiana w danych wyjściowych powinna być widoczna w oknie terminala.

  1. Również w pliku „aplikacja > main.go&quot; W panelu IDE zmień wiersz:
time.Sleep(time.Second * 1)

 

time.Sleep(time.Second * 10)

Aplikacja powinna być ponownie skompilowana i wdrożona, a wiersz wyjściowy będzie wyświetlany 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

 

replicas: 2

Po ponownym wdrożeniu aplikacji powinny być uruchomione 2 pody – każdy z nich będzie miał inną nazwę.

  1. Teraz zmień ten sam wiersz w pliku base > deployment.yaml z powrotem 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ć programowanie lokalne Skaffold.

Wycinanie wydania

W kolejnym kroku utworzysz wersję, tworząc obraz wersji i wdrażając go w klastrze.

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

To polecenie skompiluje końcowy obraz (w razie potrzeby) i prześ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. Uruchom to polecenie, aby wyświetlić zawartość pliku artifacts.json:
cat artifacts.json | jq

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

Wdrażanie na etapie przejściowym

  1. Uruchom to polecenie, aby wdrożyć wersję przy użyciu profilu staging:
skaffold deploy --profile staging --build-artifacts artifacts.json --tail

Po zakończeniu wdrażania powinny wyświetlić się dane wyjściowe z 2 podów podobne do tych:

[skaffold-kustomize] Hello world from pod skaffold-kustomize-staging-xxxxxxxxxx-xxxxx!
  1. Naciśnij Ctrl+C w oknie terminala, aby zatrzymać dane wyjściowe Skaffold.
  2. Uruchom to polecenie, aby obserwować działanie aplikacji w klastrze:
kubectl get all --namespace staging

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

Wdrażanie w środowisku produkcyjnym

  1. Teraz uruchom to polecenie, aby wdrożyć wersję przy użyciu profilu prod:
skaffold deploy --profile prod --build-artifacts artifacts.json --tail

Po zakończeniu wdrażania powinny wyświetlić się dane wyjściowe z 3 podó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. Uruchom to polecenie, aby obserwować działanie aplikacji w klastrze:
kubectl get all --namespace prod

Powinny się wyświetlić dane wyjściowe zawierające wiersze podobne do tych poniżej obrazujące 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ż 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! Udało Ci się ukończyć moduł Understanding Skaffold. Wiesz już, jak skonfigurować Skaffold i używać go do lokalnego programowania i wdrażania aplikacji.

Co dalej:

Więcej informacji o Skaffold:

Czyszczenie

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