Informacje o tym ćwiczeniu (w Codelabs)
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
- 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”.


- Skopiuj źródło aplikacji w oknie terminala za pomocą następującego polecenia:
git clone https://github.com/GoogleCloudPlatform/software-delivery-workshop.git
- Przejdź do katalogu sklonowanego repozytorium:
cd software-delivery-workshop/labs/understanding-skaffold/getting-started
- Ustaw bieżący katalog w obszarze roboczym Cloud Shell, uruchamiając to polecenie:
cloudshell workspace .
Przygotowuję projekt
- 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
- 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
- Otwórz plik
skaffold.yamlw 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:
builddeployprofiles
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ą.
Poruszanie się po kodzie źródłowym aplikacji.
- Otwórz plik
app > main.gow panelu IDE. To jest prosta aplikacja golang, która zapisuje ciąg znaków w funkcjistdoutco sekundę. - Zwróć uwagę, że aplikacja wyświetla też nazwę poda Kubernetes, w którym została uruchomiona.
Wyświetlanie pliku Dockerfile
- Otwórz plik
app > Dockerfilew panelu IDE. Ten plik zawiera sekwencję dyrektyw pozwalających utworzyć obraz kontenera aplikacji dla plikumain.go. Odwołuje się on do niego w plikuskaffold.yamlnajwyższego poziomu.
7. Programowanie za pomocą Skaffold
Konfigurowanie środowiska Kubernetes
- 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
- Uruchom to polecenie, aby utworzyć przestrzenie nazw Kubernetes dla
dev,stagingiprod:
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
- 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.
- Otwórz plik
app > main.gow 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.
- Również w pliku „aplikacja > main.go" 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.
- Otwórz plik
base > deployment.yamlw 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ę.
- Teraz zmień ten sam wiersz w pliku
base > deployment.yamlz powrotem na:
replicas: 1
Jeden z podów powinien być usunięty z usługi, aby pozostał tylko jeden.
- Na koniec naciśnij
Ctrl-Cw 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.
- 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.
- 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
- 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!
- Naciśnij Ctrl+C w oknie terminala, aby zatrzymać dane wyjściowe Skaffold.
- 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
- 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!
- 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.
- 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
- Uruchom to polecenie, aby wyłączyć klaster lokalny:
minikube delete