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