
Ebben a cikkben beállítom a "Bylina" játék fejlesztési környezetét, és magát a játékot részekre bontom, amelyeket használni tudunk az OpenFaaS-ban. Mindezeket Linuxon fogom elvégezni, a Kubernetes-t a minikube-on fogom telepíteni a VirtualBox használatával. A munkagépen 2 processzormag és 12 GB RAM található, a rendszerlemez SSD-t használ. A fejlesztéshez debian 8-at fogok használni, telepített emacs, sudo, git és virtualbox csomagokkal, minden mást pedig a GitHub és más források letöltésével telepítek. Ezeket az alkalmazásokat a /usr/local/bin könyvtárba fogom telepíteni, hacsak nem jeleztem máshol. Kezdjünk hozzá!
A munkakörnyezet előkészítése
A Go telepítése
Kövesd az hivatalos weboldalon található utasításokat:
$ curl -L0 https://dl.google.com/go/go1.13.5.linux-amd64.tar.gz -o go.tar.gz
$ sudo tar -C /usr/local -xzf go.tar.gz
$ echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.profileA működés ellenőrzése:
$ mkdir -p ~/go/src/hello && cd ~/go/src/hello
$ echo 'package main
import "fmt"
func main() {
fmt.Printf("hello, worldn")
}' > hello.go
$ go build
$ ./hello
hello, worldfaas-cli telepítése
Kövesd az hivatalos weboldalon található utasításokat:
$ curl -sSL https://cli.openfaas.com | sudo -E sh
x86_64
Csomag letöltése: https://github.com/openfaas/faas-cli/releases/download/0.11.3/faas-cli a /tmp/faas-cli-ra
Letöltés befejezve.
Elégséges engedéllyel megpróbáljuk áthelyezni a faas-cli-t a /usr/local/bin-ba
Az új verzió a faas-cli telepítve lett a /usr/local/bin-ba.
'faas' alias létrehozása a 'faas-cli'-hez.
___ _____ ____
/ _ _ __ ___ _ __ | ___|_ _ __ _/ ___|
| | | | '_ / _ '_ | |_ / _` |/ _` ___
| |_| | |_) | __/ | | | _| (_| | (_| |___) |
___/| .__/_ ___|_| |_|_| __,_|__,_|____/
|_|
CLI:
commit: 73004c23e5a4d3fdb7352f953247473477477a64
verzió: 0.11.3Továbbá lehetőség van a bash-completion használatának bekapcsolására:
faas-cli completion --shell bash | sudo tee /etc/bash_completion.d/faas-cliKubernetes telepítése és beállítása
A fejlesztéshez elegendő a minikube, ezért telepítjük a minikube-ot és a kubelet-et a /usr/local/bin könyvtárba, az alkalmazások telepítéséhez emellett telepítjük a helm-et is:
$ curl https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 -o minikube && chmod +x minikube && sudo mv minikube /usr/local/bin/
$ curl https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl -o kubectl && chmod +x kubectl && sudo mv kubectl /usr/local/bin/
$ curl https://get.helm.sh/helm-v3.0.2-linux-amd64.tar.gz | tar -xzvf - linux-amd64/helm --strip-components=1; sudo mv helm /usr/local/binMinikube elindítása:
$ minikube start
minikube v1.6.2 Debian 8.11-en
Automatikusan a 'virtualbox' meghajtót választotta (alternatívák: [])
VM indító kép letöltése ...
> minikube-v1.6.0.iso.sha256: 65 B / 65 B [--------------] 100.00% ? p/s 0s
> minikube-v1.6.0.iso: 150.93 MiB / 150.93 MiB [-] 100.00% 5.67 MiB p/s 27s
Virtualbox VM létrehozása (CPU=2, Memória=8192MB, Lemez=20000MB) ...
Kubernetes v1.17.0 előkészítése a Docker '19.03.5'-ön ...
kubeadm v1.17.0 letöltése
kubelet v1.17.0 letöltése
Képek letöltése ...
Kubernetes indítása ... Várakozás a klaszter online állapotára ...
Kész! A kubectl most már a "minikube"-ot használjaEllenőrizzük:
$ kubectl get pods --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system coredns-6955765f44-knlcb 1/1 Futtatásban 0 29m
kube-system coredns-6955765f44-t9cpn 1/1 Futtatásban 0 29m
kube-system etcd-minikube 1/1 Futtatásban 0 28m
kube-system kube-addon-manager-minikube 1/1 Futtatásban 0 28m
kube-system kube-apiserver-minikube 1/1 Futtatásban 0 28m
kube-system kube-controller-manager-minikube 1/1 Futtatásban 0 28m
kube-system kube-proxy-hv2wc 1/1 Futtatásban 0 29m
kube-system kube-scheduler-minikube 1/1 Futtatásban 0 28m
kube-system storage-provisioner 1/1 Futtatásban 1 29mOpenFaaS telepítése
A fejlesztők ajánlják, hogy 2 namespace-et hozzunk létre a munkához:
$ kubectl apply -f https://raw.githubusercontent.com/openfaas/faas-netes/master/namespaces.yml
namespace/openfaas létrehozva
namespace/openfaas-fn létrehozvaHozzáadjuk a helm tárolót:
$ helm repo add openfaas https://openfaas.github.io/faas-netes/
"openfaas" hozzáadva a tárolókhozA chartban lehetőség van jelszó megadására a telepítés előtt, ezt kihasználva titkos adatokat mentünk k8s formájában:
$ PASSWORD=verysecurerandompasswordstring
$ kubectl -n openfaas create secret generic basic-auth --from-literal=basic-auth-user=admin --from-literal=basic-auth-password="$PASSWORD"
secret/basic-auth létrehozvaA telepítést végrehajtjuk:
$ helm repo update
Tartsd magad nehezen, amíg a legújabbakat beszerezzük a chart tárolókból...
...Sikeresen frissítettük az "openfaas" chart tárolót
Frissítés befejezve. Jó Helming!
$ helm upgrade openfaas --install openfaas/openfaas --namespace openfaas --set functionNamespace=openfaas-fn --set generateBasicAuth=false
A "openfaas" kiadás nem létezik. Most telepítjük.
NÉV: openfaas
UTOLSÓ TELEPÍTÉS: 2019. dec. 25. 10:28:22
NAMESPACE: openfaas
ÁLLAPOT: telepítve
REVÍZIÓ: 1
TESZTLAP: Nincs
MEGJEGYZÉSEK:
A nyitás ellenőrzéséhez futtassa:
kubectl -n openfaas get deployments -l "release=openfaas, app=openfaas"Néhány idő múlva futtassuk a javasolt parancsot:
$ kubectl -n openfaas get deployments -l "release=openfaas, app=openfaas"
NÉV KÉSZ FRISS ELÉRHETŐ KOR
alertmanager 1/1 1 1 114s
basic-auth-plugin 1/1 1 1 114s
faas-idler 1/1 1 1 114s
gateway 1/1 1 1 114s
nats 1/1 1 1 114s
prometheus 1/1 1 1 114s
queue-worker 1/1 1 1 114sA működés ellenőrzése:
$ kubectl rollout status -n openfaas deploy/gateway
deployment "gateway" sikeresen kiépítve
$ kubectl port-forward -n openfaas svc/gateway 8080:8080 &
[1] 6985
Továbbítás a 127.0.0.1:8080 -> 8080 porttól
$ echo -n $PASSWORD | faas-cli login --username admin --password-stdin
Az OpenFaaS szerverhez való csatlakozás a hitelesítő adatok érvényesítéséhez...
Kapcsolat kezelés 8080-ra
FIGYELMEZTETÉS! A kommunikáció nem biztonságos, kérjük, fontolja meg a HTTPS használatát. A Letsencrypt.org ingyenes SSL/TLS tanúsítványokat kínál.
hitelesítők elmentve az admin számára http://127.0.0.1:8080
$ faas-cli list
Funkció Hívások MásolatokMongodb telepítése
Minden telepítése helm használatával:
$ helm repo add stable https://kubernetes-charts.storage.googleapis.com/
"stable" hozzáadva a tárolóidhoz
$ helm install stable/mongodb --generate-name
NÉV: mongodb-1577466908
UTOLSÓ TELEPÍTÉS: 2019. dec. 25. 11:15:11
NÉVTER: default
ÁLLAPOT: telepítve
REVÍZIÓ: 1
TESZTSOROZAT: Nincs
MEGJEGYZÉSEK:
** Kérjük, légy türelmes, amíg a diagram telepítve van **
A MongoDB elérhető a 27017 porton a következő DNS név alatt a klaszteren belül:
mongodb-1577466908.default.svc.cluster.local
A gyökér jelszó megszerzéséhez futtassa:
export MONGODB_ROOT_PASSWORD=$(kubectl get secret --namespace default mongodb-1577466908 -o jsonpath="{.data.mongodb-root-password}" | base64 --decode)
Az adatbázisához való csatlakozáshoz futtassa a következő parancsot:
kubectl run --namespace default mongodb-1577466908-client --rm --tty -i --restart='Never' --image bitnami/mongodb --command -- mongo admin --host mongodb-1577466908 --authenticationDatabase admin -u root -p $MONGODB_ROOT_PASSWORD
Ha az adatbázisához kívülről szeretne csatlakozni, futtassa a következő parancsokat:
kubectl port-forward --namespace default svc/mongodb-1577466908 27017:27017 &
mongo --host 127.0.0.1 --authenticationDatabase admin -p $MONGODB_ROOT_PASSWORDEllenőrizzük:
kubectl run --namespace default mongodb-1577466908-client --rm --tty -i --restart='Never' --image bitnami/mongodb --command -- mongo admin --host mongodb-1577466908 --authenticationDatabase admin -u root -p $(kubectl get secret --namespace default mongodb-1577466908 -o jsonpath="{.data.mongodb-root-password}" | base64 --decode)
Ha nem lát parancssort, próbáljon meg enter-t nyomni.
> db.version();
4.0.14Nyomja meg a ctrl+D kombinációt a konténerből való kilépéshez.
Emacs beállítása
Alapvetően az összes beállítás már megvolt a , így nem írom le részletesen.
A játék funkciókra bontása
A funkciókkal való interakció HTTP protokollon keresztül történik, a különböző funkciók közötti átjáró hitelesítés JWT-t biztosít. A tokenek, valamint a játék állapota, a játékosok adatai, a játékok lépéseinek sorozatai és egyéb információk tárolására a mongodb-t használják. Vizsgáljuk meg közelebbről a legérdekesebb funkciókat.
Registration
A funkció bemeneti paraméterei egy JSON, amely játékbeli álnevet és jelszót tartalmaz. Amikor ezt a funkciót hívják, ellenőrzik, hogy az álnaév nincs-e már az adatbázisban; a sikeres ellenőrzés után az álnevet és a jelszó hash-t az adatbázisba illesztik. A regisztráció szükséges a játék aktív részvételéhez.
Bemenet
A funkció bemenete egy JSON, amely tartalmazza a játékos álnevé és jelszavát. Ha az álnev szerepel az adatbázisban és a jelszó sikeresen ellenőrzésre került, egy JWT-t kapunk vissza, amelyet más funkciók hívásakor át kell adni. Emellett különféle szolgáltatási bejegyzések is létrejönnek az adatbázisban, például az utolsó belépés ideje stb.
Játéklisták megtekintése
Bármely nem bejelentkezett felhasználó kérheti az összes játék listáját, kivéve az aktívakat. A bejelentkezett felhasználók az aktív játékok listáját is látják. A funkció eredménye egy JSON, amely tartalmazza a játékok listáját (játék azonosító, ember számára olvasható név stb.).
Játék készítése
A funkció kizárólag bejelentkezett felhasználókra vonatkozik, a bemenet a maximális játékosok száma és a játék paraméterei (például, hogy mely karakterek aktiválódjanak a játékban, maximális játékosok száma stb.). A játék külön paramétere a csatlakozási jelszó megléte, amely lehetővé teszi privát játékok létrehozását. Alapértelmezés szerint egy nyilvános játék jön létre. A funkció végrehajtásának eredménye egy JSON, amely tartalmazza a létrehozás sikerességét, a játék egyedi azonosítóját, valamint egyéb paramétereit.
Csatlakozás a játékhoz
A funkció kizárólag bejelentkezett felhasználók számára érhető el, a bemenet a játék azonosítója és jelszava, ha az privát játék. A kimenet egy JSON, amely tartalmazza a játék paramétereit. A játékhoz csatlakozó bejelentkezett felhasználó, valamint a játék létrehozója ezután a játék résztvevőinek számítanak.
A játék eseményeinek megtekintése
Bármely nem bejelentkezett felhasználó kérheti az inaktív játékok eseményeinek listáját, míg a bejelentkezett felhasználók az összes aktív játék eseményeit kapják meg. A funkciónak további paraméterként átadható az esemény száma, amely már megvan a felhasználónak. Ebben az esetben csak azokat az eseményeket kapja vissza, amelyek később történtek. A funkció időszakos hívásával a bejelentkezett felhasználó figyelemmel kísérheti, mi történik a játékban. E funkció emellett kérdést is létrehoz egy tevékenységre, amelyre a felhasználó reagálhat a játék eseményének küldésével.
A játék eseményének küldése
A funkció csak a játék résztvevői számára működik: lehetőség nyílik a játék elindítására, lépés megtételére, szavazásra, szöveges üzenet írására, amely a játék eseményeinek listájában megjelenik, stb.
A játékot létrehozó hitelesített felhasználó kiosztja a szerepeket minden játékosnak, beleértve önmagát is, akiknek meg kell erősíteniük a szerepüket ugyanazzal a funkcióval. Amint minden szerep megerősítésre kerül, a játék automatikusan éjszakai üzemmódba kapcsol.
A játék statisztikája
A funkció csak a játék résztvevői számára működik, megmutatja a játék állapotát, a játékosok (álnevek) listáját és számát, a szerepeket és azok státuszát (lépés megtéve, vagy nem), valamint egyéb információkat. Mint az előző funkciónál, minden csak a játék résztvevői számára működik.
Időszakosan futó funkciók
Ha a játék nem indult el egy bizonyos időn belül, amelyet a játék létrehozásakor adtak meg, automatikusan törlésre kerül az aktív játékok listájából a tisztítás funkció révén.
Még egy időszakos feladat – a játék üzemmódjának kényszerített váltása éjszakáról nappalra és vissza, azok számára a játékok számára, ahol ez nem történt meg a lépés során (például, ha a játékos, akinek reagálnia kell a játék eseményére, nem küldte el a döntését valamilyen okból).
Bejelentés
- Fejlesztési környezet telepítése, a feladatok funkciókra bontása
- Backend munkák
- Frontend munkák
- CICD beállítása, tesztelés megszervezése
- A játék próbaidőszakának indítása
- Összegzés
Forrás: habr.com
