RustyKube to prosta aplikacja napisana w języku Rust, jej celem było przede wszystkim zaznajomienie się z technologią Kubernetes. Aplikacja składa się z trzech części: bazy danych, backendu i frontendu.

Kubernetes

Zainteresowałem się skalowaniem aplikacji i postanowiłem pobawić się technologią Kubernetes, mogłem oczywiście uruchomić jakąś przykładową aplikację ale stwierdziłem że wolę napisać swoją prostą aplikację, w której będę mógł dorzucić sobie jakieś dodatkowe dane, gdybym miał potrzebę a i w przyszłości, gdyby zainteresowała by mnie jakaś technologia to mógłbym sobie ją zmodyfikować 🙂 Aplikacja jest uruchomiona na platformie Google Cloud przy pomocy Google Kubernetes Engine. Aplikacja posiada skonfigurowany CI/CD więc każda aktualizacja w repozytorium powoduje automatyczne wdrożenie w GCP.

W początkowych fazach nauki i testowania jak co działa miałem uruchomione kilka nodów z backendem aplikacji zawierającym od 3 do 5 podów w każdym. Na chwilę obecną - ze względu na chęć ograniczenia kosztów - ustawiony jest autopilot, przeważnie zawierający 1 noda i 1 poda.

Baza danych

Jako bazę danych wybrałem MongoDB, projekt miał się skupić na zapoznaniu się z technologią Kubernetes więc nie było potrzeby używać relacyjnej bazy danych, wystarczyło żeby baza przechowywała potrzebne dane, do których backend mógły się odwoływać lub zapisywać.

Backend

Aplikacja napisana w języku Rust przy wykorzystaniu z frameworka Rocket. Jest to proste API, które pobiera lub zapisuje dane w bazie danych. Dodatkowo do każdego wystawionego JSONa dodawana jest nazwa hosta(poda), z którego pochodzi odpowiedź. Backend dostępny jest pod adresem: rk.karpinski.tech

Aplikacja udostępnia poszczególne endpointy:

  • get:
    • /books - pobiera wszystkie dane z bazy danych
    • /books/<id> - pojedynczy wpis o podanym id
  • post:
    • /books - zapisuje do bazy danych nowy wpis

Przykładowe zapytania:

get /books:

  "hostname": "backend-77cf5d6465-jjl9l",
  "books": [
    {
      "_id": {
        "$oid": "643701f7c0c25e2543f0c69e"
      },
      "title": "The Grapes of Wrath1",
      "author": "John Steinbeck1"
    },
    {
      "_id": {
        "$oid": "6419bf2f105a3c2ed1fa40b8"
      },
      "title": "To Kill a Mockingbird",
      "author": "Harper Lee"
    },
    {
      "_id": {
        "$oid": "6436f918c936c189a23df8ba"
      },
      "title": "The Grapes of Wrath1",
      "author": "John Steinbeck1"
    },
   ...
    {
      "_id": {
        "$oid": "64370870f5c6cb1c41698f83"
      },
      "title": "The Grapes of Wrath1",
      "author": "John Steinbeck1"
    }
  ]
}

get /books/64370b83c7043b3af6f64896

{
  "hostname": "backend-77cf5d6465-jjl9l",
  "books": [
    {
      "_id": {
        "$oid": "64370b83c7043b3af6f64896"
      },
      "title": "The Grapes of Wrath1",
      "author": "John Steinbeck1"
    }
  ]
}

post /books:

Frontend

WIP - RustyKube

Repozytorium

Repozytorium kodu aplikacji, oraz pliki dockerfile pozwalające zbudować kontener i konfiguracje kubernetesa znajdują się w moim repozytorium RustyKube