ACME WhatsApp Bankarstvo - postava GKE

Ovaj post povezan je sa ACME WhatsApp bankarstvom, ako niste pročitali početni dio, kliknite ovdje da biste započeli od početka.

Stvaranje klastera

Možete stvoriti nakupinu različitih načina, ovdje je ideja pokazati neke mogućnosti.

Stvorite klaster pomoću Google Cloud konzole

Stvaranje GKE klastera

Za sada samo napravimo jednostavno okruženje sa zadanim opcijama. Kako bismo smanjili troškove povezane s ovim demo modelom, napravimo unaprijed ispražnjene VM strojeve.

GKE kubernetes konfiguracija klastera

Kliknite Spremi, a zatim stvori gumb za početak pružanja svoje Kubernetes klastera.

Korištenje računskih instancija koje se mogu prethodno iskoristiti

Odlučio sam koristiti pretpotrošne VM-ove kako bih izbjegao velike troškove, iako znam da će moj klaster biti dostupan samo nekoliko dana, a također da testiram otpornost mog rješenja .

Primjeri virtualnih strojeva (PVM-ovi) koji se ranije ispraznjuju prema Googleu:

Prihvatljivi VM-ovi vrlo su pristupačne, kratkotrajne računalne instance pogodne za serijske poslove i radna opterećenja otporna na greške.

Ovo je jako lijepa ideja, vrijedi provjeriti Sandeep Dinesh post o tome ovdje.

Korištenje PVM-ova također stvara prirodni majmun kaosa u vašem sustavu

Ista značajka dostupna je na Amazonu kao EC2 Spot instance i Azure kao VM s niskim prioritetom.

Stvaranje k8s clustera pomoću naredbenog retka

U Google Cloud konzoli postoji opcija za prikaz generiranog naredbenog retka zajedno s opcijom REST, možete ga zamotati u skriptu školjke i prilagoditi prema vašem ukusu.

REST naredba za stvaranje gcloud k8s klastera

Stvorite pomoću Hashicorp Terraform

Ova je opcija preporučena jer možete zadržati stanje svoje infrastrukture tako što ćete je imati na Orkestrirani, Promijenjivi i Deklarativni način (a ne proceduralno), svoju konfiguraciju možete zadržati u SCM-u za verziju verzije koja pomaže u praćenju promjena koje se izvršavaju ,

Da biste započeli s upotrebom Terraform, molimo provjerite ovu vezu.

Stvorite IAM korisnika i nabavite vjerodajnice računa usluge koje će koristiti vaša datoteka skripte Terraform.

$ PROJECT_NAME = $ (gcloud config get-value project) $ gcloud iam servis-računi kreiraju Terraformuser $ gcloud iam popis usluga-računa $ gcloud iam ključevi servisnih računa kreiraju Terraformuser.json --iam-account [email protected]$PROJECT_NAME.iam. gserviceaccount.com

Jednom kada ste stvorili gornju datoteku terase, vrijeme je da izdate sljedeće naredbe za pružanje svoje infrastrukture, ime projekta dinamički se prosljeđuje prilikom pružanja okoliša.

$ PROJECT_NAME = $ (gcloud config get-value projekt)
$ cd 
$ Terraform plan -var 'ime_ projekta = $ PROJECT_NAME' $ primijeni oblik terase -var 'projekt_ime = $ PROJECT_NAME'

Da biste uništili vaš klaster i sve s njim povezane resurse, samo pokrenite sljedeću naredbu:

$ Terraform uništiti

Postavljanje kubectl

Naredba dolje konfigurirat će kubectl da upućuje na vaš klaster dodavanjem javnih potvrda u datoteku .kube / config.

$ gcloud spremnički klasteri dobivaju vjerodajnice --zona
#example: $ gcloud spremnički klasteri dobivaju vjerodajnice acme-banking-cluster --zone us-central1

Ako nemate instaliran gcloud CLI i imate samo kubernetes config datoteku, svoj kubectl možete konfigurirati na sljedeći način:

$ export KUBECONFIG = ~ / .kube / config 

Postavljanje kacige

Jednom kada postavite i pokrenete svoje kubernetes, vrijeme je da konfigurirate svog kormičkog klijenta i poslužitelja (tiller) za implementaciju i upravljanje izdanjima bez problema u vašem kubernetes okruženju.

Ako niste upoznati s kormilom, započnite provjerom ovdje.

Sada kada imate instaliran Helm, kreirajmo RBAC resurse (račun usluge, veze uloga klastera itd.).

Pokrenite sljedeću naredbu da konfigurirate tiller i usmjeri klijenta na njega.

$ helm init - alat za obradu računa

Ovaj korak neće biti potreban u nadolazećoj kormi verziji 3.

Konfiguriranje kontejnerskog registra

Ovaj je korak potreban da bi nacrt mogao gurati slike spremnika nakon što ih lokalno izgradi. Nakon toga, Kubernetes će izvaditi slike spremnika iz registra i instalirati ih na radne čvorove.

Najprije konfigurišemo dacker dacker da ukaže na registar Google Cloud:

$ gcloud auth configure-docker $ gcloud komponente instaliraju docker-vjerodajnice-gcr $ docker-vjerodajnice-gcr configure-docker

Skica skice je alat za skele, stvara za vas kormilarne karte i datoteku deskriptora deskripcije pomoću višeslojnog uvrštavanja na temelju programskog jezika koji koristite.

Nacrt je napisan go-lang i koristi biblioteku pod nazivom Linguist ispod haube za otkrivanje programskog jezika koji se koristi za automatsko kreiranje prilagođenih Dockerfile i Helm ljestvica za vas.

https://github.com/Azure/draft/blob/master/cmd/draft/create.go
  • Konfiguriranje skice

Nacrt se oslanja na Helm i Docker registar. Provjerite ima li ime registra dodano nazivu Googleovog projekta, inače neće raditi.

$ PROJECT_NAME = $ (projekt gcloud config get-value) $ skice config set registra gcr.io/$PROJECT_NAME
$ nacrt init $ cd $ draft create
Ako ste prethodno kreirali Dockerfile, naredba skice skice neće ga promijeniti.
  • Izvođenje implementacije

Sada kada ste konfigurirali sve preduvjete za skiciranje, zadatak implementacije trebao bi biti jednostavan, samo trebamo izdati naredbu u nastavku:

$ sastaviti
Skica raspoređivanja

Ako dođete do pogreške prilikom izdavanja aplikacije, kormilar nije u mogućnosti nadograditi izdanje, da biste to riješili, pokrenite sljedeću naredbu:

$ helm del --purge 

Ulazak

U ovom trenutku imamo Kubernetes klaster i u mogućnosti smo implementirati naše mikro usluge pomoću nacrta na bešavan način. Uvođenje će stvoriti podsisteme i resurse za usluge. Sada je vrijeme za konfiguriranje Ingress komponente odgovorne za distribuciju tereta, usmjeravanje dolaznih zahtjeva u različite usluge.

  • Instaliranje Nginx Ingress-a

Sljedeća naredba stvorit će Nginx kontroler i podupirače.

$ helm instaliraj stabilan / nginx-ulazak --namespace = zadani --name = nginx-ulazak
  • Izrada configMaps s pravilima usmjeravanja za Ingress

Možete stvoriti yaml datoteku configmap ručno ili možete koristiti datoteku ingress.yaml generiranu naredbom Nacrt za kreiranje kao dio stvaranja grafikona. Na slici ispod, samo trebamo promijeniti direktivu iz "omogućeno: lažno" u "omogućeno: istinito" u datoteci values.yaml da aktiviramo Ingress pravilo za svoju uslugu.

Ako ga ostavite kao lažnog, Nacrt neće stvoriti konfiguracijski okvir pravila Ingress.

Konfiguracija napredovanja
  • Usmjeravanje na usluge u različitom prostoru imena

Ulazak u Nginx ima nekoliko trikova kako biste mogli preusmjeriti uslugu raspoređenu u drugom prostoru imena. Morao sam stvoriti vanjsku uslugu kako je opisano u nastavku:

apiVersion: v1 vrsta: Metapodaci usluge: null name: Promheus namespace: nadzorni spec: null type: ExternalName externalName: prometheus.monitoring.svc.cluster.local

Gornja vanjska usluga mora se stvoriti u odabranom prostoru imena za ulazak. Vanjsko ime mora slijediti konvenciju:

, .svc.cluster.local
  • Testiranje Nginx Ingressa

Nginx Ingress može rutirati na temelju različitih pravila, ali glavno je ocjenjivanje zaglavlja Hosta, ako postoji podudaranje, tada se ruta događa.

$ curl -H 'Domaćin: acme-banking.com' http: // node-port-ip: port / kontekst

Ili možete koristiti kromirano proširenje ModHeader kao što je prikazano u nastavku:

ModHeaders krom proširenje

MongoDB

Korak je potreban za naše rješenje za pohranu i dohvaćanje podataka o proizvodu radi obogaćivanja razgovora s chatbotom.

Upotrijebljena MongoDB konfiguracija temelji se na StatefulSetu i bočnim kolicima kako je opisano u postu na blogu Running MongoDB on Kubernetes with StatefulSets

$ git klon https://github.com/thesandlord/mongo-k8s-sidecar.git $ cd ./mongo-k8s-sidecar/example/StatefulSet $ ​​kubectl se primjenjuje -f googlecloud_ssd.yaml $ kubectl primijeni -f mongo-statefulset. yaml
  • Rješavanje nekih problema na putu
  1. Ako se suočite sa problemima koji se odnose na male datoteke, riješen je ažuriranjem mongo slike na verziju 4 (mongo: 4.0).
  2. Ako se pojavi pogreška "kod: 13435, codeName: NotMasterNoSlaveOk"
$ mongo> rs.slaveOk ()
# Ili ako imate više replika
rs.initiate ({_id: "myReplSet", verzija: 1, članovi: [{_id: 0, domaćin: "mongodb0.example.net:27017"}, {_id: 1, domaćin: "mongodb1.example.net: 27017 "}, {_id: 2, host:" mongodb2.example.net:27017 "}]})

3. Ako se pojavi pogreška "Pogreška: Replikacija još nije konfigurirana", rješenje može pokrenuti naredbu u nastavku.

$ mongo> rs.initiate ()

4. Promijenite Mongo StatefulSet definiciju koja će se vezivati ​​za adresu 0.0.0.0;

MongoDB vezanje na bilo kojoj mreži
  • Izrada MongoDB kolekcija
$ kubectl exec -it mongo-0 / bin / sh $ mongo> upotreba > db. .insert ({id: 1, naziv: 'Proizvod 01'})
Gdje: * - Ime vaše baze podataka, kreirat će se ako ne postoji * - Naziv kolekcije

Promatranje s Prometejem i Grafanom

Promatranje obuhvaća raspodijeljeno praćenje, nadgledanje / uzbunjivanje i spajanje zapisnika te analitiku. Obuhvatamo samo dio praćenja, uključujući infrastrukturu i praćenje poslovnih aktivnosti.

#Instalacija Prometheus $ helm instalacije --ime prometheus stabilan / prometheus - nadgledanje prostora - set poslužitelja.persistentVolume.enabled = true
#Instaliranje Grafana $ helm install - ime grafana stabilna / grafana

Možete dodati više opcija u svojoj naredbi za kormilo ako želite više prilagodbe za Prometej i Grafanu, pogledajte dokumentaciju ovdje i ovdje.

  • Konfiguriranje Prometeja

https://gist.github.com/victorpaulo/9c4399cc4ffb22bd5847a6e9d0a1406b

Dolje je istaknut važan dio, odjeljak "scrape_configs" i "target", ovaj predstavlja usluge za koje želite da indeksira strukturu na temelju krajnje točke, zadana postavka je "/ metrics".

scrape_configs: - naziv posla: 'ACME bankarski hackathon' shema: http static_configs: - target: ["10.0.14.59:8080", "10.0.12.103:8080", "10.0.14.245:8080"]

Preporučujem da IP adresu zamijenite DNS imenom poput:

, .svc.cluster.local
  • Konfiguriranje nadzorne ploče Grafana

Grafana je jednostavna za postavljanje, prvo moramo dodati izvor podataka u prometheus, a zatim stvoriti nadzornu ploču.

Konfiguracija Grafana podataka prema Prometeju

Izvezio sam definiciju moje nadzorne ploče koja je dostupna ispod.

https://gist.github.com/victorpaulo/82daf3f33b5cf4cfe1d74286744eeb46

Moja nadzorna ploča - oprosti zbog snimke zaslona :-)

Sljedeći će post opisati kako postaviti chatbot na IBM Watson Assistant, kako prevesti njegove odgovore na glas pomoću IBM Watson Text-to-Speech API-ja i kako koristiti AWS S3 za pohranu audio datoteka. Molimo pogledajte ovdje.