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
- 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”.


- 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
- Przejdź do katalogu sklonowanego repozytorium:
cd software-delivery-workshop/labs/understanding-skaffold/getting-started
- Aby ustawić bieżący katalog jako obszar roboczy Cloud Shell, uruchom to polecenie:
cloudshell workspace .
Przygotowywanie projektu
- Sprawdź, czy projekt Google Cloud jest prawidłowo skonfigurowany, uruchamiając to polecenie:
gcloud config set project {{project-id}}
3. Wprowadzenie do Skaffold
- 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
- Otwórz plik
skaffold.yamlw 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:
builddeployprofiles
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, staging i production 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ą.
poruszanie się po kodzie źródłowym aplikacji,
- Otwórz plik
app > main.gow okienku IDE. Jest to prosta aplikacja w języku Go, która co sekundę zapisuje ciąg znaków wstdout. - Zwróć uwagę, że aplikacja wyświetla też nazwę poda Kubernetes, w którym jest uruchomiona.
Wyświetlanie pliku Dockerfile
- Otwórz plik
app > Dockerfilew okienku IDE. Ten plik zawiera sekwencję dyrektyw do skompilowania obrazu kontenera aplikacji dla plikumain.goi jest do niego odwoływany w plikuskaffold.yamlnajwyższego poziomu.
7. Programowanie za pomocą Skaffold
Konfigurowanie środowiska Kubernetes
- 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
- Aby utworzyć przestrzenie nazw Kubernetes dla
dev,stagingiprod, 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
- 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.
- 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 ponownie skompiluje obraz i wdroży go w klastrze. Zmiana w danych wyjściowych będzie widoczna w oknie terminala.
- 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ę.
- Otwórz plik
base > deployment.yamlw IDE i zmień wiersz:
replicas: 1
do
replicas: 2
Po ponownym wdrożeniu aplikacji powinny być uruchomione 2 pody – każdy z inną nazwą.
- Teraz zmień ten sam wiersz w pliku
base > deployment.yamlz powrotem na:
replicas: 1
Jeden z podów powinien zostać wyłączony z usługi, tak aby pozostał tylko jeden.
- Na koniec naciśnij
Ctrl-Cw 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.
- 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.
- 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
- 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!
- Aby zatrzymać dane wyjściowe Skaffold, naciśnij Ctrl-C w oknie terminala.
- 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
- 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!
- 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.
- 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
- Aby wyłączyć klaster lokalny, uruchom to polecenie:
minikube delete