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.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ą.
Poruszanie się po kodzie źródłowym aplikacji.
- Otwórz plik
app > main.go
w panelu IDE. To jest prosta aplikacja golang, która zapisuje ciąg znaków w funkcjistdout
co 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 > Dockerfile
w panelu IDE. Ten plik zawiera sekwencję dyrektyw pozwalających utworzyć obraz kontenera aplikacji dla plikumain.go
. Odwołuje się on do niego w plikuskaffold.yaml
najwyż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
,staging
iprod
:
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.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.
- 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.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ę.
- 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.
- 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.
- 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