Skip to main content

Jak utworzyć klaster Kubernetes przy użyciu Terraform na NSIS

W tym artykule pokażemy użycie Terraform do wdrożenia klastra OpenStack Magnum Kubernetes w chmurze NSIS.

Wymagania wstępne

Nr 1 Konto hostingowe

Jest wymagane aktywne konto NSIS https://NSIS-Cloudcloud-innovation.cloudferro.com/login.

Nr 2 Aktywna sesja CLI z OpenStackClient dla Linux

Wymagany jest zainstalowany OpenStack CLI i odpowiednie środowisko wirtualne Python. Wskazówki można znaleźć w artykule

Jak zainstalować OpenStackClient dla systemu Linux na NSIS

Przedstawia on, jak zainstalować środowisko Python, utworzyć i aktywować środowisko wirtualne, a następnie połączyć się z chmurą, pobierając i aktywując odpowiedni plik RC z chmury NSIS.

Nr 3 Połączenie z chmurą za pomocą pliku RC

Kolejny artykuł, Jak aktywować dostęp OpenStack CLI do chmury NSIS przy użyciu uwierzytelniania dwuskładnikowego , dotyczy łączenia się z chmurą i obejmuje jedną z procedur uwierzytelniania jedno- lub dwuskładnikowego, które są włączone na koncie. Artykuł omawie również wszystkie główne platformy: Linux, MacOS i Windows.

Będziesz używać zarówno wirtualnego środowiska Python, jak i pobranego pliku RC po zainstalowaniu Terraform.

Nr 4 Znajomość tworzenia klastrów Kubernetes

Znajomość tworzenia klastrów Kubernetes w standardowy sposób, na przykład za pomocą Horizon lub OpenStack CLI:

Jak utworzyć klaster Kubernetes przy użyciu NSIS OpenStack Magnum

Jak korzystać z interfejsu wiersza poleceń dla klastrów Kubernetes w NSIS OpenStack Magnum

Nr 5 Działający Terraform

Zainstaluj Terraform lokalnie lub na maszynie wirtualnej w chmurze. Wskazówki dotyczące instalacji wraz z dalszymi informacjami można znaleźć w artykule:

Generowanie i autoryzacja Terraform przy użyciu użytkownika Keycloak na NSIS Cloud

Po zakończeniu pracy z tym artykułem będziesz mieć dostęp do chmury za pośrednictwem aktywnego polecenia openstack. Ponadto, specjalne zmienne środowiskowe (env) (OS_USERNAME, OS_PASSWORD, OS_AUTH_URL i inne) zostaną skonfigurowane tak, by różne programy mogły z nich korzystać – głównym celem jest tutaj Terraform .

Definiowanie dostawcy dla Terraform

Terraform używa pojęcia provider, które reprezentuje konkretne środowisko chmury i obejmuje uwierzytelnianie. Chmury NSIS są budowane zgodnie z technologią OpenStack, a OpenStack jest jednym ze standardowych typów dostawców dla Terraform.

Musimy:

  • poinstruować Terraform, aby używał OpenStack jako typu dostawcy

  • podać dane uwierzytelniające, które będą wskazywać na nasz projekt i użytkownika w chmurze.

Zakładając, że jest spełnione Wymaganie wstępne Nr. 2 (pobranie i skopiowanie pliku RC), kilka zmiennych środowiskowych związanych z OpenStack zostanie wypełnionych w twoim systemie lokalnym. Zmienne wskazujące na środowisko OpenStack zaczynają się od OS, na przykład OS_USERNAME, OS_PASSWORD, OS_AUTH_URL. Kiedy zdefiniujemy OpenStack jako typ dostawcy Terraform, Terraform będzie wiedział, aby automatycznie używać tych zmiennych env do uwierzytelniania.

Zdefiniujmy teraz dostawcę Terraform, tworząc plik provider.tf o następującej zawartości:

provider.tf

# Define providers
terraform {
required_version = ">= 0.14.0"
  required_providers {
    openstack = {
      source  = "terraform-provider-openstack/openstack"
      version = "~> 1.35.0"
    }
  }
}

# Configure the OpenStack Provider
provider "openstack" {
  auth_url =  "https://keystone.cloudferro.com:5000/v3"
  # the rest of configuration parameters are taken from environment variables once RC file is correctly sourced
}

Opcja auth_url jest jedyną opcją konfiguracji, którą należy podać w pliku konfiguracyjnym, mimo że jest ona również dostępna w zmiennych środowiskowych.

Posiadanie tej specyfikacji dostawcy umożliwia utworzenie klastra w kolejnych krokach, ale może być ona również ponownie wykorzystana do tworzenia innych zasobów w środowisku OpenStack, na przykład maszyn wirtualnych, woluminów i wielu innych.

Definiowanie zasobu klastra w Terraform

Drugim krokiem jest zdefiniowanie dokładnej specyfikacji zasobu, który chcemy utworzyć za pomocą Terraform. W naszym przypadku chcemy utworzyć klaster OpenStack Magnum. W terminologii Terraform będzie to instancja typu zasobu openstack_containerinfra_cluster_v1. Aby kontynuować, utwórz plik cluster.tf, który zawiera specyfikację naszego klastra:

cluster.tf

# Create resource
resource "openstack_containerinfra_cluster_v1" "k8s-cluster" {
  name                      = "k8s-cluster"
  cluster_template_id       = "cc4c10ae-8321-4771-91b4-519ff52967b0"
  node_count                = 3
  master_count              = 3
  flavor                    = "eo1a.large"
  master_flavor             = "hmad.medium"
  keypair                   = "klucz"
  labels = {
    eodata_access_enabled   = true
    etcd_volume_size        = 0
  }
  merge_labels              = true
}

Powyższa konfiguracja odzwierciedla klaster z kilkoma często używanymi dostosowaniami:

cluster_template_id

odpowiada identyfikatorowi jednego z domyślnych szablonów klastrów, którym jest k8s-v1.31.10-1.0.0-cilium. Domyślne szablony i ich identyfikatory można sprawdzić w interfejsie Horizon UI w podmenu Cluster Infra -→ Container Templates.

node_count, node_flavor, master_node_count, master_node_flavor

odpowiadają intuicyjnie liczbie i rodzajowi węzłów nadrzędnych i podrzędnych w klastrze.

keypair

oznacza nazwę pary kluczy używanej w naszym projekcie openstack w wybranej chmurze.

labels i merge_labels

Używamy dwóch etykiet:

eodata_access_enabled=true

zapewnia, że sieć EODATA z szybkim dostępem do zdjęć satelitarnych jest połączona z węzłami naszego klastra,

etcd_volume_size=0

zapewnia, że węzły główne są prawidłowo wyposażone w lokalną pamięć masową NVME.

W przypadku tej konfiguracji obowiązkowe jest również użycie parametru merge_labels=true, aby poprawnie zastosować te etykiety i uniknąć ich zastąpienia przez domyślne ustawienia szablonu.

Dostępne flavory znajdziesz za pomocą poniższego polecenia. W przykładzie używamy hmad.medium, co można zmienic wedle potrzeby. .. code:

openstack flavor list

Powyższa konfiguracja odzwierciedla klaster, w którym loadbalancer jest umieszczony przed węzłami głównymi, a flavor tego loadbalancera to HA-large. Dostosowanie tego domyślnego ustawienia, podobnie jak w przypadku innych bardziej zaawansowanych ustawień domyślnych, wymagałoby utworzenia niestandardowego szablonu Magnum, co wykracza poza zakres tego artykułu.

Zastosowanie konfiguracji i utworzenie klastra

Po zdefiniowaniu obu konfiguracji Terraform opisanych w poprzednich krokach możemy je zastosować w celu utworzenia naszego klastra.

Pierwszym krokiem jest przygotowanie obu plików provider.tf i cluster.tf w dedykowanym katalogu. Następnie przejdź do tego katalogu (cd ) i wpisz polecenie:

terraform init

To polecenie zainicjuje wdrożenie naszego klastra. Wykryje ono wszelkie formalne błędy związane z uwierzytelnianiem w OpenStack, które mogą wymagać korekty przed przejściem do następnego etapu.

../_images/image-2024-6-17_15-52-40_nsis_pl1.png

W następnym kroku Terraform zaplanuje działania, które musi wykonać, aby utworzyć zasób. Wpisz polecenie:

terraform plan

Wynik jest przedstawiony poniżej i umożliwia poprawienie wszelkich błędów logicznych w oczekiwanej konfiguracji:

../_images/image-2024-6-18_17-32-8_nsis_pl1.png

Ostatnim krokiem jest zastosowanie zaplanowanych zmian. Wykonaj ten krok za pomocą polecenia:

terraform apply

Wynik tego ostatniego polecenia najpierw powtórzy plan, a następnie poprosi o wpisanie słowa yes, aby uruchomić Terraform.

Po potwierdzeniu przez wpisanie yes, akcja zostanie wdrożona, a konsola będzie aktualizować się co 10 sekund, wyświetlając komunikat „Still creating …”, aż klaster zostanie utworzony.

Ostatnie wiersze danych wyjściowych po pomyślnym skonfigurowaniu klastra powinny wyglądać podobnie do poniższych:

../_images/image-2024-6-18_18-1-53_nsis_pl1.png

Co można zrobić dalej?

Terraform może być również używany do wdrażania dodatkowych aplikacji w klastrze, na przykład przy użyciu dostawcy Helm dla Terraform. Więcej informacji szczegółowych można znaleźć w dokumentacji Terraform.