Dostęp do EODATA z Kubernetes Pods w NSIS Cloud przy użyciu boto3
Podczas korzystania z Kubernetes na chmurach NSIS, możesz wkrótce chcieć uzyskać dostęp do repozytorium obrazów satelitarnych EODATA.
Typowym przypadkiem użycia może być np. przetwarzanie zadań wsadowych, w którym kapsuły Kubernetes inicjują pobieranie obrazów EODATA w celu ich dalszego przetwarzania.
Ten artykuł wyjaśnia, w jaki sposób dostęp do EODATA jest zaimplementowany w OpenStack Magnum i wykorzystuje bibliotekę Pythona boto3 do uzyskiwania dostępu do EODATA z kapsuł Kubernetes. Docker i DockerHub posłużą do konteneryzacji i wdrożenia aplikacji uzyskującej dostęp do EODATA.
Wymagania wstępne
Nr 1 Konto
Potrzebne jest konto hostingowe NSIS z dostępem do interfejsu Horizon: https://horizon.cloudferro.com.
Nr 2 Klaster Kubernetes z dostępem do EODATA
Klaster Kubernetes w chmurze NSIS utworzony z opcją „EODATA access enabled”. Zapoznaj się z artykułem bazy wiedzy Jak utworzyć klaster Kubernetes przy użyciu NSIS OpenStack Magnum.
Nr 3 Znajomość kubectl
Dalsze instrukcje można znaleźć w Jak uzyskać dostęp do klastra Kubernetes po wdrożeniu przy użyciu Kubectl na NSIS OpenStack Magnum?.
Nr 4 Zrozumienie, w jaki sposób biblioteka boto3 uzyskuje dostęp do EODATA
Aby zrozumieć, jak uzyskać dostęp do EODATA bez Kubernetes, zapoznaj się z tym artykułem: Jak uzyskać dostęp do EODATA za pomocą boto3 na NSIS.
W szczególności artykuł Jak uzyskać poświadczenia używane do uzyskiwania dostępu do EODATA na maszynie wirtualnej w chmurze NSIS? wyjaśnia, jak uzyskać odpowiednie poświadczenia w zależności od używanej chmury.
Nr 5 Docker zainstalowany na komputerze
Zobacz Jak zainstalować i używać Dockera na Ubuntu 24.04.
Nr 6 Konto w DockerHub
Konto w serwisie DockerHub. Można korzystać z innych rejestrów obrazów, ale wykracza to poza zakres tego artykułu.
Co zamierzamy zrobić
Zapewnienie podstawowych informacji na temat korzystania z EODATA w Magnum
Przygotowanie obrazu Docker aplikacji uzyskującej dostęp do EODATA za pomocą boto3
Zbuduj obraz Docker i prześlij go do DockerHub
Uruchom kapsułę Kubernetes z kontenerem Docker i zweryfikuj dostęp do EODATA
Krok 1 Utworzenie klastra Kubernetes z EODATA
W chmurze NSIS każdy projekt ma domyślnie dołączoną sieć EODATA. Dlatego podczas tworzenia maszyny wirtualnej w OpenStack istnieje opcja dodania sieci EODATA do takiej maszyny wirtualnej.
Ponieważ klaster Kubernetes zbudowany na Magnum jest tworzony z tych samych maszyn wirtualnych, można zapewnić dostęp do EODATA każdemu węzłowi roboczemu w klastrze. Użyj poleceń Container Infra → Clusters → Create Cluster, aby rozpocząć tworzenie klastra i zaznacz pole „EODATA access enabled”.
Po zakończeniu tworzenia klastra sprawdź, czy węzły zostały prawidłowo podłączone do EODATA. Uruchom Compute → Instances i sprawdź, czy adres IP węzłów roboczych znajduje się w sieci EODATA. Na poniższym obrazku marine-study to nazwa klastra, podczas gdy eodata_00341_3 będzie nazwą sieci EODATA:
Dwa węzły robocze są połączone z siecią eodata_, podczas gdy węzeł główny nie jest. Dzieje się tak, ponieważ węzły główne zarządzają klastrem i nie mają dostępu do EODATA.
Oto jak można dostarczyć oprogramowanie do dostępu do EODATA za pomocą obrazu Docker.
Krok 2 Przygotowanie obrazu Docker aplikacji
boto3 to standardowa biblioteka Pythona do interakcji z obiektową pamięcią masową S3. Strategicznie rzecz biorąc, budowany kontener musi zawierać następujące elementy:
Zainstalowany Python i boto3
prawidłowe punkty końcowe dostępu do EODATA
Poświadczenia S3 umożliwiające dostęp do tego punktu końcowego.
Za pomocą poniższych trzech plików można „dockeryzować” aplikację, czyli zbudować jej obraz Docker i wysłać go do DockerHub:
konkretny plik Pythona z kodem aplikacji (w naszym przypadku app.py)
requirements.txt plik określający zależności dla biblioteki boto3
Plik Docker zawierający instrukcje dotyczące kompilacji kontenera
Dockerfile będzie oparty na Pythonie 3.8, zainstaluje boto3, a następnie uruchomi aplikację. W kodzie aplikacji pobieramy przykładowy obraz i każemy kontenerowi czekać 300 sekund. Potrzebujesz tylko kilku sekund, aby sprawdzić, czy obraz został poprawnie pobrany, więc pięć minut będzie więcej niż wystarczające. Utwórz następujące trzy pliki i umieść je w tym samym katalogu:
app.py
import boto3 import time access_key='anystring' secret_key='anystring' key='Landsat-5/TM/L1T/2011/11/11/LS05_RKSE_TM__GTC_1P_20111111T093819_20111111T093847_147313_0191_0025_1E1E/LS05_RKSE_TM__GTC_1P_20111111T093819_20111111T093847_147313_0191_0025_1E1E.BP.PNG' host='http://eodata.nsiscloud.polsa.gov.pl' s3=boto3.resource('s3',aws_access_key_id=access_key, aws_secret_access_key=secret_key, endpoint_url=host,) bucket=s3.Bucket('DIAS') bucket.download_file(key, '/app/image.png') time.sleep(300)
wymagania.txt
boto3==1.21.41
**Plik dokujący
# syntax=docker/dockerfile:1
FROM python:3.8-slim-buster
WORKDIR /app
COPY requirements.txt requirements.txt
RUN pip3 install -r requirements.txt
COPY . .
CMD [ "python3", "-m", "app.py"]
Krok 3 Zbuduj obraz aplikacji i wypchnij go do DockerHub
Aby utworzyć obraz Docker i wysłać go do DockerHub, uruchom następujące polecenie z katalogu, w którym znajdują się pliki (wybierz dowolną nazwę repozytorium):
Informacja
W zależności od konfiguracji może być konieczne poprzedzenie poleceń Docker sudo.
docker build -t <your-dockerhub-account>/<your-repository-name> .
Upewnij się, że jesteś zalogowany do DockerHub:
docker login -u <your-dockerhub-username> -p <your-dockerhub-password>
Następnie wypchnij obraz do DockerHub (repozytorium zostanie utworzone w DockerHub, jeśli nie istnieje):
docker push <your-dockerhub-account>/<your-repository-name>
Możesz zweryfikować, czy obraz został wypchnięty, sprawdzając go w internetowym GUI DockerHub.
Na tym obrazku repozytorium jest już publiczne. Jeśli jest prywatne, należy je upublicznić, klikając nazwę repozytorium, a następnie Ustawienia -> Ustawienia widoczności.
Krok 4 Wdrożenie aplikacji na platformie Kubernetes
Utworzyłeś i umieściłeś obraz w DockerHub i możesz wdrożyć aplikację jako kapsułę Kubernetes. Zwykle pisze się manifest YAML dla poda, ale tutaj, dla zwięzłości, wdraża się go za pomocą wiersza poleceń. Aby to zrobić, wpisz następujący fragment (utwórz dowolną nazwę pod):
kubectl run <your-pod-name> --image=<your-dockerhub-account>/<your-repository-name>
Uruchomienie powyższego polecenia powoduje wdrożenie poda, który uruchamia skonteneryzowaną aplikację Python. Ponieważ mamy 5 minut przed zakończeniem działania aplikacji (a tym samym również poda), możemy sprawdzić, czy obraz został pobrany za pomocą następującego polecenia:
$ kubectl exec --tty --stdin <your-pod-name> -- sh
To pozwoli ci wejść do powłoki kontenera w pod. Symbol wiersza poleceń zmieni się z $ na # w pod. Możesz sprawdzić, czy obraz został pobrany do kapsuły, przechodząc do katalogu /app i wyświetlając jego zawartość.
Co robić dalej
Postępując zgodnie ze wskazówkami zawartymi w tym artykule, można wdrożyć bardziej złożone scenariusze, na przykład używając wdrożeń lub zadań zamiast strąków.
W przypadku scenariuszy produkcyjnych warto umieścić poświadczenia S3 w sekrecie Kubernetes lub w rejestrze sekretów, takim jak HashiCorp Vault. Zobacz Instalacja HashiCorp Vault na NSIS Magnum.