"Nýjar Epics". Við borðum fílinn í pörtum

"Nýjar Epics". Við borðum fílinn í pörtum

Í þessari grein mun ég setja upp vinnuumhverfi til að þróa leikinn „Epics“ og mun einnig skipta leiknum sjálfum í hluta sem henta til notkunar í OpenFaaS. Ég mun gera allar meðhöndlun á Linux, ég mun senda Kubernetes í minikube með VirtualBox. Vinnuvélin mín er með 2 örgjörvakjarna og 12GB af vinnsluminni; ég nota SSD sem kerfisdisk. Ég mun nota debian 8 sem mitt aðal þróunarkerfi, með emacs, sudo, git og virtualbox pökkum uppsettum, allt annað verður sett upp með því að hlaða niður frá GitHub og öðrum heimildum. Við munum setja þessi forrit upp í /usr/local/bin nema annað sé tekið fram. Byrjum!

Undirbúningur vinnuumhverfis

Setur upp Go

Við fylgjum leiðbeiningunum frá opinberu vefsíðunni:

$ 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' >> ~/.profile

Athugun á virkni:

$ 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, world

Setur upp faas-cli

Við fylgjum leiðbeiningunum frá opinberu vefsíðunni:

$ curl -sSL https://cli.openfaas.com | sudo -E sh
x86_64
Downloading package https://github.com/openfaas/faas-cli/releases/download/0.11.3/faas-cli as /tmp/faas-cli
Download complete.

Running with sufficient permissions to attempt to move faas-cli to /usr/local/bin
New version of faas-cli installed to /usr/local/bin
Creating alias 'faas' for 'faas-cli'.
  ___                   _____           ____
 / _  _ __   ___ _ __ |  ___|_ _  __ _/ ___|
| | | | '_  / _  '_ | |_ / _` |/ _` ___ 
| |_| | |_) |  __/ | | |  _| (_| | (_| |___) |
 ___/| .__/ ___|_| |_|_|  __,_|__,_|____/
      |_|

CLI:
 commit:  73004c23e5a4d3fdb7352f953247473477477a64
 version: 0.11.3

Að auki geturðu virkjað bash-completion:

faas-cli completion --shell bash | sudo tee /etc/bash_completion.d/faas-cli

Uppsetning og uppsetning Kubernetes

Fyrir þróun er minikube nóg, svo settu það upp og kubelet í /usr/local/bin, og settu upp hjálm til að setja upp forrit:

$ 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/bin

Ræstu minikube:

$ minikube start
  minikube v1.6.2 on Debian 8.11
  Automatically selected the 'virtualbox' driver (alternates: [])
  Downloading VM boot image ...
    > 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
  Creating virtualbox VM (CPUs=2, Memory=8192MB, Disk=20000MB) ...
  Preparing Kubernetes v1.17.0 on Docker '19.03.5' ...
  Downloading kubeadm v1.17.0
  Downloading kubelet v1.17.0
  Pulling images ...
  Launching Kubernetes ...  Waiting for cluster to come online ...
  Done! kubectl is now configured to use "minikube"

Við athugum:

$ kubectl get pods --all-namespaces
NAMESPACE     NAME                               READY   STATUS    RESTARTS   AGE
kube-system   coredns-6955765f44-knlcb           1/1     Running   0          29m
kube-system   coredns-6955765f44-t9cpn           1/1     Running   0          29m
kube-system   etcd-minikube                      1/1     Running   0          28m
kube-system   kube-addon-manager-minikube        1/1     Running   0          28m
kube-system   kube-apiserver-minikube            1/1     Running   0          28m
kube-system   kube-controller-manager-minikube   1/1     Running   0          28m
kube-system   kube-proxy-hv2wc                   1/1     Running   0          29m
kube-system   kube-scheduler-minikube            1/1     Running   0          28m
kube-system   storage-provisioner                1/1     Running   1          29m

Að setja upp OpenFaaS

Hönnuðir mæla með því að búa til 2 nafnrými til að vinna með:

$ kubectl apply -f https://raw.githubusercontent.com/openfaas/faas-netes/master/namespaces.yml
namespace/openfaas created
namespace/openfaas-fn created

Bættu við geymslu fyrir hjálm:

$ helm repo add openfaas https://openfaas.github.io/faas-netes/
"openfaas" has been added to your repositories

Myndin hefur getu til að stilla lykilorð fyrir uppsetningu, við skulum nota það og vista aðgangsgögnin sem k8s leyndarmál:

$ 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 created

Við skulum dreifa:

$ 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"

Eftir nokkurn tíma keyrum við fyrirhugaða skipun:

$ kubectl -n openfaas get deployments -l "release=openfaas, app=openfaas"
NAME                READY   UP-TO-DATE   AVAILABLE   AGE
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           114s

Athugun á virkni:

$ 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

Er að setja upp Mongodb

Við setjum upp allt með því að nota hjálm:

$ 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

Við athugum:

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

Ýttu á ctrl+D til að fara út úr ílátinu.

Að setja upp emacs

Í grundvallaratriðum var allt þegar stillt skv Þessi grein, svo ég fer ekki í smáatriði.

Skipta leiknum niður í aðgerðir

Samskipti við aðgerðir fara fram í gegnum http-samskiptareglur, enda-til-enda auðkenning á milli mismunandi aðgerða er veitt af JWT. Mongodb er notað til að geyma tákn, sem og stöðu leiks, leikmannagögn, röð hreyfinga allra leikja og aðrar upplýsingar. Við skulum skoða nánar áhugaverðustu eiginleikana.

Skráning

Inntak þessarar aðgerð er JSON með gælunafni leiksins og lykilorði. Þegar þessi aðgerð er kölluð er athugað að þetta samnefni sé ekki í gagnagrunninum; ef athugunin heppnast er samnefninu og lykilorðinu sett inn í gagnagrunninn. Skráning er nauðsynleg til að taka virkan þátt í leiknum.

inngangur

Aðgerðarinntakið er JSON með gælunafni og lykilorði leiksins; ef það er gælunafn í gagnagrunninum og lykilorðið hefur verið staðfest með því sem áður var vistað í gagnagrunninum er JWT skilað sem verður að fara í aðrar aðgerðir þegar þær eru kallaði. Ýmsar þjónustuskrár eru einnig settar inn í gagnagrunninn, til dæmis síðasti innskráningartími o.fl.

Skoða lista yfir leiki

Allir óviðkomandi notendur geta beðið um lista yfir alla leiki nema virka. Viðurkenndur notandi sér einnig lista yfir virka leiki. Niðurstaða aðgerðarinnar er JSON sem inniheldur lista yfir leiki (leikjaauðkenni, mannalæsilegt nafn osfrv.).

Leikjagerð

Aðgerðin virkar aðeins með viðurkenndum notendum; hámarksfjöldi leikmanna er samþykktur við inntak, sem og leikjabreytur (til dæmis hvaða stafi á að virkja í þessum leik, hámarksfjöldi leikmanna osfrv.). Sérstök breytu leiksins er tilvist lykilorðs til að taka þátt, sem gerir þér kleift að búa til leiki sem ekki eru opinberir. Sjálfgefið er að almennur leikur er búinn til. Niðurstaða aðgerðarinnar er JSON, sem inniheldur árangursreit sköpunar, einstakt auðkenni leiks og aðrar breytur.

Að taka þátt í leiknum

Aðgerðin virkar aðeins með viðurkenndum notendum, inntakið er auðkenni leiksins og lykilorð hans, ef þetta er óopinber leikur er úttakið JSON með leikjabreytunum. Viðurkenndur notandi sem tók þátt í leiknum, sem og skapari leiksins, eru hér eftir kallaðir leikja þátttakendur.

Skoða leikviðburði

Sérhver óviðkomandi notandi getur beðið um lista yfir atburði fyrir óvirka leiki og viðurkenndur notandi getur fengið lista yfir atburði fyrir hvaða virka leik sem er. Viðbótarfæribreyta við aðgerðina getur verið atburðanúmerið sem notandinn hefur þegar. Í þessu tilviki verða aðeins þeir atburðir sem áttu sér stað síðar skilað á listanum. Með því að ræsa þessa aðgerð reglulega horfir viðurkenndur notandi á hvað er að gerast í leiknum. Þessi aðgerð skilar einnig aðgerðabeiðni sem notandinn getur svarað með því að nota atburðasendingaraðgerð leiksins.

Sendir leikviðburð

Aðgerðin virkar aðeins fyrir þátttakendur í leiknum: það er hægt að hefja leikinn, gera hreyfingu, kjósa, skrifa textaskilaboð sem birtast á lista yfir leikviðburði o.s.frv.
Viðurkenndi notandinn sem bjó til leikinn byrjar að dreifa hlutverkum til allra þátttakenda í leiknum, þar á meðal sjálfum sér, þeir verða að staðfesta hlutverk sitt með sömu aðgerð. Þegar öll hlutverk hafa verið staðfest fer leikurinn sjálfkrafa yfir í næturstillingu.

Tölfræði leiksins

Aðgerðin virkar aðeins fyrir þátttakendur í leiknum; hún sýnir stöðu leiksins, lista og fjölda leikmanna (gælunöfn), hlutverk og stöðu þeirra (hreyft eða ekki), auk annarra upplýsinga. Eins og með fyrri aðgerðina virkar allt aðeins fyrir þátttakendur í leiknum.

Reglulega ræst aðgerðir

Ef leikurinn hefur ekki verið ræstur í einhvern tíma sem tilgreindur var þegar hann var búinn til, verður hann sjálfkrafa fjarlægður af listanum yfir virka leiki með því að nota hreinsa aðgerðina.

Annað reglubundið verkefni er þvinguð skipting á leikstillingu frá nótt til dag og til baka fyrir leiki þar sem þetta gerðist ekki í beygjunni (til dæmis, leikmaður sem þarf að bregðast við leikatburði sendi ekki lausn sína af einhverjum ástæðum ).

Tilkynning

  • Inngangur
  • Að setja upp þróunarumhverfið, skipta verkefninu niður í aðgerðir
  • Bakendavinna
  • Framhlið vinna
  • Setja upp CICD, skipuleggja prófanir
  • Byrjaðu prufuleikjalotu
  • Niðurstöður

Heimild: www.habr.com

Bæta við athugasemd