
Selles artiklis seadistan mĂ€ngude arendamiseks töötava keskkonna "BĂŒliinid" ning jagan mĂ€ngu erinevateks osadeks, mida saab kasutada OpenFaaS-is. KĂ”ik toimingud teen Linuxis, Kubernetes kĂ€ivitame minikubeâi abil, kasutades VirtualBoxi. Minu töömasinas on 2 protsessorituuma ja 12 GB RAM-i, sĂŒsteemi ketas on SSD. Arenduse peamise sĂŒsteemina kasutan Debian 8, millel on installitud paketid emacs, sudo, git ja virtualbox; kĂ”ik muu paigaldan GitHubist ja teistest allikatest. Need rakendused installime /usr/local/bin, kui pole teisiti mĂ€rgitud. Alustame!
Töökeskkonna ettevalmistamine
Go paigaldamine
JĂ€rgime ametlikul veebilehel olevat juhendit:
$ 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' >> ~/.profileKontrollime töökindlust:
$ 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 paigaldamine
JĂ€rgime ametlikul veebilehel olevat juhendit:
$ curl -sSL https://cli.openfaas.com | sudo -E sh
x86_64
Laadimine paketist https://github.com/openfaas/faas-cli/releases/download/0.11.3/faas-cli as /tmp/faas-cli
Laadimine lÔpetatud.
KÀivitamine piisavate Ôigustega, et proovida faas-cli liigutada /usr/local/bin
Uus versioon faas-cli-st on installitud /usr/local/bin
Loodud alias 'faas' 'faas-cli' jaoks.
___ _____ ____
/ _ _ __ ___ _ __ | ___|_ _ __ _/ ___|
| | | | '_ / _ '_ | |_ / _` |/ _` ___
| |_| | |_) | __/ | | | _| (_| | (_| |___) |
___/| .__/_ ___|_| |_|_| __,_|__,_|____/
|_|
CLI:
commit: 73004c23e5a4d3fdb7352f953247473477477a64
versioon: 0.11.3Lisaks saab lubada bash-completion kasutamise:
faas-cli completion --shell bash | sudo tee /etc/bash_completion.d/faas-cliKubernetesi installimine ja seadistamine
Arendamiseks piisab minikubeâist, nii et installime selle ja kubeleti /usr/local/bin, samuti paigaldame rakenduste jaoks helm:
$ 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/binKĂ€ivitame minikube:
$ minikube start
minikube v1.6.2 Debian 8.11-l
Automaatiliselt valiti 'virtualbox' draiver (alternatiivid: [])
Laadimine VM alglaadimisfail ...
> 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
Virtuaalboxi VM loomine (CPU-d=2, MĂ€lu=8192MB, Disk=20000MB) ...
Kubernetes v1.17.0 ettevalmistamine Docker '19.03.5' ...
kubeadm v1.17.0 laadimine
kubelet v1.17.0 laadimine
Pildid alla laadimine ...
Kubernetes kÀivitamine ... Ootame, kuni klaster on online ...
Sooritatud! kubectl on nĂŒĂŒd konfigureeritud kasutama "minikube"Kontrollime:
$ kubectl get pods --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system coredns-6955765f44-knlcb 1/1 Jookseb 0 29m
kube-system coredns-6955765f44-t9cpn 1/1 Jookseb 0 29m
kube-system etcd-minikube 1/1 Jookseb 0 28m
kube-system kube-addon-manager-minikube 1/1 Jookseb 0 28m
kube-system kube-apiserver-minikube 1/1 Jookseb 0 28m
kube-system kube-controller-manager-minikube 1/1 Jookseb 0 28m
kube-system kube-proxy-hv2wc 1/1 Jookseb 0 29m
kube-system kube-scheduler-minikube 1/1 Jookseb 0 28m
kube-system storage-provisioner 1/1 Jookseb 1 29mOpenFaaS'i installimine
Arendajad soovitavad luua 2 namespace'i tööks:
$ kubectl apply -f https://raw.githubusercontent.com/openfaas/faas-netes/master/namespaces.yml
namespace/openfaas loodud
namespace/openfaas-fn loodudLisame helm'i registri:
$ helm repo add openfaas https://openfaas.github.io/faas-netes/
"openfaas" on teie registritesse lisatudChart'is on vÔimalus mÀÀrata parool enne installimist, kasutame seda ja salvestame sisselogimisandmed k8s saladusena:
$ PASSWORD=verysecurerandompasswordstring
$ kubectl -n openfaas create secret generic basic-auth --from-literal=basic-auth-user=admin --from-literal=basic-auth-password="$PASSWORD"
saladus/basic-auth loodudTeostame juurutamise:
$ helm repo update
Oodake, kuni saame teie chart'i registritest uusimad ...
...Edukas uuendus "openfaas" chart'i registrist
Uuendus lÔpetatud. Head Helmingut!
$ helm upgrade openfaas --install openfaas/openfaas --namespace openfaas --set functionNamespace=openfaas-fn --set generateBasicAuth=false
VĂ€ljalaskmine "openfaas" ei eksisteeri. Paigaldame selle nĂŒĂŒd.
NIMI: openfaas
VIIMASE KORRA PAIGALDATUD: Reede, 25. dets 2019 10:28:22
NAMESPACE: openfaas
STATUS: paigaldatud
REVISION: 1
TESTI KOMPLEKT: Puudub
MĂRKUSED:
Kinnitage, et openfaas on kÀivitunud, kÀivitades:
kubectl -n openfaas get deployments -l "release=openfaas, app=openfaas"MÔne aja pÀrast kÀivitame soovitatud kÀsu:
$ 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 114sKontrollime töökindlust:
$ 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 ReplicasMongoDB installimine
Installeerime kÔik helm'i abil:
$ helm repo add stable https://kubernetes-charts.storage.googleapis.com/
"stable" on lisatud teie hoidlatesse
$ 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:
** Palun olge kannatlik, kuni skeem paigaldatakse **
MongoDB-d saab ligipÀÀseda sadama kaudu 27017 jÀrgmise DNS-nime kaudu teie klastris:
mongodb-1577466908.default.svc.cluster.local
Root parooli saamiseks kÀivitage:
export MONGODB_ROOT_PASSWORD=$(kubectl get secret --namespace default mongodb-1577466908 -o jsonpath="{.data.mongodb-root-password}" | base64 --decode)
Andmebaasiga ĂŒhenduse loomiseks kĂ€ivitage jĂ€rgmine kĂ€sk:
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
Selleks, et luua ĂŒhendus oma andmebaasiga klastrist vĂ€ljaspool, tĂ€itke jĂ€rgmised kĂ€sud:
kubectl port-forward --namespace default svc/mongodb-1577466908 27017:27017 &
mongo --host 127.0.0.1 --authenticationDatabase admin -p $MONGODB_ROOT_PASSWORDKontrollime:
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)
Kui te ei nÀe kÀskluse kÀivitamise kÀsurealt, proovige vajutada Enter.
> db.version();
4.0.14VĂ€ljumiseks vajutage ctrl+D.
Emacsi seadistamine
PĂ”himĂ”tteliselt oli kĂ”ik juba seadistatud , nii et ma ei hakka seda ĂŒksikasjalikult kirjeldama.
MĂ€ngu jagamine funktsioonideks
Funktsioonide vahelise suhtlemise tagab HTTP-protokoll, samas kui erinevate funktsioonide vahelise autentimise tagab JWT. Tokenite, mÀngu staatuse, mÀngijate andmete, mÀngude kÀikude sekvenste ja muu teabe salvestamiseks kasutatakse MongoDB-d. Vaatame lÀhemalt mÔned huvitavad funktsioonid.
Registreerimine
Selle funktsiooni sisendiks on JSON mĂ€ngu hĂŒĂŒdnime ja parooliga. Funktsiooni vĂ€ljakutsumise korral kontrollitakse, kas hĂŒĂŒdnime ei ole andmebaasis, ja eduka kontrolli korral lisatakse hĂŒĂŒdnimi ja parooli hash andmebaasi. Registreerimine on vajalik aktiivseks osalemiseks mĂ€ngus.
SissepÀÀs
Funktsiooni sisendiks on JSON mĂ€ngu hĂŒĂŒdnime ja parooli, mille olemasolu korral andmebaasis ja paroolikontrolli eduka sooritamise korral tagastatakse JWT, mida tuleb edastada teistele funktsioonidele nende kutsumisel. Samuti tehakse andmebaasi erinevate teenusrekordite sisestamine, nĂ€iteks viimase sisenemise aeg jms.
MĂ€ngude nimekirja vaatamine
Igasugune autoriseerimata kasutaja vĂ”ib kĂŒsida kĂ”igi mĂ€ngude nimekirja, vĂ€lja arvatud aktiivsed. Autoriseeritud kasutaja nĂ€eb ka aktiivsete mĂ€ngude nimekirja. Funktsiooni tulemuseks on JSON, mis sisaldab mĂ€ngude loendeid (mĂ€ngu identifikaator, loetav nimi jms).
MĂ€ngu loomine
Funktsioon töötab ainult autoriseeritud kasutajatega, sisendiks on maksimaalne mĂ€ngijate arv ja mĂ€ngu parameetrid (nĂ€iteks milliseid tegelasi selles mĂ€ngus aktiveerida, maksimaalne mĂ€ngijate arv jms). Ăks eraldi mĂ€ngu parameeter on sisenemisparooli olemasolu, mis vĂ”imaldab luua mitteavalikke mĂ€nge. Vaikimisi luuakse avalik mĂ€ng, funktsiooni tĂ€itmise tulemusena saadakse JSON, milles on edukuse mÀÀratlemise vĂ€li, mĂ€ngu unikaalne identifikaator ja muud parameetrid.
MĂ€nguga liitumine
Funktsioon töötab ainult autoriseeritud kasutajatega, sisendiks on mÀngu identifikaator ja selle parool, kui see on mitteavalik mÀng, vÀljundiks on mÀngu parameetritega JSON. Autoriseeritud kasutajat, kes on mÀnguga liitunud, ning mÀngu looja nimetatakse edaspidi mÀngu osalisteks.
MĂ€ngu sĂŒndmuste vaatamine
Igasugune autoriseerimata kasutaja vĂ”ib kĂŒsida mitteaktiivsete mĂ€ngude sĂŒndmuste nimekirja, aga autoriseeritud kasutaja saab saada aktiivsete mĂ€ngude sĂŒndmuste nimekirja. Funktsiooni lisaparameetrina vĂ”ib edastada sĂŒndmuse numbri, mis kasutajal juba on. Sellisel juhul tagastatakse ainult need sĂŒndmused, mis on toimunud hiljem. Autoriseeritud kasutaja vaatab perioodiliselt, mis mĂ€ngus toimub, kĂ€ivitades selle funktsiooni. Samuti tagastab see funktsioon toimingu taotluse, millele kasutaja saab reageerida mĂ€ngu sĂŒndmuse saatmise funktsiooniga.
MĂ€ngu sĂŒndmuse saatmine
Funktsioon töötab ainult mĂ€ngijatele: vĂ”imalus mĂ€ngu alustada, kĂ€iku teha, hÀÀletada, kirjutada tekstisĂ”num, mis kuvatakse mĂ€ngu sĂŒndmuste loendis jne.
Autoriseeritud kasutaja, kes on mĂ€ngu loonud, jagab rolle kĂ”igile mĂ€ngijatele, sealhulgas endale, nad peavad kinnitama oma rolli sama funktsiooni kaudu. Kui kĂ”ik rollid on kinnitatud, lĂ€heb mĂ€ng automaatselt ööreĆŸiimi.
MĂ€ngu statistika
Funktsioon töötab ainult mĂ€ngijatele, nĂ€itab mĂ€ngu staatust, mĂ€ngijate nimekirja ja arvu (pseudonĂŒĂŒmid), rolle ja nende staatust (kas on kĂ€ik tehtud vĂ”i mitte) ning muud teavet. Nagu eelneva funktsiooni puhul, toimib kĂ”ik ainult mĂ€ngijate jaoks.
Perioodiliselt kÀitatavad funktsioonid
Kui mÀngu ei ole teatud aja jooksul, mis mÀÀratakse mÀngu loomisel, kÀitatud - eemaldatakse see automaatselt aktiivsete mÀngude loendist koristusfunktsiooni abil.
Veel ĂŒks perioodiline ĂŒlesanne - sundida mĂ€ngu reĆŸiimi ööst pĂ€eva ja vastupidi, kui see ei ole kĂ€igul aset leidnud (nĂ€iteks mĂ€ngija, kes peab reageerima mĂ€ngusĂŒndmustele, ei ole mingil pĂ”hjusel oma lahendust esitanud).
Teade
- Arenduskeskkonna seadistamine, ĂŒlesande jagamine funktsioonideks
- Backend tööde teostamine
- Frontend tööde teostamine
- CICD seadistamine, testimise korraldamine
- MĂ€ngu prooviseansi korraldamine
- Summary
Allikas: habr.com
