1. Cele
Kustomize to narzędzie, które wprowadza możliwość dostosowania konfiguracji aplikacji bez użycia szablonów, co upraszcza korzystanie z tradycyjnych aplikacji. Jest ono dostępne jako samodzielne narzędzie i jest wbudowane w kubectl przez kubectl apply -k
zł i może być używane jako samodzielny interfejs wiersza poleceń. Więcej informacji znajdziesz na stronie kustomize.io.
W tym samouczku poznasz podstawowe pojęcia narzędzia Kustomize i wykorzystasz go do zarządzania wariantami w aplikacjach i środowiskach.
W ramach ćwiczenia:
- Użyj klienta wiersza poleceń kustomize
- Zastąp wspólne elementy
- Poprawianie większych struktur yaml
- Wykorzystuj wiele warstw nakładek
2. Przygotowuję obszar roboczy
- Otwórz edytor Cloud Shell, odwiedzając ten URL
https://ide.cloud.google.com
- W oknie terminala utwórz katalog roboczy na potrzeby tego samouczka
mkdir kustomize-lab
- Przejdź do katalogu i skonfiguruj obszar roboczy IDE
cd kustomize-lab && cloudshell workspace .
3. Używanie klienta wiersza poleceń kustomize
Moc kustomize wynika z możliwości nakładania i modyfikowania podstawowych plików yaml Kubernetes z użyciem niestandardowych wartości. Do wykonania tej kustomize potrzeba pliku podstawowego z instrukcjami, gdzie są pliki i co należy zastąpić. Narzędzie Kustomize wchodzi w skład ekosystemu Kubernetes i można je wykonywać za pomocą różnych metod.
W tej sekcji utworzysz podstawową konfigurację kustomize i przetworzysz pliki za pomocą niezależnego klienta wiersza poleceń kustomize.
- Na początek utworzysz folder, w którym będą przechowywane podstawowe pliki konfiguracji
mkdir -p chat-app/base
- Utwórz prosty element
deployment.yaml
Kubernetes w folderze podstawowym
cat <<EOF > chat-app/base/deployment.yaml
kind: Deployment
apiVersion: apps/v1
metadata:
name: app
spec:
template:
`metadata:`
`name: chat-app`
`spec:`
`containers:`
`- name: chat-app`
`image: chat-app-image`
EOF
- Utwórz podstawowy element
kustomization.yaml
Kustomize szuka jako punktu wejścia pliku o nazwie kustomization.yaml. Ten plik zawiera odwołania do różnych plików podstawowych i zastąpień, a także konkretnych wartości zastąpień.
Utwórz plik kustomization.yaml
, który odwołuje się do deployment.yaml
jako zasobów podstawowych.
cat <<EOF > chat-app/base/kustomization.yaml
bases:
- deployment.yaml
EOF
- Uruchom polecenie kustomize w folderze podstawowym. Spowoduje to wyświetlenie plików YAML wdrożenia bez żadnych zmian, co jest normalne, ponieważ nie zostały jeszcze uwzględnione żadne odmiany.
kustomize build chat-app/base
Możesz połączyć tego samodzielnego klienta z klientem kubectl, aby zastosować dane wyjściowe bezpośrednio zgodnie z poniższym przykładem. Spowoduje to przesłanie strumieniowe danych wyjściowych polecenia Build bezpośrednio do polecenia kubectl apply.
(Nie wykonywać - tylko w celach informacyjnych)
kustomize build chat-app/base | kubectl apply -f -
Ta technika jest przydatna, jeśli potrzebna jest konkretna wersja klienta kustomize.
Komponent kustomize można też wykonać za pomocą narzędzi zintegrowanych w samym narzędziu kubectl. Tak jak w tym przykładzie.
(Nie wykonywać - tylko w celach informacyjnych)
kubectl apply -k chat-app/base
4. Zastępowanie wspólnych elementów
Po skonfigurowaniu obszaru roboczego i sprawdzeniu, że kustomize działa, nadszedł czas na zastąpienie niektórych wartości podstawowych.
Obrazy, przestrzenie nazw i etykiety są bardzo często dostosowywane do poszczególnych aplikacji i środowisk. Ponieważ są one często zmieniane, Kustomize umożliwia zadeklarowanie ich bezpośrednio w kustomize.yaml
, co eliminuje konieczność tworzenia wielu poprawek na potrzeby tych typowych scenariuszy.
Ta metoda jest często używana do tworzenia konkretnego wystąpienia szablonu. Jeden zbiór bazowy zasobów może być teraz używany na potrzeby wielu implementacji, wystarczy zmienić nazwę i przestrzeń nazw.
W tym przykładzie dodasz przestrzeń nazw, prefiks nazwy i dodasz kilka etykiet do elementu kustomization.yaml
.
- Zaktualizuj plik
kustomization.yaml
, aby zawierał wspólne etykiety i przestrzenie nazw.
Skopiuj i wykonaj w terminalu te polecenia:
cat <<EOF > chat-app/base/kustomization.yaml
bases:
- deployment.yaml
namespace: my-namespace
nameprefix: my-
commonLabels:
app: my-app
EOF
- Wykonaj polecenie kompilacji
Wykonanie kompilacji na tym etapie pokazuje, że wynikowy plik YAML zawiera teraz przestrzeń nazw, etykiety i nazwy z prefiksami zarówno w definicjach usługi, jak i wdrożenia.
kustomize build chat-app/base
Zwróć uwagę, że dane wyjściowe zawierają etykiety i przestrzenie nazw, których nie ma w pliku YAML wdrożenia. Zwróć też uwagę, jak zmieniła się nazwa z chat-app
na my-chat-app
(Dane wyjściowe nie są kopiowane)
kind: Deployment
metadata:
labels:
`app: my-app`
name: my-chat-app
namespace: my-namespace
5. Poprawianie większych struktur yaml
Kustomize umożliwia też stosowanie poprawek, które nakładają się na zasoby podstawowe. Ta technika jest często wykorzystywana do zapewnienia zmienności między aplikacjami i środowiskami.
W tym kroku utworzysz odmiany środowiska dla pojedynczej aplikacji korzystającej z tych samych zasobów podstawowych.
- Zacznij od utworzenia folderów dla różnych środowisk
mkdir -p chat-app/dev
mkdir -p chat-app/prod
- Zapisz poprawkę sceny za pomocą tego polecenia
cat <<EOF > chat-app/dev/deployment.yaml
kind: Deployment
apiVersion: apps/v1
metadata:
name: app
spec:
template:
`spec:`
`containers:`
`- name: chat-app`
`env:`
`- name: ENVIRONMENT`
`value: dev`
EOF
- Teraz zapisz poprawkę prod za pomocą tego polecenia
cat <<EOF > chat-app/prod/deployment.yaml
kind: Deployment
apiVersion: apps/v1
metadata:
name: app
spec:
template:
`spec:`
`containers:`
`- name: chat-app`
`env:`
`- name: ENVIRONMENT`
`value: prod`
EOF
Zwróć uwagę, że powyższe poprawki nie zawierają nazwy obrazu kontenera. Ta wartość jest podana w pliku base/deployment.yaml utworzonym w poprzednim kroku. Poprawki zawierają jednak unikalne zmienne środowiskowe dla wersji dev i prod.
- Wdróż pliki kustomize YAML dla katalogu podstawowego
Zmodyfikuj podstawowy plik kustomization.yaml, usuwając przestrzeń nazw i prefiks nazwy, ponieważ jest to tylko podstawowa konfiguracja bez żadnych zmian. Te pola zostaną za chwilę przeniesione do plików środowiska.
cat <<EOF > chat-app/base/kustomization.yaml
bases:
- deployment.yaml
commonLabels:
app: chat-app
EOF
- Wdróż pliki kustomize YAML dla katalogu deweloperskiego
Teraz zaimplementuj odmiany dla instrukcji dev i prod, wykonując w terminalu te polecenia.
cat <<EOF > chat-app/dev/kustomization.yaml
bases:
- ../base
namespace: dev
nameprefix: dev-
commonLabels:
env: dev
patches:
- deployment.yaml
EOF
Zwróć uwagę na dodanie w pliku sekcji patches
:. Oznacza to, że kustomize powinno nakładać te pliki na podstawowe zasoby.
- Wdróż pliki kustomize YAML dla katalogu prod
cat <<EOF > chat-app/prod/kustomization.yaml
bases:
- ../base
namespace: prod
nameprefix: prod-
commonLabels:
env: prod
patches:
- deployment.yaml
EOF
- Uruchom kustomize, aby scalić pliki
Po utworzeniu plików podstawowych i środowiska możesz wykonać proces kustomize, aby zainstalować poprawki plików podstawowych.
Aby zobaczyć wynik po scaleniu, uruchom to polecenie dla programistów.
kustomize build chat-app/dev
Zwróć uwagę, że dane wyjściowe zawierają scalone wyniki, takie jak etykiety z konfiguracji podstawowej i deweloperskiej, a także nazwę obrazu kontenera z elementu podstawowego i zmienną środowiskową z folderów deweloperskich.
6. Wykorzystanie wielu warstw nakładek
Wiele organizacji ma zespół, który pomaga zespołom zajmującym się aplikacjami i zarządzaniem platformą. Często te zespoły będą chciały dołączyć określone szczegóły, które należy uwzględnić we wszystkich aplikacjach we wszystkich środowiskach. Na przykład może to być agent logowania.
W tym przykładzie utworzysz folder i zasoby shared-kustomize
, które będą uwzględniane przez wszystkie aplikacje niezależnie od tego, w którym środowisku zostaną wdrożone.
- Utwórz folder shared-kustomize
mkdir shared-kustomize
- Utwórz prosty plik
deployment.yaml
w folderze udostępnionym
cat <<EOF > shared-kustomize/deployment.yaml
kind: Deployment
apiVersion: apps/v1
metadata:
name: app
spec:
template:
`spec:`
`containers:`
`- name: logging-agent`
`image: logging-agent-image`
EOF
- utworzyć plik kustomization.yaml w udostępnionym folderze,
cat <<EOF > shared-kustomize/kustomization.yaml
bases:
- deployment.yaml
EOF
- Odwoływanie się do folderu shared-kustomize z aplikacji
Ponieważ chcesz, aby folder shared-kustomize
był bazą dla wszystkich Twoich aplikacji, musisz zaktualizować folder chat-app/base/kustomization.yaml
, aby używał shared-kustomize
jako podstawy. Następnie dodaj poprawkę do pliku Deployment.yaml. Foldery środowiska zostaną następnie poprawione.
Skopiuj i wykonaj w terminalu te polecenia:
cat <<EOF > chat-app/base/kustomization.yaml
bases:
- ../../shared-kustomize
commonLabels:
app: chat-app
patches:
- deployment.yaml
EOF
- Uruchom kustomize i wyświetl scalone wyniki dla wersji dev
kustomize build chat-app/dev
Pamiętaj, że dane wyjściowe zawierają scalone wyniki z aplikacji, środowiska aplikacji i folderów shared-kustomize
. W szczególności w sekcji kontenerów zobaczysz wartości ze wszystkich trzech lokalizacji.
(dane wyjściowe nie są kopiowane)
<pre>
`containers:`
`- env:`
`- name: ENVIRONMENT`
`value: dev`
`name: chat-app`
`- image: image`
`name: app`
`- image: logging-agent-image`
`name: logging-agent`
</pre>