
Selles artiklis seadistan ma mĂ€ngu «BĂŒliin» arendamiseks töökeskkonna ning jagan tĂ€nase mĂ€ngu osi, mida saab kasutada OpenFaaS-is. KĂ”iki toiminguid teen Linuxis ning Kubernetes'i seadistan minikube'i abil, kasutades VirtualBoxi. Minu töökesimusel on 2 protsessorituuma ja 12 GB RAM-i, sĂŒsteemidiskina kasutan SSD-d. Arendamiseks kasutan peamise sĂŒsteemina Debian 8, millel on installitud paketid emacs, sudo, git ja virtualbox; kĂ”ik muu installin GitHubist ja muudest allikatest. Need rakendused installime /usr/local/bin, kui pole muud sĂ€testatud. Alustame!
Töökeskkonna ettevalmistamine
Go installimine
JĂ€rgige ametlikel veebilehtedel ametlikke juhiseid:
$ 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öövÔimet:
$ 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Ă€rgige ametlikel veebilehtedel ametlikke juhiseid:
$ curl -sSL https://cli.openfaas.com | sudo -E sh
x86_64
Laadimine paketti https://github.com/openfaas/faas-cli/releases/download/0.11.3/faas-cli as /tmp/faas-cli
Laadimine lÔpule viidud.
KÀivitamine piisavate Ôigustega faas-cli liigutamiseks /usr/local/bin
Uus versioon faas-cli'ist on installitud /usr/local/bin
Alias 'faas' on loodud 'faas-cli' jaoks.
___ _____ ____
/ _ _ __ ___ _ __ | ___|_ _ __ _/ ___|
| | | | '_ / _ '_ | |_ / _` |/ _` ___
| |_| | |_) | __/ | | | _| (_| | (_| |___) |
___/| .__/ ___|_| |_|_| __,_|__,_|____/
|_|
CLI:
commit: 73004c23e5a4d3fdb7352f953247473477477a64
version: 0.11.3Lisaks saab aktiveerida bash-completion'i:
faas-cli completion --shell bash | sudo tee /etc/bash_completion.d/faas-cliKubernetesi installimine ja seadistamine
Arenduseks piisab minikubist, seega installime selle ja kubeleti /usr/local/bin, rakenduste installimiseks installime ka helm'i:
$ 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
Automaatne 'virtualbox' draiveri valik (alternatiiv: [])
Virtuaalmasina alglaadimise pildi allalaadimine ...
> 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
Virtuaalmasina loomine virtualboxis (CPU-d=2, MĂ€lu=8192MB, Disk=20000MB) ...
Kubernetes v1.17.0 ettevalmistamine Docker '19.03.5' ...
kubeadm v1.17.0 allalaadimine
kubelet v1.17.0 allalaadimine
Piltide allalaadimine ...
Kubernetes kÀivitamine ... Ootame klastrit online ...
Valmis! kubectl on nĂŒĂŒd seadistatud kasutama "minikube"Kontrollin:
$ kubectl get pods --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system coredns-6955765f44-knlcb 1/1 KĂ€ib 0 29m
kube-system coredns-6955765f44-t9cpn 1/1 KĂ€ib 0 29m
kube-system etcd-minikube 1/1 KĂ€ib 0 28m
kube-system kube-addon-manager-minikube 1/1 KĂ€ib 0 28m
kube-system kube-apiserver-minikube 1/1 KĂ€ib 0 28m
kube-system kube-controller-manager-minikube 1/1 KĂ€ib 0 28m
kube-system kube-proxy-hv2wc 1/1 KĂ€ib 0 29m
kube-system kube-scheduler-minikube 1/1 KĂ€ib 0 28m
kube-system storage-provisioner 1/1 KĂ€ib 1 29mOpenFaaS'i installatsioon
Arendajad soovitavad luua 2 nimemÀrki tööks:
$ kubectl apply -f https://raw.githubusercontent.com/openfaas/faas-netes/master/namespaces.yml
namespace/openfaas loodud
namespace/openfaas-fn loodudLisame helm'i hoidla:
$ helm repo add openfaas https://openfaas.github.io/faas-netes/
"openfaas" on lisatud teie hoidlatesseGraafikus on vÔimalus seada parool enne installimist, kasutame seda ja salvestame juurdepÀÀsuandmed k8s salajana:
$ 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 createdTeeme juurutamise:
$ helm repo update
Palun oota, kuni toome sinu graafikute registritest uusimad andmed...
...Eduklalt saime vÀrskenduse "openfaas" graafiku registrist
Uuendamine lÔpule viidud. Head Helmist!
$ helm upgrade openfaas --install openfaas/openfaas --namespace openfaas --set functionNamespace=openfaas-fn --set generateBasicAuth=false
Vabastus "openfaas" ei eksisteeri. Paigaldame selle nĂŒĂŒd.
NIMI: openfaas
VIIMATI PAIGALDATUD: Reede 25. detsember 2019 10:28:22
NIMETUS: openfaas
OLEK: paigaldatud
REVISION: 1
TESTIDE KOMPLEKT: Puudub
MĂRKUSED:
Kinnitamaks, et openfaas on kÀivitunud, kÀivita:
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"
NIMI VALMIS UP-TO-DATE SAADAVAL VANUS
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öövÔimet:
$ kubectl rollout status -n openfaas deploy/gateway
deployment "gateway" edukatiiviÔigust tÔhusalt tÀidetud
$ kubectl port-forward -n openfaas svc/gateway 8080:8080 &
[1] 6985
Edastamine 127.0.0.1:8080 -> 8080
$ echo -n $PASSWORD | faas-cli login --username admin --password-stdin
Kutsumine OpenFaaS serverisse volituste valideerimiseks...
Seos 8080 jaoks
HOIATUS! Suhtlus ei ole turvaline, palun kaaluge HTTPS-i kasutamist. Letsencrypt.org pakub tasuta SSL/TLS sertifikaate.
vÔtmed salvestatud admin http://127.0.0.1:8080
$ faas-cli list
Funktsioon Kutsed ReplikadMongodb installimine
Installeerime kÔik helm'i abil:
$ helm repo add stable https://kubernetes-charts.storage.googleapis.com/
"stable" on teie reposse lisatud
$ helm install stable/mongodb --generate-name
NIMI: mongodb-1577466908
VIIMASE KĂITAMISE KUUPĂEV: Reede 25. dets 11:15:11 2019
NIMES: default
OLEK: paigaldatud
REVISION: 1
TESTIMISGRUPP: Puudub
MĂRGID:
** Palun olge kannatlik, kui kaardid on paigaldamisel **
MongoDB-le pÀÀseb ligi 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)
Teie andmebaasi ĂŒhendamiseks 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
Teie andmebaasi ĂŒhendamiseks vĂ€ljaspool klastrit kĂ€ivitage 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_PASSWORDKontrollin:
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Àsku, proovige vajutada enter.
> db.version();
4.0.14Vajutame ctrl+D, et konteinerist vÀlja minna.
Emacsi seadistamine
PĂ”himĂ”tteliselt oli kĂ”ik juba seadistatud , seega ei hakka ma detailselt ĂŒles kirjutama.
MĂ€ngu jagamine funktsioonideks
Funktsioonide vahel kommunikatsioon toimub http protokolli kaudu, erinevate funktsioonide vahel tagatakse lÀbipaistev autentimine JWT abil. Tokeneid, samuti mÀngu olekut, mÀngijate andmeid, kÀikude jadasid ja muud teavet hoitakse mongodb-s. Vaatame vÀlja mÔned huvitavamad funktsioonid.
Registreerimine
Selle funktsiooni sisendiks on JSON mĂ€ngijate hĂŒĂŒdnime ja parooliga. Kui seda funktsiooni kutsutakse, kontrollitakse, et seda hĂŒĂŒdnime ei oleks andmebaasis, ja kui kontroll on edukas, siis sisestatakse hĂŒĂŒdnimi ja parooli hash andmebaasi. Registreerimine on vajalik aktiivseks osalemiseks mĂ€ngus.
Sisend
Funktsiooni sisendiks on JSON mĂ€ngija hĂŒĂŒdnime ja parooliga. Kui hĂŒĂŒdnimet on andmebaasis olemas ja parool on edukalt valideeritud, tagastatakse JWT, mida tuleb edastada teistele funktsioonidele nende kutsumisel. Samuti toimub erinevate teenuste sisenemiste, nĂ€iteks viimase sissepÀÀsu aja, andmebaasi sisestamine.
MĂ€ngude loendi vaatamine
Iga autoriseerimata kasutaja vĂ”ib kĂŒsida kĂ”igi mĂ€ngude loendit, vĂ€lja arvatud aktiivsed. Autoriseeritud kasutaja nĂ€eb ka aktiivsete mĂ€ngude loendit. Funktsiooni tulemus on JSON, mis sisaldab mĂ€ngude loendeid (mĂ€ngu identifikaator, loetav nimi jne).
MĂ€ngu loomine
Funktsioon töötab ainult registreeritud kasutajatega, sisendina vÔetakse maksimaalne mÀngijate arv ja mÀngu parameetrid (nÀiteks, milliseid tegelasi selles mÀngus aktiveerida, maksimaalne mÀngijate arv jne). Eraldi mÀngu parameetriks on parooli olemasolu liitumiseks, mis vÔimaldab luua mittetegevusi mÀnge. Vaikimisi luuakse avalik mÀng. Funktsiooni tulemuseks on JSON, milles on loomise edukuse vÀli, mÀngu unikaalne identifikaator ning muud parameetrid.
Liitu mÀnguga
Funktsioon töötab ainult registreeritud kasutajatega, sisendina - mÀngu identifikaator ja selle parool, kui see on mittetegevuslik mÀng, vÀljastatakse - JSON mÀngu parameetritega. Registreeritud kasutaja, kes liitub mÀnguga, ja mÀngu looja nimetatakse edaspidi mÀngu osalisteks.
MĂ€ngu sĂŒndmuste vaatamine
Iga volitamata kasutaja saab taotleda passiivsete mĂ€ngude sĂŒndmuste loetelu, samas kui volitatud kasutaja saab saada loetelu kĂ”ikidest aktiivsetest mĂ€ngudest. Funktsiooni tĂ€iendavaks parameetriks vĂ”ib olla sĂŒndmuse number, mis kasutajal juba on. Sellisel juhul tagastatakse loendis ainult need sĂŒndmused, mis on toimunud hiljem. Perioodiliselt selle funktsiooni kasutamine vĂ”imaldab volitatud kasutajal nĂ€ha, mis mĂ€ngus toimub. Funktsioon tagastab ka tegevuse kutsumise, millele kasutaja saab reageerida mĂ€ngu sĂŒndmuse saatmise funktsiooni kaudu.
Saatke mĂ€ngu sĂŒndmus
Funktsioon töötab ainult mĂ€ngu osalejate jaoks: on vĂ”imalik mĂ€ng kĂ€ivitada, kĂ€ik teha, hÀÀletada, kirjutada tekstisĂ”num, mis kuvatakse mĂ€ngu sĂŒndmuste loendis jne.
Volitatud kasutaja, kes on mĂ€ngu loonud, kĂ€ivitab rollide jagamise kĂ”ikidele mĂ€ngu osalejatele, sealhulgas endale, ning nad peavad oma rolli kinnitama sama funktsiooni kaudu. Kui kĂ”ik rollid on kinnitatud, lĂ€heb mĂ€ng automaatselt ööreĆŸiimi.
MĂ€ngu statistika
Funktsioon töötab ainult mÀngu liikmete jaoks, nÀidates mÀngu seisundit, mÀngijate nimekirja ja arvu (vÀljaanded), rolle ning nende staatust (kas kÀik on tehtud vÔi mitte) ning muud teavet. Nagu eelneva funktsiooni puhul, töötab kÔik ainult mÀngu liikmete jaoks.
Perioodiliselt kÀivitatavad funktsioonid
Kui mÀngu ei ole teatud aja jooksul kÀivitatud, nagu mÀÀratud mÀngu loomisel, eemaldatakse see automaatselt aktiivsete mÀngude loendist puhastamise funktsiooni abil.
Veel ĂŒks perioodiline ĂŒlesanne on mĂ€ngureĆŸiimi sundĂŒlemine ööst pĂ€evaks ja tagasi mĂ€ngude jaoks, millel seda ei toimunud kĂ€igus (nĂ€iteks mĂ€ngija, kes peab reageerima mĂ€ngusĂŒndmusele, ei ole mingil pĂ”hjusel oma lahendust saatnud).
Teade
- Arenduse keskkonna seadistamine, ĂŒlesande jagamine funktsioonideks
- Tööd backendis
- Tööd frontendis
- CICD seadistamine, testimise korraldamine
- ProovimÀngu sessiooni kÀivitamine
- KokkuvÔte
Allikas: habr.com
