W projekcie, w którym mieliśmy problem z Ingress także popełniliśmy kilka innych pomniejszych „błędów” które utrudniały nam współpracę pomiędzy dwoma różnymi zespołami w Europie. Jeden z problemów polegał na tym, iż klient chciał wdrażać rozwiązanie pod zupełnie innym namespace
niż my. Co gorsza, za każdym razem, kiedy przekazywaliśmy nasze rozwiązanie do klienta, ktoś z nas zamieniał abc na cba we wszystkich plikach Yaml – wydajne? nie wydaje mnie się!
Dosłownie mówiąc mając taką definicję:
apiVersion: v1 namespace: abc kind: Service metadata: name: dumpster-svc labels: app: boss spec: type: ClusterIP selector: app: boss ports: - name: http port: 80 targetPort: 8080
Zamienialiśmy ją na:
apiVersion: v1 namespace: cba kind: Service metadata: name: dumpster-svc labels: app: boss spec: type: ClusterIP selector: app: boss ports: - name: http port: 80 targetPort: 8080
Proces był “automatyzowany” jednak podczas wsparcia i próbowania rozwiązania konfliktów u klienta nie każdy wiedział o tej zamianie namespace
. Przekazywanie plików więc zawsze stanowiło „problem”. Nawet CI/CD tutaj by nie pomógł poprzez zmianę namespace na odpowiednie wartości gdyż wciąż przy wsparciu technicznym trzeba by było pamiętać o aktualizacji tej wartości.
Nagle stanęliśmy przez beznadziejnie błahym problemem, który został wprowadzony na początku projektu w celu uchronienia zespołu przed błędnym wgrywaniem aplikacji w nieodpowiednią przestrzeń nazw. Nagle konwencja którą wprowadziliśmy by nam ułatwiła stała się piątym kołem u wozu :)
Rozwiązanie problemu było bardzo proste – wystarczyło usunąć namespace
z deklaracji w yaml i przejść na parametr -n
(--namespace
) w poleceniu kubectl apply
. Umożliwiło nam to przekazywanie plików pomiędzy dwoma zespołami bez dodatkowej pracy – bonusowo dostaliśmy dużo prostszą wymianę plików w trakcie wsparcia.
Tutaj warto zaznaczyć, że parametr --namespace
nie jest wymagany – jeżeli go nie podamy, apply
zadziała na przestrzeni nazw na którą aktualnie wskazuje nasz kontekst w kubectl
. namespace
w danym kontekście możemy zmienić poleceniem:
kubectl config set-context --current --namespace=cba
Zamiast “skomplikowanego” polecenia, możemy skorzystać z narzędzia kubens – które pozwoli nam zmienić namespace
za pomocą polecenia:
kubens cba
prościej się już chybe nia da ;)
Dobrego warto polecic ‚kubectx’ jeśli chcesz zminimalizować użycie —context przy wielu klastrach, z których się korzysta.
Comments are closed.