2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
client-go ist eine von k8s veröffentlichte und verwaltete Client-Bibliothek speziell für Entwickler zur Interaktion mit Kubernetes. Es unterstützt CRUD-Vorgänge (Erstellen, Lesen, Aktualisieren, Löschen) auf k8s-Ressourcen, Ereignisüberwachung und -verarbeitung sowie Zugriff auf den Kontext und die Konfiguration des Kubernetes-Clusters.
Client Go ist ein Client-Computer, der vom Kubernetes-Cluster unabhängig ist, aber mit dem Cluster interagiert. Installieren Sie die Go-Umgebung auf diesem Computer und stellen Sie eine Verbindung mit Kubernetes her.
Um die Go-Umgebung auf einem neuen Knoten (in meinem Fall einer virtuellen Maschine) zu installieren, laden Sie zunächst das Go-Installationspaket herunter und laden Sie es von der offiziellen Website herunter.Alle Veröffentlichungen - Die Programmiersprache Go
Da ich eine Serverversion der virtuellen Maschine installiere, verwende ich bei der Installation der Go-Umgebung den Befehl curl, um das Installationspaket herunterzuladen. Da Sie die Kompatibilität zwischen der Go-Umgebung und dem K8S-Cluster ermitteln müssen, müssen Sie die K8S-Version des Clusters überprüfen.
[root@master ~]# kubectl version --short
Client-Version: v1.23.1
Serverversion: v1.23.1
Überprüfen Sie die offizielle Kubernetes-Dokumentation und stellen Sie fest, dass sie mit Version 1.19.5 von go übereinstimmt.
- [root@client ~]# curl -L -O https://go.dev/dl/go1.19.5.linux-amd64.tar.gz
- % Total % Received % Xferd Average Speed Time Time Time Current
- Dload Upload Total Spent Left Speed
- 100 75 100 75 0 0 131 0 --:--:-- --:--:-- --:--:-- 131
- 100 65.7M 100 65.7M 0 0 3446k 0 0:00:19 0:00:19 --:--:-- 3513k
- [root@client ~]# file go1.22.5.linux-amd64.tar.gz
- # 验证下载文件的类型是否为压缩包
- go1.22.5.linux-amd64.tar.gz: gzip compressed data, max compression, original size modulo 2^32 232839680 gzip compressed data, unknown method, has CRC, extra field, has comment, encrypted, from FAT filesystem (MS-DOS, OS/2, NT), original size modulo 2^32 232839680
- [root@client ~]# rm -rf /usr/local/go && tar -C /usr/local -xzf go1.22.5.linux-amd64.tar.gz
Fügen Sie go zur Umgebungsvariablen hinzu und überprüfen Sie die Version von go, um festzustellen, ob go erfolgreich installiert wurde.
- [root@client ~]# export PATH=$PATH:/usr/local/go/bin
- [root@client ~]# go version
- go version go1.19.5 linux/amd64
Fügen Sie go dauerhaft zur Umgebungsvariablen hinzu und schreiben Sie den obigen Export PATH=... in die Systemdatei.
- [root@client ~]# vim ~/.bashrc
- [root@client ~]# source ~/.bashrc
Wenn Sie die Kubernetes-Version >= v1.17.0 verwenden, verwenden Sie bitte das entsprechende v0.xy-Tag. Beispielsweise entspricht k8s.io/[email protected] Kubernetes v1.20.4. Meine Version ist 1.23.1, also laden Sie die entsprechende Client-Go-Version herunter:
go get k8s.io/client-go@v0.23.1
Die Go-Mod-Datei erstellt und startet die Go-Modus-Unterstützung:
- go mod init <module-name>
- export GO111MODULE=on
Anschließend wird eine erste go.mod-Datei erstellt, die den Modulnamen und die Go-Versionsinformationen enthält. Wenn das Projekt bereitgestellt oder Abhängigkeiten hinzugefügt werden, wird die go.mod-Datei automatisch aktualisiert und alle Abhängigkeiten und ihre Versionen aufgezeichnet Die Datei go.sum wird ebenfalls generiert, um die Konsistenz und Vollständigkeit der Abhängigkeiten sicherzustellen. Daher sammelt die Datei go.mod nach und nach alle für das Projekt erforderlichen Abhängigkeiten und Versionsinformationen.
Schreiben Sie die Datei main.go
- package main
-
- import (
- "flag"
- "fmt"
- metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
- "k8s.io/client-go/kubernetes"
- "k8s.io/client-go/tools/clientcmd"
- "context"
- )
-
- func main() {
- // 配置 k8s 集群外 kubeconfig 配置文件
- var kubeconfig *string
- kubeconfig = flag.String("kubeconfig", "/etc/k8scoonfig/config", "absolute path to the kubeconfig file")
- namespace := flag.String("namespace","default","the namespace to list the pod from")
- flag.Parse()
-
- // use the current context in kubeconfig
- config, err := clientcmd.BuildConfigFromFlags("", *kubeconfig)
- if err != nil {
- panic(err.Error())
- }
-
- // create the clientset
- clientset, err := kubernetes.NewForConfig(config)
- if err != nil {
- panic(err.Error())
- }
-
- // 获取集群中所有 Pod 列表
- pods, err := clientset.CoreV1().Pods("").List(context.TODO(), metav1.ListOptions{})
- if err != nil {
- panic(err.Error())
- }
- fmt.Printf("There are %d pods in the k8s clustern", len(pods.Items))
-
- // 获取指定 namespace 中的 Pod 列表
- pods, err = clientset.CoreV1().Pods(*namespace).List(context.TODO(), metav1.ListOptions{})
- if err != nil {
- panic(err)
- }
- fmt.Printf("There are %d pods in namespace %sn", len(pods.Items), namespace)
- for _, pod := range pods.Items {
- fmt.Printf("Name: %s, Status: %s, CreateTime: %vn", pod.Name, pod.Status.Phase, pod.CreationTimestamp)
- }
- }
Wenn Sie den Namespace als „monitor-sa“ angeben, können Sie sehen, dass client-go die Anzahl der Pods im Namespace im Cluster erfolgreich erfasst hat.
- [root@client client_go_examples]# ./app -kubeconfig=/etc/k8scoonfig/config -namespace="monitor-sa"
- There are 18 pods in the k8s cluster
- There are 3 pods in namespace monitor-sa
- Name: node-exporter-jb9jp, Status: Running, CreateTime: 2024-07-06 11:47:33 +0000 UTC
- Name: node-exporter-kpvxd, Status: Running, CreateTime: 2024-07-06 11:47:33 +0000 UTC
- Name: node-exporter-pwdw4, Status: Running, CreateTime: 2024-07-06 11:47:33 +0000 UTC
Laden Sie kubectl herunter. Beachten Sie, dass der Ort, den Sie hier herunterladen und speichern, der Ort ist, auf den Sie später verweisen werden. Merken Sie sich daher am besten den Speicherpfad und speichern Sie ihn nicht im Download-Ordner.https://storage.googleapis.com/kubernetes-release/release/v1.18.0/bin/windows/amd64/kubectl.exe
Fügen Sie es dann zur Umgebungsvariablen hinzu. Der kube ist hier der Ordner, in dem kubectl.exe gespeichert ist.
Öffnen Sie die Windows-Befehlszeile und testen Sie, ob kubectl ordnungsgemäß funktioniert.
Konfigurieren Sie kube-config und kopieren Sie die auf das Linux-System kopierte Konfigurationsdatei nach Windows. Das Verzeichnis hier ist C:/user/.kube/config. Konfigurieren Sie es dann in vscode.
Laden Sie client-go lokal herunter und laden Sie dann das Go-Plugin und das Code Runner-Plugin in vscode herunter:
Geben Sie dann cstrl+shift+p ein, geben Sie die vscode-Suchzeile ein und installieren Sie die Go-Plugin-Abhängigkeiten. Suchen Sie nach Go:Install/Update-Tools
In diesem Fall müssen Sie Umgebungsvariablen festlegen. Legen Sie die folgenden vier Umgebungsvariablen fest, wobei go_path das Verzeichnis ist, in dem der Go-Code gespeichert ist, den Sie ausführen möchten, und go_root das Verzeichnis ist, in das Sie go heruntergeladen haben.
Überprüfen Sie den Pfad. Wenn Folgendes vorliegt, ist dies normal:
Versuchen Sie zu diesem Zeitpunkt erneut, die GO:install/update-Tools herunterzuladen, und es wird erfolgreich sein.
Nach erfolgreicher Installation installieren Sie client-go im Gopath-Verzeichnis
- go get k8s.io/client-go@v0.23.1
- go get k8s.io/apimachinery@v0.23.1
- #使用 go mod tidy 确保所有依赖项已被正确下载并添加到项目中:
- go mod tidy
- go run main.go
Es wurde festgestellt, dass die Operation erfolgreich war: