Text size
Auf meinem Radar6 Min. Lesezeit

Sollten DevOps-Ingenieure Go lernen?

Kubernetes ist in Go geschrieben, und so ist fast jedes Tool um es herum. Wo soll ich anfangen?

Should DevOps engineers learn Go?
KI-generierte Illustration

Schauen Sie sich die Tools an, die Sie jeden Tag verwenden: Kubernetes, Docker, Containerd, Terraform, OpenTofu, Helm, Prometheus, Grafanas Backend, Argo CD, Flux, etcd, Vault, Trivy, k9s. Fast alle sind in Go geschrieben.

Das ist kein Zufall. Es ist ein guter Grund für DevOps-Ingenieure, darüber nachzudenken, es zu lernen.

Warum Go die Infrastruktur übernahm

Go wurde von Google entwickelt und 2009 veröffentlicht, um zuverlässige Netzwerkdienste und -tools zu erstellen. Einige Eigenschaften machten es zur Sprache der Cloud-native Infrastruktur:

  • Einzelstaatische Binärdaten. Ein Go-Programm wird in einer Datei kompiliert, ohne dass eine Laufzeit installiert werden muss. Kopieren Sie es überall und es läuft. Perfekt für CLIs und Container.
  • Einfache Kreuzkompilation. Erstellen für Linux, macOS, Windows, ARM und x86 von einem Computer.
  • Eingebettete Gleichzeitigkeit mit Goroutines und Kanälen, ideal für Programme, die viele Dinge gleichzeitig tun, wie Steuerungen, die viele Ressourcen beobachten.
  • Einfache Sprache. Absichtlich klein, leicht lesbar, mit einem Standardformatstil (gofmt) Du kannst den Go-Code eines anderen lesen, ohne seinen persönlichen Stil zu entschlüsseln.
  • Schnelle Kompilierung und gute Leistung.
  • Starke Standardbibliothek für HTTP, JSON, Kryptographie und mehr.

Was Sie damit machen können

Als DevOps-Ingenieur öffnet Go ein paar Türen:

  • Lesen Sie die Quelle Sie haben die Möglichkeit, sich zu informieren. Wenn sich Kubernetes oder Terraform seltsam verhalten, ist das Lesen des Codes oft der schnellste Weg, um zu verstehen, warum.
  • Erstellen von CLI-Tools Das können Kollegen als einziges Binärsystem installieren.
  • Schreiben von Kubernetes-Operatoren und -Controllern Ihre Plattform zu automatisieren.
  • Schreiben Sie Terraform-Anbieter für interne Systeme.
  • Beitrag zur Open-Source-Lösung Cloud-native Projekte.
  • Erstellen von kleinen Dienstleistungen: Webhooks, Ausführer, Zulassungsprüfer.

Mein erster CLI

Ein kleines, aber echtes Beispiel: eine CLI, die überprüft, wann TLS-Zertifikate ablaufen.

package main

import (
    "crypto/tls"
    "fmt"
    "os"
    "time"
)

func main() {
    if len(os.Args) < 2 {
        fmt.Fprintln(os.Stderr, "usage: certcheck <host> [host...]")
        os.Exit(1)
    }

    exitCode := 0
    for _, host := range os.Args[1:] {
        conn, err := tls.Dial("tcp", host+":443", &tls.Config{ServerName: host})
        if err != nil {
            fmt.Printf("%-30s ERROR %v\n", host, err)
            exitCode = 1
            continue
        }
        cert := conn.ConnectionState().PeerCertificates[0]
        conn.Close()

        days := int(time.Until(cert.NotAfter).Hours() / 24)
        status := "OK"
        if days < 14 {
            status = "EXPIRING"
            exitCode = 1
        }
        fmt.Printf("%-30s %-8s %d days left\n", host, status, days)
    }
    os.Exit(exitCode)
}
go build -o certcheck .
./certcheck example.com deslypeter.com
GOOS=linux GOARCH=arm64 go build -o certcheck-linux-arm64 .   # cross-compile

Keine Abhängigkeiten außerhalb der Standardbibliothek, eine Binärdatei, funktioniert überall. Für größere CLIs, Bibliotheken wie Kobra (verwendet von kubectl, Helm und vielen anderen) Subbefehle und Flaggen hinzufügen.

Go zu lernen ist wie einen Schlüssel zum Maschinenraum einer Cloud-native Infrastruktur zu bekommen.

Ein winziger Kubernetes-Operator

Die Operatoren sind die, bei denen Go wirklich für Plattformarbeit glänzt. Ein Operator beobachtet Kubernetes Ressourcen und lässt die Realität mit dem übereinstimmen, was sie beschreiben.

Kubebauer (und das darauf basierende Operator SDK) erzeugt den größten Teil der Boilerplate:

kubebuilder init --domain acme.com --repo github.com/acme/app-operator
kubebuilder create api --group platform --version v1alpha1 --kind App

Sie dann definieren Sie Ihre benutzerdefinierten Ressource Felder in Go Strukturen und schreiben Sie eine Reconcile Funktion: "Angesichts dieser App Die Daten werden dann in den folgenden Bereichen bereitgestellt: Das Framework behandelt Beobachtung, Caching, Wiederholung und Führerwahl.

Es ist kein Wochenendeprojekt, um einen Produktions-Qualitäts-Operator zu bauen, aber ein Spielzeug zu bauen ist der beste Weg, um zu verstehen, wie Kubernetes selbst funktioniert. Jeder integrierte Controller folgt dem gleichen Muster.

Go vs Python für DevOps

Sie ergänzen sich.

  • Python: schneller für schnelle Skripte, Datenverarbeitung, Klebercode und alles, wo ein riesiges Bibliotheksökosystem hilft. Perfekt für einmalige Automatisierung.
  • Geht .: besser für Tools, die Sie verteilen, langlaufende Dienste, Operatoren und alles, was schnell, gleichzeitig oder ein einzelnes Binär sein muss.

Viele DevOps-Ingenieure verwenden Python für Skripte und Go für Tools.

Wo soll ich anfangen?

  • Eine Tour durch das Go (go.dev/tour): die offizielle interaktive Einführung. - Ein paar Stunden.
  • Nehmen wir uns vor: kurze, praktische Beispiele für jede gemeinsame Aufgabe.
  • "Lernen gehen" von Jon Bodner oder "Gehen wir" von Alex Edwards für Webdienste.
  • Das Buch des Kubenbauer für Betreiber.
  • Dann bauen Sie etwas Kleines, das Sie tatsächlich verwenden: eine CLI, einen Exporteur für ein internes System, ein Webhook.

Sollten Sie es lernen?

Wenn Sie mit Kubernetes arbeiten und über die Verwendung von Tools hinausgehen wollen, um sie zu verstehen und zu erweitern, ja. Du musst kein Go-Experte werden. Wenn man Go-Code lesen und kleine Tools schreiben kann, ist man schon deutlich effektiver.

Meine Meinung: Du musst nicht sprechen, geh zur Arbeit in Cloud-Native. Aber es ist die Sprache, die die ganze Nachbarschaft spricht, und es hilft, das Gespräch zu verstehen.

Desly