Skip to main content
  • »
  • KUBERNETES »
  • Instalacja i uruchomienie NooBaa na klastrze Kubernetes w środowisku NSIS Cloud z jedną chmurą

Instalacja i uruchomienie NooBaa na klastrze Kubernetes w środowisku NSIS Cloud z jedną chmurą

NooBaa umożliwia utworzenie uogólnionego zaplecza S3 na Kubernetesie. Takie zaplecze może być połączone z wieloma magazynami S3, np. w konfiguracji multi-cloud, co pozwala m.in. na skalowalność przestrzeni dyskowej lub wysoką dostępność, a także inne korzystne funkcje.

W tym artykule poznasz podstawy korzystania z NooBaa:

  • jak zainstalować go na klastrze Kubernetes,

  • jak utworzyć bucket NooBaa oparty o magazyn obiektowy S3 w chmurze NSIS Cloud,

  • jak utworzyć bucket NooBaa, który będzie replikował dane pomiędzy dwiema różnymi chmurami.

Co będziemy omawiać

  • Instalacja NooBaa w środowisku lokalnym,

  • Zastosowanie wstępnej konfiguracji,

  • Instalacja NooBaa na klastrze Kubernetes,

  • Utworzenie zaplecza (backing store) dla NooBaa,

  • Utworzenie klasy bucketów (Bucket Class),

  • Utworzenie ObjectBucketClaim,

  • Połączenie się z bucketem NooBaa przy pomocy S3cmd,

  • Testowanie dostępu do bucketa.

Wymagania wstępne

Nr 1 Hosting

Potrzebujesz konta hostingowego NSIS Cloud z interfejsem Horizon https://horizon.cloudferro.com.

Nr 2 Dostęp do klastra Kubernetes

Klastra w chmurze NSIS, na którym uruchomimy instalację NooBaa – postępuj zgodnie z wytycznymi w tym artykule Jak utworzyć klaster Kubernetes przy użyciu NSIS OpenStack Magnum.

Nr 3 Znajomość korzystania z Object Storage

Więcej informacji znajdziesz w Jak korzystać z Object Storage w NSIS

Tradycyjny termin OpenStack dla importowanych lub pobranych plików to Containers w głównym menu Object Store. W tym artykule będziemy używać terminu „bucket” dla kontenerów object storage, aby odróżnić je od kontenerów w sensie Docker/Kubernetes.

Nr 4 kubectl działający operacyjnie

Narzędzie CLI kubectl zainstalowane i wskazujące na twój klaster poprzez zmienną środowiskową KUBECONFIG – więcej informacji znajdziesz w Jak uzyskać dostęp do klastra Kubernetes po wdrożeniu przy użyciu Kubectl na NSIS OpenStack Magnum?.

Nr 5 Dostęp do prywatnych kluczy S3

Możesz również użyć dostępu do CLI OpenStack, aby wygenerować i odczytać prywatne klucze S3 – Jak wygenerować poświadczenia EC2 i zarządzać nimi na NSIS Cloud.

Nr 6 Znajomość narzędzia s3cmd do dostępu do Object Storage

Więcej informacji o s3cmd znajdziesz w Jak uzyskać dostęp do object storage z NSIS za pomocą s3cmd.

Instalacja NooBaa w środowisku lokalnym

Pierwszym krokiem do pracy z NooBaa jest jego instalacja w lokalnym systemie. Pobierzemy instalator, nadamy mu prawa do uruchamiania i przeniesiemy go do ścieżki systemowej:

curl -LO https://github.com/noobaa/noobaa-operator/releases/download/v5.11.0/noobaa-linux-v5.11.0
chmod +x noobaa-linux-v5.11.0
sudo mv noobaa-linux-v5.11.0 /usr/local/bin/noobaa

Podaj hasło użytkownika root, jeśli zostaniesz o to poproszony.

Po wykonaniu tej sekwencji kroków powinno być możliwe uruchomienie polecenia testowego:

noobaa help

Wynik będzie podobny do poniższego:

../_images/install_noobaa_locally1.png

Zastosowanie wstępnej konfiguracji

Będziemy musieli zastosować dodatkową konfigurację na klastrze Magnum, aby uniknąć wyjątku PodSecurityPolicy.

Na początek utwórz dedykowaną przestrzeń nazw dla artefaktów NooBaa:

kubectl create namespace noobaa

Następnie utwórz plik noobaa-rolebinding.yaml z następującą zawartością:

noobaa-rolebinding.yaml

apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: noobaa-rolebinding
  namespace: noobaa
subjects:
- apiGroup: rbac.authorization.k8s.io
  kind: Group
  name: system:serviceaccounts
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: magnum:podsecuritypolicy:privileged

i zastosuj poleceniem:

kubectl apply -f noobaa-rolebinding.yaml

Instalacja NooBaa na klastrze Kubernetes

NooBaa mamy już dostępny w naszym środowisku lokalnym, ale musimy go jeszcze zainstalować na klastrze Kubernetes. NooBaa użyje kontekstu KUBECONFIG poprzez kubectl (aktywowanego w Wymaganiu nr 4), więc zainstaluj NooBaa w dedykowanej przestrzeni nazw:

noobaa install -n noobaa

Po kilku minutach NooBaa zostanie zainstalowany i wyświetli dodatkowe informacje o konfiguracji. Sprawdź status NooBaa poleceniem:

noobaa status -n noobaa

Polecenie to wyświetla kilka przydatnych informacji o instalacji NooBaa, z których „najważniejsze fakty” znajdują się pod koniec statusu:

  • NooBaa utworzył domyślne zaplecze noobaa-default-backing-store, oparte na wolumenie blokowym utworzonym w OpenStack.

  • Dostarczono dane uwierzytelniające S3 do uzyskania dostępu do bucketa utworzonego z tym domyślnym zapleczem. Takie zaplecze oparte na wolumenach może być przydatne np. przy wykorzystaniu metody dostępu S3 do naszego block storage.

Na potrzeby tego artykułu nie będziemy korzystać z domyślnego zaplecza, lecz nauczymy się tworzyć nowe zaplecze oparte na chmurowym magazynie obiektowym S3. Taki układ można następnie łatwo rozszerzyć, tak aby korzystać z oddzielnych zapleczy w różnych chmurach.

Utworzenie zaplecza NooBaa (backing store)

Krok 1. Utworzenie bucketa Object Storage w chmurze NSIS

Teraz utwórz bucket Object Storage w chmurze NSIS:

  • przejdź do Horizon,

  • wybierz opcje Object Store –> Containers –> + Container, aby utworzyć nowy bucket.

../_images/create_object_container1.png

Bucket w chmurze NSIS muszą mieć unikalne nazwy. W naszym przypadku używamy nazwy noobaademo-fra-1, której będziemy używać w całym artykule.

Informacja

Musisz utworzyć bucket o innej nazwie i używać tej wygenerowanej nazwy w trakcie realizacji artykułu.

Krok 2. Skonfiguruj dane uwierzytelniające EC2

Jeśli masz poprawnie skonfigurowane klucze EC2 (S3) dla swojego Object Storage NSIS, odczytaj je poleceniem:

openstack ec2 credentials list

Krok 3. Utwórz nowe zaplecze NooBaa

Mając powyższe dane, możemy utworzyć nowe zaplecze NooBaa o nazwie custom-bs za pomocą poniższego polecenia. Upewnij się, że podmienisz access-key XXXXXX i secret-key YYYYYYY na swoje własne klucze EC2 oraz bucket na własną nazwę bucketa:

noobaa -n noobaa backingstore create s3-compatible custom-bs --endpoint https://s3.waw4-1.cloudferro.com --signature-version v4 --access-key XXXXXX \
--secret-key YYYYYYY --target-bucket noobaademo-waw4-1

Dane uwierzytelniające są przechowywane jako sekret Kubernetes w przestrzeni nazw. Możesz sprawdzić, czy zaplecze i sekret zostały utworzone poleceniami:

kubectl get backingstore -n noobaa
kubectl get secret -n noobaa

Nazewnictwo artefaktów będzie odpowiadało nazwie zaplecza, na wypadek gdyby w przestrzeni nazw było już więcej takich zasobów.

Przeglądając bucket w Horizon (backing store), możemy zobaczyć, że NooBaa utworzył w nim swoją strukturę folderów:

../_images/image2023-7-20_11-58-221.png

Krok 4. Utwórz Bucket Class

Gdy mamy już zaplecze, kolejnym krokiem jest utworzenie BucketClass (BC). Taki BucketClass służy jako wzorzec dla bucketów NooBaa: definiuje

  • które BackingStore będą używane przez te buckety,

  • jaką strategię rozmieszczania (placement) stosować w przypadku wielu zapleczy.

Strategia rozmieszczania może być Mirror lub Spread. Istnieje także obsługa wielu poziomów (tiers), gdzie dane są domyślnie zapisywane do pierwszego poziomu, a gdy się on zapełni – do kolejnego.

Aby utworzyć BucketClass, przygotuj plik custom-bc.yaml:

custom-bc.yaml

apiVersion: noobaa.io/v1alpha1
kind: BucketClass
metadata:
  labels:
    app: noobaa
  name: custom-bc
  namespace: noobaa
spec:
  placementPolicy:
    tiers:
    - backingStores:
      - custom-bs
      placement: Spread

Następnie zastosuj go poleceniem:

kubectl apply -f custom-bc.yaml

Krok 5. Utwórz ObjectBucketClaim

Ostatnim krokiem jest utworzenie ObjectBucketClaim. Ten bucket claim wykorzystuje storage class noobaa.noobaa.io, który został wdrożony wraz z NooBaa, i odwołuje się do bucket class custom-bc utworzonego w poprzednim kroku. Utwórz plik o nazwie custom-obc.yaml:

custom-obc.yaml

apiVersion: objectbucket.io/v1alpha1
kind: ObjectBucketClaim
metadata:
  name: custom-obc
  namespace: noobaa
spec:
  generateBucketName: my-bucket
  storageClassName: noobaa.noobaa.io
  additionalConfig:
    bucketclass: custom-bc

Następnie zastosuj go poleceniem:

kubectl apply -f custom-obc.yaml

Krok 6. Uzyskaj nazwę bucketa NooBaa

W wyniku, oprócz zasobu ObjectBucketClaim, utworzone zostały także configmap i sekret o tej samej nazwie custom-obc w NooBaa. Zobacz configmap poleceniem:

kubectl get configmap custom-obc -n noobaa -o yaml

Wynik będzie podobny do poniższego:

apiVersion: v1
data:
  BUCKET_HOST: s3.noobaa.svc
  BUCKET_NAME: my-bucket-7941ba4a-f57b-400a-b870-b337ec5284cf
  BUCKET_PORT: "443"
  BUCKET_REGION: ""
  BUCKET_SUBREGION: ""
kind: ConfigMap
metadata:
  ...

Widzimy nazwę bucketa NooBaa my-bucket-7941ba4a-f57b-400a-b870-b337ec5284cf, który jest powiązany z naszym „fizycznym” bucketem NSIS. Zapisz tę nazwę do późniejszego użycia.

Krok 7. Uzyskaj sekret dla bucketa NooBaa

Sekret jest również istotny, ponieważ musimy wyodrębnić z niego klucze S3 dla bucketa NooBaa. Klucz dostępowy i tajny są zakodowane base64 w sekrecie, możemy je odczytać poleceniami:

kubectl get secret custom-obc -n noobaa -o jsonpath='{.data.AWS_ACCESS_KEY_ID}' | base64 --decode
kubectl get secret custom-obc -n noobaa -o jsonpath='{.data.AWS_SECRET_ACCESS_KEY}' | base64 --decode

Zanotuj klucz dostępowy i tajny, ponieważ będziemy ich potrzebować w następnym kroku.

Krok 8. Połącz się z bucketem NooBaa przy użyciu S3cmd

NooBaa utworzył kilka usług podczas wdrożenia, co możemy zweryfikować poleceniem:

kubectl get services -n noobaa

Wynik powinien wyglądać podobnie do poniższego:

NAME           TYPE           CLUSTER-IP       EXTERNAL-IP      PORT(S)                                                    AGE
noobaa-db-pg   ClusterIP      10.254.158.217   <none>           5432/TCP                                                   3h24m
noobaa-mgmt    LoadBalancer   10.254.145.9     64.225.135.152   80:31841/TCP,443:31736/TCP,8445:32063/TCP,8446:32100/TCP   3h24m
s3             LoadBalancer   10.254.244.226   64.225.133.81    80:30948/TCP,443:31609/TCP,8444:30079/TCP,7004:31604/TCP   3h24m
sts            LoadBalancer   10.254.23.154    64.225.135.92    443:31374/TCP                                              3h24m

Usługa „s3” zapewnia endpoint, który można wykorzystać do dostępu do pamięci NooBaa (z tyłu obsługiwanej przez rzeczywiste storage w chmurze NSIS). W naszym przypadku ten endpoint to 64.225.133.81. Zastąp go wartością, którą uzyskasz z powyższego polecenia, realizując ten artykuł.

Krok 9. Skonfiguruj S3cmd do dostępu do NooBaa

Mając zarówno endpoint, jak i klucze, możemy skonfigurować s3cmd do dostępu do bucketa utworzonego przez NooBaa. Utwórz plik konfiguracyjny noobaa.s3cfg z następującą zawartością:

check_ssl_certificate = False
check_ssl_hostname = False
access_key = XXXXXX
secret_key = YYYYYY
host_base = 64.225.133.81
host_bucket = 64.225.133.81
use_https = True
verbosity = WARNING
signature_v2 = False

Następnie z tego samego katalogu zastosuj polecenie:

s3cmd --configure -c noobaa.s3cfg

Jeśli s3cmd nie jest zainstalowany w twoim systemie, zobacz Wymaganie nr 6.

Polecenie s3cmd pozwoli ci zatwierdzić Enterem każdą wartość z pliku konfiguracyjnego i zmienić ją w locie, jeśli różni się od domyślnej.

Pomijając te pytania w wyniku, efekt powinien być podobny do poniższego:

...
Success. Your access key and secret key worked fine :-)

Now verifying that encryption works...
Not configured. Never mind.

Save settings? [y/N] y
Configuration saved to 'noobaa.s3cfg'

Krok 10. Testowanie dostępu do bucketa

Możemy przesłać testowy plik do NooBaa. W naszym przypadku przesyłamy prosty plik tekstowy xyz.txt z treścią „xyz”, używając polecenia:

s3cmd put xyz.txt s3://my-bucket-7941ba4a-f57b-400a-b870-b337ec5284cf -c noobaa.s3cfg

Plik zostaje poprawnie przesłany:

upload: 'xyz.txt' -> 's3://my-bucket-7941ba4a-f57b-400a-b870-b337ec5284cf/xyz.txt'  [1 of 1]
 4 of 4   100% in    0s     5.67 B/s  done

Możemy także zobaczyć w Horizon, że do NooBaa zostało dodanych kilka nowych folderów i plików. Nie zobaczymy jednak pliku xyz.txt bezpośrednio tam, ponieważ NooBaa stosuje własne techniki fragmentacji danych.