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

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.
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:
gofmt) Du kannst den Go-Code eines anderen lesen, ohne seinen persönlichen Stil zu entschlüsseln.Als DevOps-Ingenieur öffnet Go ein paar Türen:
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.
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.
Sie ergänzen sich.
Viele DevOps-Ingenieure verwenden Python für Skripte und Go für Tools.
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