«Uued BĂŒlini». Sööme elevanti osade kaupa

«Uued BĂŒlini». Sööme elevanti osade kaupa

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

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

faas-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.3

Lisaks saab aktiveerida bash-completion'i:

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

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

KĂ€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          29m

OpenFaaS'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 loodud

Lisame helm'i hoidla:

$ helm repo add openfaas https://openfaas.github.io/faas-netes/
"openfaas" on lisatud teie hoidlatesse

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

Teeme 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           114s

Kontrollime 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     Replikad

Mongodb 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_PASSWORD

Kontrollin:

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.14

Vajutame ctrl+D, et konteinerist vÀlja minna.

Emacsi seadistamine

PĂ”himĂ”tteliselt oli kĂ”ik juba seadistatud selles artiklis, 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

  • Sissejuhatus
  • 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

Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster