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.