У овом чланку ћу поставити радно окружење за развој игре „Епицс“, а такође ћу разбити саму игру на делове погодне за коришћење у ОпенФааС-у. Урадићу све манипулације на Линук-у, поставићу Кубернетес у миникубе користећи ВиртуалБок. Моја радна машина има 2 језгра процесора и 12 ГБ РАМ-а; користим ССД као системски диск. Користићу дебиан 8 као мој главни развојни систем, са инсталираним пакетима емацс, судо, гит и виртуелбок, све остало ће бити инсталирано преузимањем са ГитХуб-а и других извора. Ове апликације ћемо инсталирати у /уср/лоцал/бин осим ако није другачије назначено. Хајде да почнемо!
Програмери препоручују креирање 2 именска простора за рад са:
$ kubectl apply -f https://raw.githubusercontent.com/openfaas/faas-netes/master/namespaces.yml
namespace/openfaas created
namespace/openfaas-fn created
Додајте спремиште за кормило:
$ helm repo add openfaas https://openfaas.github.io/faas-netes/
"openfaas" has been added to your repositories
Графикон има могућност постављања лозинке пре инсталације, хајде да је користимо и сачувамо приступне податке као к8с тајну:
$ 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"
Након неког времена, покрећемо предложену команду:
$ 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
Инсталирање Монгодб-а
Све инсталирамо помоћу кормила:
$ 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
Проверавамо:
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
Притисните цтрл+Д да изађете из контејнера.
Подешавање емацса
У принципу, све је већ било конфигурисано према Овај чланак, па нећу улазити у детаље.
Растављање игре на функције
Интеракција са функцијама се врши преко хттп протокола, енд-то-енд аутентификацију између различитих функција обезбеђује ЈВТ. Монгодб се користи за чување токена, као и стања игре, података играча, секвенци потеза свих игара и других информација. Хајде да детаљније погледамо најзанимљивије карактеристике.
регистрација
Улаз ове функције је ЈСОН са надимком игре и лозинком. Када се ова функција позове, проверава се да овај псеудоним није у бази података; ако је провера успешна, псеудоним и хеш лозинке се убацују у базу података. За активно учешће у игри потребна је регистрација.
улаз
Унос функције је ЈСОН са надимком игре и лозинком; ако постоји надимак у бази података и лозинка је успешно верификована са оном која је претходно сачувана у бази, враћа се ЈВТ, који се мора проследити другим функцијама када се зове. У базу података се убацују и различити сервисни записи, на пример време последњег пријављивања итд.
Погледајте листу игара
Сваки неовлашћени корисник може затражити списак свих игара осим активних. Овлашћени корисник такође види листу активних игара. Резултат функције је ЈСОН који садржи листе игара (ИД игре, људско читљиво име, итд.).
Креирање игре
Функција ради само са овлашћеним корисницима, на улазу се прихвата максималан број играча, као и параметри игре (на пример, које ликове активирати у овој игрици, максималан број играча итд.). Посебан параметар игре је присуство лозинке за придруживање, која вам омогућава да креирате игре које нису јавне. Подразумевано се креира јавна игра. Резултат функције је ЈСОН, који садржи поље за успех креирања, јединствени идентификатор игре и друге параметре.
Придруживање игри
Функција ради само са овлашћеним корисницима, улаз је ИД игре и њена лозинка, ако је ово нејавна игра, излаз је ЈСОН са параметрима игре. Овлашћени корисник који је приступио игри, као и креатор игре, у даљем тексту се називају учесници игре.
Преглед догађаја у игри
Сваки неовлашћени корисник може затражити листу догађаја за неактивне игре, а овлашћени корисник може добити листу догађаја за било коју активну игру. Додатни параметар функцији може бити број догађаја који корисник већ има. У овом случају, само они догађаји који су се десили касније ће бити враћени на листу. Повременим покретањем ове функције, овлашћени корисник прати шта се дешава у игрици. Ова функција такође враћа захтев за акцију, на који корисник може да одговори помоћу функције за слање догађаја у игри.
Слање догађаја игре
Функција ради само за учеснике игре: могуће је започети игру, направити потез, гласати, написати текстуалну поруку која се приказује на листи догађаја игре итд.
Овлашћени корисник који је креирао игру почиње да дели улоге свим учесницима у игри, укључујући и себе, они морају потврдити своју улогу користећи исту функцију. Када су све улоге потврђене, игра се аутоматски пребацује у ноћни режим.
Статистика игре
Функција ради само за учеснике игре, приказује стање у игри, списак и број играча (надимке), улоге и њихов статус (покрет направљен или не), као и друге информације. Као и код претходне функције, све ради само за учеснике игре.
Периодично покренуте функције
Ако игра није била покренута неко време наведено при креирању игре, аутоматски ће бити уклоњена са листе активних игара помоћу функције брисања.
Други периодични задатак је принудно пребацивање режима игре из ноћног у дан и назад за игре за које се то није десило током окрета (на пример, играч који треба да реагује на догађај у игри није из неког разлога послао своје решење ).