Skip to main content
  • »
  • Dostęp do EODATA z Kubernetes Pods w NSIS Cloud przy użyciu boto3

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 InfraClustersCreate Cluster, aby rozpocząć tworzenie klastra i zaznacz pole „EODATA access enabled”.

../_images/marine-study-create21.png

Po zakończeniu tworzenia klastra sprawdź, czy węzły zostały prawidłowo podłączone do EODATA. Uruchom ComputeInstances 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:

../_images/marine_study1.png

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.

../_images/marine_study_public1.png

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ść.

../_images/downloaded_image1.png

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.