Yn dit artikel sil ik in wurkomjouwing ynstelle foar it ûntwikkeljen fan it spultsje "Epics", en sil it spultsje sels ek brekke yn dielen dy't geskikt binne foar gebrûk yn OpenFaaS. Ik sil alle manipulaasjes dwaan op Linux, ik sil Kubernetes yn minikube ynsette mei VirtualBox. Myn wurk masine hat 2 prosessor kearnen en 12GB RAM; Ik brûk in SSD as it systeem skiif. Ik sil debian 8 brûke as myn haadûntwikkelingssysteem, mei emacs, sudo, git en virtualbox-pakketten ynstalleare, al it oare sil ynstalleare wurde troch te downloaden fan GitHub en oare boarnen. Wy sille dizze applikaasjes yn /usr/local/bin ynstallearje, útsein as oars oanjûn. Litte wy begjinne!
It tarieden fan de wurkomjouwing
Ynstallaasje fan Go
Wy folgje de ynstruksjes fan 'e offisjele webside:
De ûntwikkelders advisearje it meitsjen fan 2 nammeromten om mei te wurkjen:
$ kubectl apply -f https://raw.githubusercontent.com/openfaas/faas-netes/master/namespaces.yml
namespace/openfaas created
namespace/openfaas-fn created
Foegje in repository ta foar helm:
$ helm repo add openfaas https://openfaas.github.io/faas-netes/
"openfaas" has been added to your repositories
De kaart hat de mooglikheid om in wachtwurd yn te stellen foar ynstallaasje, litte wy it brûke en de tagongsgegevens bewarje as in k8s-geheim:
$ helm repo update
Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "openfaas" chart repository
Update Complete. Happy Helming!
$ helm upgrade openfaas --install openfaas/openfaas --namespace openfaas --set functionNamespace=openfaas-fn --set generateBasicAuth=false
Release "openfaas" does not exist. Installing it now.
NAME: openfaas
LAST DEPLOYED: Fri Dec 25 10:28:22 2019
NAMESPACE: openfaas
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
To verify that openfaas has started, run:
kubectl -n openfaas get deployments -l "release=openfaas, app=openfaas"
Nei in skoft rinne wy it foarstelde kommando út:
$ kubectl rollout status -n openfaas deploy/gateway
deployment "gateway" successfully rolled out
$ kubectl port-forward -n openfaas svc/gateway 8080:8080 &
[1] 6985
Forwarding from 127.0.0.1:8080 -> 8080
$ echo -n $PASSWORD | faas-cli login --username admin --password-stdin
Calling the OpenFaaS server to validate the credentials...
Handling connection for 8080
WARNING! Communication is not secure, please consider using HTTPS. Letsencrypt.org offers free SSL/TLS certificates.
credentials saved for admin http://127.0.0.1:8080
$ faas-cli list
Function Invocations Replicas
Ynstallaasje fan Mongodb
Wy ynstallearje alles mei help fan helm:
$ helm repo add stable https://kubernetes-charts.storage.googleapis.com/
"stable" has been added to your repositories
$ helm install stable/mongodb --generate-name
NAME: mongodb-1577466908
LAST DEPLOYED: Fri Dec 25 11:15:11 2019
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
** Please be patient while the chart is being deployed **
MongoDB can be accessed via port 27017 on the following DNS name from within your cluster:
mongodb-1577466908.default.svc.cluster.local
To get the root password run:
export MONGODB_ROOT_PASSWORD=$(kubectl get secret --namespace default mongodb-1577466908 -o jsonpath="{.data.mongodb-root-password}" | base64 --decode)
To connect to your database run the following command:
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
To connect to your database from outside the cluster execute the following commands:
kubectl port-forward --namespace default svc/mongodb-1577466908 27017:27017 &
mongo --host 127.0.0.1 --authenticationDatabase admin -p $MONGODB_ROOT_PASSWORD
Wy kontrolearje:
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)
If you don't see a command prompt, try pressing enter.
> db.version();
4.0.14
Druk op ctrl+D om de kontener út te gean.
Emacs ynstelle
Yn prinsipe, alles wie al konfigurearre neffens dit artikel, dus ik sil net yn detail gean.
It spul ôfbrekke yn funksjes
Ynteraksje mei funksjes wurdt útfierd fia it http-protokol, end-to-end autentikaasje tusken ferskate funksjes wurdt fersoarge troch JWT. Mongodb wurdt brûkt om tokens op te slaan, lykas spielstatus, spilergegevens, sekwinsjes fan bewegingen fan alle spultsjes en oare ynformaasje. Litte wy de meast nijsgjirrige funksjes fan tichterby besjen.
registraasje
De ynfier fan dizze funksje is JSON mei de spielnamme en wachtwurd. As dizze funksje oanroppen wurdt, wurdt kontrolearre dat dizze alias net yn 'e databank is as de kontrôle suksesfol is, wurde de alias en wachtwurdhash ynfoege. Registraasje is nedich om aktyf meidwaan oan it spul.
entry
De funksje-ynfier is JSON mei in spielnamme en wachtwurd as d'r in bynamme is yn 'e databank en it wachtwurd is mei súkses ferifiearre mei de earder bewarre yn' e databank, wurdt in JWT weromjûn, dy't moatte wurde trochjûn oan oare funksjes as se binne; neamd. Ferskate tsjinst records wurde ek ynfoege yn de databank, Bygelyks, lêste oanmeldtiid, etc.
Besjoch in list mei spultsjes
Elke net autorisearre brûker kin in list oanfreegje fan alle spultsjes útsein aktive. In autorisearre brûker sjocht ek in list mei aktive spultsjes. It resultaat fan 'e funksje is JSON mei listen mei spultsjes (spultsje-ID, minsklik lêsbere namme, ensfh.).
Game skepping
De funksje wurket allinnich mei autorisearre brûkers it maksimum oantal spilers wurdt akseptearre by de ynfier, likegoed as spultsje parameters (bygelyks, hokker karakters te aktivearjen yn dit spul, it maksimum oantal spilers, ensfh). In aparte parameter fan it spultsje is de oanwêzigens fan in wachtwurd foar meidwaan, wêrtroch jo net-iepenbiere spultsjes kinne meitsje. Standert wurdt in iepenbier spultsje makke. It resultaat fan 'e funksje is JSON, dy't in suksesfjild foar oanmeitsjen befettet, in unike spielidentifikator en oare parameters.
Joining in spultsje
De funksje wurket allinich mei autorisearre brûkers, de ynfier is de spiel-ID en har wachtwurd, as dit in net-iepenbier spultsje is, is de útfier JSON mei de spielparameters. De autorisearre brûker dy't meidien hat oan it spultsje, lykas de makker fan it spultsje, wurde hjirnei spultsje-dielnimmers neamd.
Besjoch spultsje eveneminten
Eltse net autorisearre brûker kin freegje in list mei eveneminten foar ynaktive spultsjes, en in autorisearre brûker kin ûntfange in list fan eveneminten foar eltse aktive spultsje. In ekstra parameter foar de funksje kin it barrennûmer wêze dat de brûker al hat. Yn dit gefal sille allinich de eveneminten dy't letter barde wurde weromjûn yn 'e list. Troch dizze funksje periodyk te starten, sjocht in autorisearre brûker wat der bart yn it spultsje. Dizze funksje jout ek in aksjefersyk werom, dêr't de brûker kin reagearje op mei help fan it spultsje syn evenemint dispatch funksje.
It ferstjoeren fan in spultsje evenemint
De funksje wurket allinich foar spielers: it is mooglik om it spultsje te begjinnen, in beweging te meitsjen, te stimmen, in tekstberjocht te skriuwen dat wurdt werjûn yn 'e list mei spultsje-eveneminten, ensfh.
De autorisearre brûker dy't it spultsje makke, begjint rollen te fersprieden oan alle dielnimmers yn it spul, ynklusyf harsels, se moatte har rol befestigje mei deselde funksje. Sadree't alle rollen binne befêstige, skeakelt it spultsje automatysk oer nei nachtmodus.
Game statistiken
De funksje wurket allinnich foar game dielnimmers it toant de steat fan it spul, de list en it oantal spilers (bynammen), rollen en harren status (ferhuzing makke of net), likegoed as oare ynformaasje. Lykas by de foarige funksje, alles wurket allinnich foar game dielnimmers.
Periodyk lansearre funksjes
As it spultsje in skoft net is lansearre opjûn by it meitsjen fan it spultsje, sil it automatysk fuortsmiten wurde fan 'e list mei aktive spultsjes mei de dúdlike funksje.
In oare periodike taak is it twongen wikseljen fan 'e spielmodus fan nacht nei dei en werom foar spultsjes wêrfoar dit net barde yn' e beurt (bygelyks in spiler dy't reagearje moat op in spultsje-evenemint hat om ien of oare reden syn oplossing net stjoerd ).