Erstellen Sie mit Kubernetes eine TODO-API für Golang

Hallo alle zusammen! Vor dem Start des Kurses zur Infrastrukturplattform auf Kubernetes-Basis haben wir eine Übersetzung eines weiteren interessanten Materials vorbereitet.



Dieser Artikel richtet sich an Neulinge in Kubernetes, die ein praktisches Beispiel für das Schreiben einer Golang-API zum Verwalten der TODO-Liste und das anschließende Bereitstellen auf Kubernetes verstehen möchten.

Jeder Entwickler liebt eine gute TODO-Liste, oder? Wie könnten wir uns sonst anders organisieren?


Jeder Entwickler liebt eine gute TODO-Anwendung, oder?

Zunächst überprüfen wir die Liste der erforderlichen Komponenten, konfigurieren dann Kubernetes, stellen die Postgresql-Datenbank bereit und installieren ein Anwendungsframework, mit dessen Hilfe wir die Go-API in Kubernetes problemlos bereitstellen können, ohne uns auf die Details zu konzentrieren.

Wir werden zwei Endpunkte in der API erstellen - einen zum Erstellen eines neuen TODO-Datensatzes und einen zum Auswählen aller TODO-Datensätze.

Der gesamte Code aus diesem Tutorial ist auf GitHub verfügbar.

Die Liste der notwendigen Komponenten:


  • Lokal installierter Docker

Kubernetes führt Code in Container-Images aus, daher müssen Sie Docker auf Ihrem Computer installieren.

Installieren Sie Docker: https://www.docker.com
Registrieren Sie ein Docker Hub-Konto, um Ihre Docker-Images zu speichern: https://hub.docker.com/

  • Kubernetes Cluster


Sie können entweder einen lokalen oder einen Remote-Cluster auswählen, aber welcher ist besser? Vereinfachte Optionen wie k3d funktionieren auf jedem Computer, auf dem Docker ausgeführt werden kann, sodass für die Ausführung eines lokalen Clusters nicht mehr viel RAM erforderlich ist. Ein Remote-Cluster kann auch eine sehr effiziente Lösung sein. Beachten Sie jedoch, dass alle Docker-Images für jede Änderung hochgeladen und hochgeladen werden müssen.

Installieren Sie k3d: https://github.com/rancher/k3d

k3d installiert kubectl nicht (dies ist die CLI für Kubernetes). Installieren Sie es daher separat von hier: https://kubernetes.io/docs/tasks/tools / install-kubectl

  • Golang


Sie müssen Golang auch mit der IDE auf Ihrem Computer installieren. Go ist kostenlos und kann unter dem folgenden Link für MacOS, Windows oder Linux heruntergeladen werden: https://golang.org/dl

  • IDE


Ich würde empfehlen, Visual Studio Code zu verwenden. Es ist kostenlos und enthält eine Reihe von Plugins für Go, die Sie hinzufügen können. Einige Kollegen bevorzugen Goland von Jetbrains. Wenn Sie ein Java-Programmierer sind, würden Sie wahrscheinlich lieber für Goland bezahlen, da dies Sie an die anderen Produkte erinnert.

Installieren Sie VSCode oder Golang .

Erstellen Sie einen Cluster


Sie müssen die gesamte im vorherigen Abschnitt angegebene Software installieren.

Erstellen Sie mit k3d einen neuen Cluster:


k3d create

Konfigurieren Sie kubectl so, dass es auf einen neuen Cluster verweist. Denken Sie daran, dass mehrere Cluster von einem Computer aus verwendet werden können. Daher ist es äußerst wichtig, auf den richtigen zu verweisen:

export KUBECONFIG="$(k3d get-kubeconfig --name='k3s-default')"


Stellen Sie sicher, dass der Cluster mindestens einen Knoten hat. Hier können Sie sehen, dass ich Kubernetes 1.17 installiert habe - eine relativ neue Version:

kubectl get node
NAME                     STATUS   ROLES    AGE   VERSION
k3d-k3s-default-server   Ready    master   48s   v1.17.0+k3s.1


Wir werden unsere TODO-Datensätze in der Datenbanktabelle speichern, daher müssen wir sie jetzt installieren. Postgresql ist eine beliebte relationale Datenbank, die wir mithilfe des Helm-Diagramms in einem Cluster installieren können.

Installieren Sie Arkade


arkade ist ein CLI Go, ähnlich wie "Brew" oder "Apt-Get", jedoch für Kubernetes-Anwendungen. Es verwendet ein Helm-, Kubectl- oder CLI-Projekt, um ein Projekt oder Produkt in Ihrem Cluster zu installieren.

curl -sLS https://dl.get-arkade.dev | sudo sh


Installieren Sie nun Postgresql

arkade install postgresql
===================================================================== = PostgreSQL has been installed.                                    =
=====================================================================


Sie sehen auch Informationen zur Verbindungszeichenfolge und zum Starten der Postgresql-CLI über das Docker-Image im Cluster.

Sie können diese Informationen jederzeit mit erhalten arkade info postgresql.

Wir werden das Tabellenlayout entwerfen

CREATE TABLE todo (
 id              INT GENERATED ALWAYS AS IDENTITY,
 description     text NOT NULL,
 created_date    timestamp NOT NULL,
 completed_date  timestamp NOT NULL
);


Führen Sie aus arkade info postgresql, um die Verbindungsinformationen erneut abzurufen. Es sollte ungefähr so ​​aussehen:

export POSTGRES_PASSWORD=$(kubectl get secret --namespace default postgresql -o jsonpath="{.data.postgresql-password}" | base64 --decode)
kubectl run postgresql-client --rm --tty -i --restart='Never' --namespace default --image docker.io/bitnami/postgresql:11.6.0-debian-9-r0 --env="PGPASSWORD=$POSTGRES_PASSWORD" --command -- psql --host postgresql -U postgres -d postgres -p 5432


Jetzt haben Sie an der Eingabeaufforderung: postgres = #Sie können die Tabelle erstellen, indem Sie sie in sie kopieren und dann ausführen \dt, um die Tabelle anzuzeigen:

postgres=# \dt
List of relations
Schema | Name | Type  |  Owner
--------+------+-------+----------
public | todo | table | postgres
(1 row)


Installieren Sie das Anwendungsframework


So wie PHP-Entwickler ihren Workflow mit LAMP (Linux Apache + MySQL + PHP) und Rails-Entwickler mit einem vorbereiteten Stack beschleunigten, können Kubernetes-Entwickler Anwendungsframeworks verwenden.
Der PLONK-Stack steht für Prometheus, Linux, OpenFaaS, NATS und Kubernetes.
  • Prometheus bietet Metriken, automatische Skalierung und Beobachtbarkeit, um den Zustand Ihres Systems zu testen, ermöglicht es ihm, auf steigende Nachfrage zu reagieren und Kosten zu senken, indem Metriken bereitgestellt werden, um Entscheidungen über die Skalierung auf Null zu treffen.
  • Obwohl Linux nicht die einzige Option zum Ausführen von Workloads in Kubernetes ist, ist es Standard und am einfachsten zu verwenden.
  • Ursprünglich stellte OpenFaaS Entwicklern tragbare Funktionen zur Verfügung, funktioniert jedoch hervorragend bei der Bereitstellung von APIs und Microservices. Aufgrund seiner Vielseitigkeit können alle Docker-Container mit einem HTTP-Server bereitgestellt und verwaltet werden.
  • NATS ist ein beliebtes CNCF-Projekt für Messaging und Pub / Sub. Im PLONK-Stack bietet es die Möglichkeit, Anforderungen asynchron auszuführen und in die Warteschlange zu stellen.
  • Kubernetes ist der Grund, warum wir hier sind. Es bietet eine skalierbare, selbstheilende und deklarative Infrastruktur. Und wenn Sie nicht mehr Teil dieser Größe benötigen, wird die API mit OpenFaaS vereinfacht.


Installieren Sie den PLONK-Stack über Arkade:

arkade install openfaas


Lesen Sie die Informationsnachricht und führen Sie jeden Befehl aus:

  • Installieren Sie faas-cli.
  • Holen Sie sich Ihr Passwort.
  • Leiten Sie die OpenFaaS-Gateway-Benutzeroberfläche um (über Port 8080).
  • Melden Sie sich über die CLI beim System an.


Nach wie vor können Sie mit eine Informationsnachricht erhalten info openfaas.

Stellen Sie Ihre First Go-API bereit


Es gibt verschiedene Möglichkeiten, eine Go-API mit PLONK zu erstellen. Die erste Option besteht darin, die Docker-Datei zu verwenden und den TCP-Port, die Integritätsprüfung, den HTTP-Server usw. manuell zu ermitteln. Dies kann mit erfolgen faas-cli new --lang dockerfile API_NAME, es gibt jedoch einen einfacheren und automatisierteren Weg.

Die zweite Möglichkeit besteht darin, die vom Funktionsspeicher angebotenen integrierten Vorlagen zu verwenden:

faas-cli template store list | grep go
go                       openfaas           Classic Golang template
golang-http              openfaas-incubator Golang HTTP template
golang-middleware        openfaas-incubator Golang Middleware template


Da wir eine herkömmliche HTTP-API erstellen möchten, ist die Golang-Middleware-Vorlage am besten geeignet.

Zu Beginn des Tutorials haben Sie sich bei Ihrem Docker Hub-Konto registriert, um Ihre Docker-Bilder zu speichern. Jede Kubernetes-Workload muss in ein Docker-Image eingebettet sein, bevor sie bereitgestellt werden kann.

Ziehen Sie das spezielle Muster hoch:

faas-cli template store pull golang-middleware


Verwenden Sie Scaffold für Ihre API mit Golang-Middleware und Ihrem Benutzernamen im Docker Hub:

export PREFIX=alexellis2
export LANG=golang-middleware
export API_NAME=todo
faas-cli new --lang $LANG --prefix $PREFIX $API_NAME


Sie sehen zwei generierte Dateien:

  • ./todo.yml - bietet eine Möglichkeit zum Konfigurieren, Bereitstellen und Installieren der Vorlage und des Namens
  • ./todo/handler.go - Hier schreiben Sie den Code und fügen alle anderen Dateien oder Pakete hinzu, die Sie benötigen


Lassen Sie uns etwas bearbeiten und dann den Code erweitern.

package function
import (
   "net/http"
   "encoding/json"
)
type Todo struct {
   Description string `json:"description"`
}
func Handle(w http.ResponseWriter, r *http.Request) {
   todos := []Todo{}
   todos = append(todos, Todo{Description: "Run faas-cli up"})
   res, _ := json.Marshal(todos)
   w.WriteHeader(http.StatusOK)
   w.Header().Set("Content-Type", "application/json")
   w.Write([]byte(res))
}


Wenn Sie VScode und seine Plugins nicht zum Bearbeiten und Formatieren des Codes verwenden, führen Sie ihn nach jeder Änderung aus, um sicherzustellen, dass die Datei korrekt formatiert ist.

gofmt -w -s ./todo/handler.go


Stellen Sie nun den Code bereit. Erstellen Sie zunächst ein neues Image, starten Sie es im Docker Hub und stellen Sie es mithilfe der OpenFaaS-API im Cluster bereit:

Invoke your endpoint when ready:
curl http://127.0.0.1:8080/function/todo
{
"description": "Run faas-cli up"
}


Ermöglichen Sie Benutzern das Erstellen neuer TODO-Datensätze


Jetzt können Benutzer neue Einträge in ihrer TODO-Liste erstellen. Zuerst müssen Sie den Link oder die "Abhängigkeit" für "Gehe zur Postgresql-Bibliothek" hinzufügen.

Wir können es mit den Verkaufsautomaten oder Go-Modulen erhalten, die in Go 1.11 eingeführt und standardmäßig in Go 1.13 installiert wurden.

Bearbeiten handler.gound fügen Sie das Modul hinzu, das wir für den Zugriff auf Postgresql benötigen:

import (
   "database/sql"
   _ "github.com/lib/pq"
...


Damit Go-Module Abhängigkeiten erkennen können, müssen wir etwas in der Datei deklarieren, das wir später verwenden werden. Wenn dies nicht der Fall ist, löscht VSCode diese Zeilen beim Speichern.

Fügen Sie dies unter den Importen in der Datei hinzu

var db *sql.DB


Immer diese Befehle im ausführen todoOrdner , in dem er sich befindet handler.go, und nicht auf der Stammebene c todo.yml.

Initialisieren Sie das neue Go-Modul:

cd todo/
ls
handler.go
export GO111MODULE=on
go mod init


Aktualisieren Sie nun die Datei mithilfe der pq-Bibliothek:

go get
go mod tidy
cat go.mod
module github.com/alexellis/todo1/todo
go 1.13
require github.com/lib/pq v1.3.0


Was auch immer drin ist go.mod, kopiere seinen Inhalt nachGO_REPLACE.txt

cat go.mod > GO_REPLACE.txt


Stellen Sie nun sicher, dass die Assembly noch funktioniert, bevor Sie den Einfügecode hinzufügen.

faas-cli build -f todo.yml --build-arg GO111MODULE=on


Möglicherweise stellen Sie fest, dass wir jetzt --build-argein Muster für die Verwendung von Go-Modulen melden.

Während der Montage sehen Sie, dass die Module nach Bedarf aus dem Internet heruntergeladen werden.

Step 16/29 : RUN go test ./... -cover
---> Running in 9a4017438500
go: downloading github.com/lib/pq v1.3.0
go: extracting github.com/lib/pq v1.3.0
go: finding github.com/lib/pq v1.3.0
?       github.com/alexellis/todo1/todo [no test files]
Removing intermediate container 9a4017438500


Konfigurieren von Geheimnissen für den Postgresql-Zugriff


Wir können einen Verbindungspool in erstellen init (), eine Methode, die beim Programmstart nur einmal ausgeführt wird.

// init       .   ,     ,   /   /

func init() {
       if _, err := os.Stat("/var/openfaas/secrets/password"); err == nil {
               password, _ := sdk.ReadSecret("password")
               user, _ := sdk.ReadSecret("username")
               host, _ := sdk.ReadSecret("host")
               dbName := os.Getenv("postgres_db")
               port := os.Getenv("postgres_port")
               sslmode := os.Getenv("postgres_sslmode")
               connStr := "postgres://" + user + ":" + password + "@" + host + ":" + port + "/" + dbName + "?sslmode=" + sslmode
var err error
               db, err = sql.Open("postgres", connStr)
               if err != nil {
                       panic(err.Error())
               }
               err = db.Ping()
               if err != nil {
                       panic(err.Error())
               }
       }
}


Wie Sie bemerkt haben, werden einige Informationen aus dem extrahiert, was os.Getenvaus der Umgebung gelesen wird. Ich würde diese Werte als nicht vertraulich betrachten, sie sind in der Datei festgelegt todo.y.

Der Rest, wie das Passwort und der Host, die vertraulich sind, werden in Kubernetes Geheimnissen aufbewahrt .

Sie können sie durch faas-cli secret createoder durch erstellen kubectl create secret generic -n openfaas-fn.

Die Zeichenfolge sdk.ReadSecretstammt aus dem OpenFaaS Cloud SDK mit folgendem Import : github.com/openfaas/openfaas-cloud/sdk. Es liest eine geheime Datei von der Festplatte und gibt einen Wert oder Fehler zurück.

Holen Sie sich die geheimen Werte von arkade info postgresql.

Gehen Sie nun für jedes Passwort wie folgt vor:

export POSTGRES_PASSWORD=$(kubectl get secret --namespace default postgresql -o jsonpath="{.data.postgresql-password}" | base64 --decode)
export USERNAME="postgres"
export PASSWORD=$POSTGRES_PASSWORD
export HOST="postgresql.default"
faas-cli secret create username --from-literal $USERNAME
faas-cli secret create password --from-literal $PASSWORD
faas-cli secret create host --from-literal $HOST


Überprüfen Sie die Geheimnisse auf Verfügbarkeit und Konformität:

faas-cli secret ls
NAME
username
password
host
# And via kubectl:
kubectl get secret -n openfaas-fn
NAME                  TYPE                                  DATA   AGE
username              Opaque                                1      13s
password              Opaque                                1      13s
host                  Opaque                                1      12s


Bearbeiten Sie unsere YAML-Datei und fügen Sie Folgendes hinzu:

secrets:
   - host
   - password
   - username
   environment:
     postgres_db: postgres
     postgres_sslmode: "disable"
     postgres_port: 5432


Aktualisieren Sie als Nächstes die Go-Module und führen Sie den Build erneut aus:

cd todo
go get
go mod tidy
cd ..
faas-cli build -f todo.yml --build-arg GO111MODULE=on
Successfully built d2c609f8f559
Successfully tagged alexellis2/todo:latest
Image: alexellis2/todo:latest built.
[0] < Building todo done in 22.50s.
[0] Worker done.
Total build time: 22.50s


Die Assembly hat wie erwartet funktioniert. Führen Sie sie daher faas-climit denselben Argumenten aus, um das Image zu starten und bereitzustellen. Wenn die Anmeldeinformationen und die SQL-Konfiguration korrekt sind, werden keine Fehler in den Protokollen angezeigt. Wenn sie jedoch falsch sind, wird der Panikcode in init () angezeigt.

Überprüfen Sie die Protokolle:

faas-cli logs todo
2020-03-26T14:10:03Z Forking - ./handler []
2020-03-26T14:10:03Z 2020/03/26 14:10:03 Started logging stderr from function.
2020-03-26T14:10:03Z 2020/03/26 14:10:03 Started logging stdout from function.
2020-03-26T14:10:03Z 2020/03/26 14:10:03 OperationalMode: http
2020-03-26T14:10:03Z 2020/03/26 14:10:03 Timeouts: read: 10s, write: 10s hard: 10s.
2020-03-26T14:10:03Z 2020/03/26 14:10:03 Listening on port: 8080
2020-03-26T14:10:03Z 2020/03/26 14:10:03 Metrics listening on port: 8081
2020-03-26T14:10:03Z 2020/03/26 14:10:03 Writing lock-file to: /tmp/.lock


Während alles gut aussieht, versuchen wir jetzt, den Endpunkt aufzurufen:

echo | faas-cli invoke todo -f todo.yml
2020-03-26T14:11:02Z 2020/03/26 14:11:02 POST / - 200 OK - ContentLength: 35


Jetzt haben wir eine erfolgreiche Verbindung zur Datenbank hergestellt und können das Einfügen durchführen. Woher wissen wir das? Weil es db.Ping ()einen Fehler zurückgibt, sonst hätte es eine Panik ausgelöst:

err = db.Ping()
if err != nil {
   panic(err.Error())
}


Folgen Sie dem Link für weitere Details zum Datenbank- / SQL- Paket .

Den Einfügecode schreiben


Dieser Code fügt eine neue Zeile in die Tabelle ein todound verwendet eine spezielle Syntax, bei der der Wert nicht in Anführungszeichen eingeschlossen, sondern durch den Code db.Query ersetzt wird. In den "alten Tagen" der LAMP-Programmierung war ein häufiger Fehler, der dazu führte, dass viele Systeme unsicher wurden, das Fehlen einer Bereinigung der Eingabedaten und die Verkettung von Benutzereingaben direkt in die SQL-Anweisung.

Stellen Sie sich vor, jemand gibt eine Beschreibung ein. drop table todoEs würde nicht sehr lustig sein.

Daher führen wir db.Querydann die SQL - Anweisung übergeben verwendet $1, $2usw. für jeden Wert, und dann können wir das Ergebnis und / oder Fehler. Wir müssen dieses Ergebnis auch schließen, also verwenden Sie hierfür die Verzögerung.

func insert(description string) error {
       res, err := db.Query(`insert into todo (id, description, created_date) values (DEFAULT, $1, now());`,
               description)
       if err != nil {
               return err
       }
       defer res.Close()
       return nil
}


Verbinden wir dies nun mit dem Code.

func Handle(w http.ResponseWriter, r *http.Request) {
       if r.Method == http.MethodPost && r.URL.Path == "/create" {
               defer r.Body.Close()
               body, _ := ioutil.ReadAll(r.Body)
               if err := insert(string(body)); err != nil {
                       http.Error(w, fmt.Sprintf("unable to insert todo: %s", err.Error()), http.StatusInternalServerError)
               }
       }
}


Lassen Sie es uns bereitstellen und ausführen.

echo | faas-cli invoke todo -f todo.yml
curl http://127.0.0.1:8080/function/todo/create --data "faas-cli build"
curl http://127.0.0.1:8080/function/todo/create --data "faas-cli push"
curl http://127.0.0.1:8080/function/todo/create --data "faas-cli deploy"


Überprüfen Sie die API-Protokolle:

faas-cli logs todo
2020-03-26T14:35:29Z 2020/03/26 14:35:29 POST /create - 200 OK - ContentLength: 0


Überprüfen Sie den Inhalt der Tabelle mit pgsql:

export POSTGRES_PASSWORD=$(kubectl get secret --namespace default postgresql -o jsonpath="{.data.postgresql-password}" | base64 --decode)
kubectl run postgresql-client --rm --tty -i --restart='Never' --namespace default --image docker.io/bitnami/postgresql:11.6.0-debian-9-r0 --env="PGPASSWORD=$POSTGRES_PASSWORD" --command -- psql --host postgresql -U postgres -d postgres -p 5432
postgres=# select * from todo;
id |   description   |        created_date        | completed_date
----+-----------------+----------------------------+----------------
1 | faas-cli build  | 2020-03-26 14:36:03.367789 |
2 | faas-cli push   | 2020-03-26 14:36:03.389656 |
3 | faas-cli deploy | 2020-03-26 14:36:03.797881 |


Herzlichen Glückwunsch, Sie haben jetzt eine TODO-API, die eingehende Anforderungen über curloder einen anderen HTTP-Client annehmen und in die Datenbanktabelle schreiben kann.

Datensatzanforderung


Erstellen wir eine neue Funktion zum Abfragen von TODO-Datensätzen aus einer Tabelle:

func selectTodos() ([]Todo, error) {
   var error err
   var todos []Todo
   return todos, err
}


Wir können diese Auswahlmethode nicht benennen, da es sich um ein reserviertes Schlüsselwort für die Arbeit mit Goroutinen handelt.

Verbinden Sie nun die Methode mit dem Haupthandler:

} else if r.Method == http.MethodGet && r.URL.Path == "/list" {
   todos, err := selectTodos()
   if err != nil {
       http.Error(w, fmt.Sprintf("unable to get todos: %s", err.Error()), http.StatusInternalServerError)
   }
   out, _ := json.Marshal(todos)
   w.Header().Set("Content-Type", "application/json")
   w.Write(out)
}


Aktualisieren Sie die Todo-Struktur, da unser Datenschema zusätzliche Felder für Datumsangaben enthält:

type Todo struct {
   ID int `json:"id"`
   Description   string `json:"description"`
   CreatedDate   *time.Time `json:"created_date"`
   CompletedDate *time.Time `json:"completed_date"`
}


Fügen wir nun den selectTodos()Anforderungscode zu unserer Methode hinzu :

func selectTodos() ([]Todo, error) {
       rows, getErr := db.Query(`select id, description, created_date, completed_date from todo;`)
   if getErr != nil {
       return []Todo{}, errors.Wrap(getErr, "unable to get from todo table")
   }
   todos := []Todo{}
   defer rows.Close()
   for rows.Next() {
       result := Todo{}
       scanErr := rows.Scan(&result.ID, &result.Description, &result.CreatedDate, &result.CompletedDate)
       if scanErr != nil {
           log.Println("scan err:", scanErr)
       }
       todos = append(todos, result)
   }
   return todos, nil
}


Nach wie vor müssen wir das Schließen der Zeilen für die Anforderung verzögern. Jeder Wert wird mit der Methode rows.Scan in die neue Struktur eingefügt. Am Ende der Methode haben wir einen Teil des Todo-Inhalts.

Lass es uns versuchen:

faas-cli up -f todo.yml --build-arg GO111MODULE=on
curl http://127.0.0.1:8080/function/todo/list


Hier ist das Ergebnis:

[
 {
   "id": 2,
   "description": "faas-cli build",
   "created_date": "2020-03-26T14:36:03.367789Z",
   "completed_date": null
 },
 {
   "id": 3,
   "description": "faas-cli push",
   "created_date": "2020-03-26T14:36:03.389656Z",
   "completed_date": null
 },
 {
   "id": 4,
   "description": "faas-cli deploy",
   "created_date": "2020-03-26T14:36:03.797881Z",
   "completed_date": null
 }
]


Um die Werte zu entfernen, können wir die Strukturanmerkungen aktualisieren, indem wir Folgendes hinzufügen omitempty:

CompletedDate *time.Time `json:"completed_date,omitempty"`


Um die geleistete Arbeit zusammenzufassen


Wir sind noch nicht fertig, aber dies ist ein guter Moment, um anzuhalten und zu überprüfen, was wir bisher erreicht haben. Wir:

  • Installierte Go, Docker, Kubectl und VSCode (IDE)
  • Bereitgestellte Kubernetes auf unserem lokalen Computer
  • Installierte Postgresql mit Arkade und Helm3
  • Installierte OpenFaaS und den PLONK-Stack für Kubernetes-Anwendungsentwickler
  • Erstellt die anfängliche statische REST-API mit Go und golang-middlewareder OpenFaaS-Vorlage
  • Der TODO-API wurde die Funktion zum Einfügen hinzugefügt
  • Auswahlfunktion zu unserer TODO-API hinzugefügt


Das vollständige Codebeispiel, das wir bisher erstellt haben, ist in meinem GitHub-Konto verfügbar: alexellis / kubernetes-todo-go-app

Dann können wir viel mehr tun, zum Beispiel:

  • Hinzufügen der Authentifizierung mithilfe eines statischen Träger-Tokens
  • Erstellen Sie eine Webseite mit einer statischen HTML- oder React-Vorlage, um eine TODO-Liste zu rendern und neue Elemente zu erstellen.
  • Hinzufügen von Mehrbenutzerunterstützung zur API


Und vieles mehr. Wir könnten uns auch mit dem PLONK-Stack befassen und das Grafana-Dashboard bereitstellen, um mit der Überwachung unserer API zu beginnen und zu verstehen, wie viele Ressourcen mit dem Kubernetes-Dashboard oder dem Metrikserver (installiert mit arkade install) verwendet werden.

Weitere Informationen zu arkade : https://get-arkade.dev

Besuchen Sie den OpenFaaS-Workshop, um mehr über die oben genannten Themen zu erfahren: https://github.com/openfaas/workshop/

Sie können meinen Premium-Newsletter für Insider-Updates unter
https: / abonnieren /www.alexellis.io/
und auf meinem Twitter Alex Ellis



Erfahren Sie mehr über den Kurs



All Articles