Ing artikel iki, aku bakal nyiyapake lingkungan kerja kanggo ngembangake game "Epics", lan uga bakal ngilangi game kasebut dadi bagean sing cocog kanggo digunakake ing OpenFaaS. Aku bakal nindakake kabeh manipulasi ing Linux, Aku bakal masang Kubernetes ing minikube nggunakake VirtualBox. Mesin kerjaku duwe 2 inti prosesor lan 12GB RAM; Aku nggunakake SSD minangka disk sistem. Aku bakal nggunakake debian 8 minangka sistem pangembangan utama, kanthi emacs, sudo, git lan paket virtualbox diinstal, kabeh liyane bakal diinstal kanthi ngundhuh saka GitHub lan sumber liyane. Kita bakal nginstal aplikasi kasebut ing /usr/local/bin kajaba wis ditemtokake. Ayo dadi miwiti!
Pangembang nyaranake nggawe 2 ruang jeneng kanggo digarap:
$ kubectl apply -f https://raw.githubusercontent.com/openfaas/faas-netes/master/namespaces.yml
namespace/openfaas created
namespace/openfaas-fn created
Tambah repositori kanggo helm:
$ helm repo add openfaas https://openfaas.github.io/faas-netes/
"openfaas" has been added to your repositories
Bagan kasebut nduweni kemampuan kanggo nyetel sandhi sadurunge instalasi, ayo gunakake lan simpen data akses minangka rahasia k8s:
$ 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"
Sawise sawetara wektu, kita mbukak printah sing diusulake:
$ 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
Nginstal Mongodb
Kita nginstal kabeh nggunakake 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
Priksa:
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
Pencet ctrl + D kanggo metu saka wadhah.
Nyetel emacs
Ing asas, kabeh wis diatur miturut artikel iki, dadi aku ora bakal rinci.
Breaking mudhun game menyang fungsi
Interaksi karo fungsi ditindakake liwat protokol http, otentikasi end-to-end antarane fungsi sing beda diwenehake dening JWT. Mongodb digunakake kanggo nyimpen token, uga negara game, data pamuter, urutan gerakane kabeh game lan informasi liyane. Ayo goleki kanthi luwih rinci babagan fitur sing paling menarik.
Register
Input fungsi iki yaiku JSON kanthi julukan lan sandhi game. Nalika fungsi kasebut diarani, dipriksa manawa alias iki ora ana ing basis data; yen mriksa sukses, hash alias lan sandhi dilebokake ing basis data. Registration dibutuhake kanggo melu aktif ing game.
entri
Input fungsi yaiku JSON kanthi julukan lan sandhi game; yen ana julukan ing basis data lan sandhi kasebut kasil diverifikasi karo sing sadurunge disimpen ing basis data, JWT bakal bali, sing kudu ditransfer menyang fungsi liyane nalika lagi diarani. Macem-macem cathetan layanan uga dilebokake ing database, contone, wektu mlebu pungkasan, lsp.
Ndeleng dhaptar game
Sembarang pangguna sing ora sah bisa njaluk dhaptar kabeh game kajaba sing aktif. Pangguna sing sah uga ndeleng dhaptar game sing aktif. Asil fungsi kasebut yaiku JSON sing ngemot dhaptar game (ID game, jeneng sing bisa diwaca manungsa, lsp).
Fungsi kasebut mung dianggo karo pangguna sing sah, input yaiku ID game lan sandhi, yen iki game non-umum, output JSON karo paramèter game. Pangguna sah sing gabung karo game kasebut, uga sing nggawe game kasebut, banjur diarani peserta game.
Ndeleng acara game
Sembarang pangguna sing ora sah bisa njaluk dhaptar acara kanggo game sing ora aktif, lan pangguna sing sah bisa nampa dhaptar acara kanggo game sing aktif. Parameter tambahan kanggo fungsi kasebut bisa dadi nomer acara sing wis ana pangguna. Ing kasus iki, mung acara sing kedadeyan mengko bakal bali ing dhaptar. Kanthi ngluncurake fungsi iki kanthi periodik, pangguna sing sah nonton apa sing kedadeyan ing game kasebut. Fungsi iki uga ngasilake panjalukan tumindak, sing pangguna bisa nanggapi nggunakake fungsi kiriman acara game.
Ngirim acara game
Fungsi mung dianggo kanggo peserta game: iku bisa kanggo miwiti game, nggawe pamindhahan, milih, nulis pesen teks sing ditampilake ing dhaftar acara game, etc.
Pangguna sah sing nggawe game wiwit nyebarake peran kanggo kabeh peserta ing game, kalebu awake dhewe, kudu konfirmasi peran nggunakake fungsi sing padha. Sawise kabeh peran dikonfirmasi, game kanthi otomatis ngalih menyang mode wengi.
Yen game durung dibukak kanggo sawetara wektu tartamtu nalika nggawe game, iku bakal kanthi otomatis dibusak saka dhaftar game aktif nggunakake fungsi cetha.
Tugas periodik liyane yaiku ngoper mode game saka wengi nganti awan lan bali kanggo game sing ora kedadeyan sajrone giliran (contone, pemain sing kudu nanggepi acara game ora ngirim solusi kanggo sawetara alasan. ).