le mie informazioni di contatto
Posta[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
client-go è una libreria client pubblicata e gestita da k8s specificatamente per consentire agli sviluppatori di interagire con Kubernetes. Supporta operazioni CRUD (creazione, lettura, aggiornamento, eliminazione) su risorse k8s, monitoraggio ed elaborazione di eventi e accesso al contesto e alla configurazione del cluster Kubernetes.
Client go è una macchina client indipendente dal cluster Kubernetes ma che interagisce con il cluster. Installa l'ambiente go su questa macchina e stabilisci una connessione con Kubernetes.
Per installare l'ambiente go su un nuovo nodo (nel mio caso, una macchina virtuale), scarica prima il pacchetto di installazione go e scaricalo dal sito ufficiale.Tutte le release - Il linguaggio di programmazione Go
Poiché sto installando una versione server della macchina virtuale, durante l'installazione dell'ambiente go utilizzo il comando curl per scaricare il pacchetto di installazione. Poiché è necessario determinare la compatibilità tra l'ambiente go e il cluster k8s, è necessario verificare la versione k8s del cluster.
[root@master ~]# kubectl versione --short
Versione client: v1.23.1
Versione del server: v1.23.1
Controlla la documentazione ufficiale di Kubernetes e scopri che corrisponde alla versione 1.19.5 di go.
- [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
Aggiungi go alla variabile di ambiente e controlla la versione di go per determinare se go è stato installato correttamente.
- [root@client ~]# export PATH=$PATH:/usr/local/go/bin
- [root@client ~]# go version
- go version go1.19.5 linux/amd64
Aggiungi vai alla variabile di ambiente in modo persistente e scrivi il precedente export PATH=... nel file di sistema.
- [root@client ~]# vim ~/.bashrc
- [root@client ~]# source ~/.bashrc
Se utilizzi la versione Kubernetes >= v1.17.0, utilizza il tag v0.xy corrispondente. Ad esempio, k8s.io/[email protected] corrisponde a Kubernetes v1.20.4. La mia versione è 1.23.1, quindi scarica la versione client-go corrispondente:
go get k8s.io/client-go@v0.23.1
Il file go mod crea e avvia il supporto della modalità go:
- go mod init <module-name>
- export GO111MODULE=on
Verrà quindi creato un file go.mod iniziale, incluso il nome del modulo e le informazioni sulla versione di go. Man mano che il progetto viene distribuito o le dipendenze vengono aggiunte, go si aggiornerà automaticamente, registrando tutte le dipendenze e le relative versioni Viene generato anche il file go.sum per garantire la coerenza e la completezza delle dipendenze. Pertanto, il file go.mod accumulerà gradualmente tutte le dipendenze e le informazioni sulla versione richieste dal progetto.
Scrivi il file 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)
- }
- }
Quando specifichi lo spazio dei nomi come monitor-sa, puoi vedere che client-go ha acquisito correttamente il numero di pod nello spazio dei nomi nel cluster.
- [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
Scarica kubectl. Tieni presente che il luogo in cui scarichi e salvi qui è il luogo a cui farai riferimento in seguito, quindi è meglio ricordare il percorso di salvataggio e non salvarlo nella cartella di download.https://storage.googleapis.com/kubernetes-release/release/v1.18.0/bin/windows/amd64/kubectl.exe
Quindi aggiungilo alla variabile di ambiente. Il kube qui è la cartella in cui è archiviato kubectl.exe.
Apri la riga di comando di Windows e verifica se kubectl funziona correttamente.
Configura kube-config e copia il file di configurazione copiato nel sistema Linux in Windows. La directory qui è C:/user/.kube/config. Quindi configuralo in vscode.
Scarica client-go localmente, quindi scarica il plug-in go e il plug-in code runner in vscode:
Quindi cstrl+shift+p, inserisci la riga di ricerca vscode e installa le dipendenze del plug-in go. Cerca Go:installa/aggiorna strumenti
Se ciò accade, è necessario impostare le variabili di ambiente. Imposta le seguenti quattro variabili di ambiente, dove go_path è la directory in cui è archiviato il codice go che desideri eseguire e go_root è la directory in cui hai scaricato go.
Controlla il percorso. Se è presente quanto segue, è normale:
A questo punto, prova a scaricare nuovamente GO:install/update tools e l'operazione avrà esito positivo.
Al termine dell'installazione, installare client-go nella directory gopath
- 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
Appurato che l'operazione è andata a buon fine: