Partage de technologie

[code source k8s] Déploiement 1.client-go en dehors du cluster

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

client-go est une bibliothèque client publiée et maintenue par k8s spécifiquement pour que les développeurs puissent interagir avec Kubernetes. Il prend en charge les opérations CRUD (créer, lire, mettre à jour, supprimer) sur les ressources k8s, la surveillance et le traitement des événements, ainsi que l'accès au contexte et à la configuration du cluster Kubernetes.

Client go est une machine client indépendante du cluster Kubernetes mais qui interagit avec le cluster. Installez l'environnement go sur cette machine et établissez une connexion avec Kubernetes.

Linux

Installer l'environnement Go

Pour installer l'environnement go sur un nouveau nœud (dans mon cas, une machine virtuelle), téléchargez d'abord le package d'installation go et téléchargez-le depuis le site officiel.Toutes les versions - Le langage de programmation Go

Puisque j'installe une version serveur de la machine virtuelle, lors de l'installation de l'environnement go, j'utilise la commande curl pour télécharger le package d'installation. Étant donné que vous devez déterminer la compatibilité entre l'environnement go et le cluster k8s, vous devez vérifier la version k8s du cluster.

[root@master ~]# kubectl version --short
Version du client : v1.23.1
Version du serveur : v1.23.1

Consultez la documentation officielle de Kubernetes et constatez qu'elle correspond à la version 1.19.5 de Go.

  1. [root@client ~]# curl -L -O https://go.dev/dl/go1.19.5.linux-amd64.tar.gz
  2. % Total % Received % Xferd Average Speed Time Time Time Current
  3. Dload Upload Total Spent Left Speed
  4. 100 75 100 75 0 0 131 0 --:--:-- --:--:-- --:--:-- 131
  5. 100 65.7M 100 65.7M 0 0 3446k 0 0:00:19 0:00:19 --:--:-- 3513k
  6. [root@client ~]# file go1.22.5.linux-amd64.tar.gz
  7. # 验证下载文件的类型是否为压缩包
  8. 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
  9. [root@client ~]# rm -rf /usr/local/go && tar -C /usr/local -xzf go1.22.5.linux-amd64.tar.gz

Ajoutez go à la variable d'environnement et vérifiez la version de go pour déterminer si go est installé avec succès.

  1. [root@client ~]# export PATH=$PATH:/usr/local/go/bin
  2. [root@client ~]# go version
  3. go version go1.19.5 linux/amd64

Ajoutez go à la variable d'environnement de manière persistante et écrivez le export PATH=... ci-dessus dans le fichier système.

  1. [root@client ~]# vim ~/.bashrc
  2. [root@client ~]# source ~/.bashrc
Configurer le client-go

Si vous utilisez la version Kubernetes >= v1.17.0, veuillez utiliser la balise v0.xy correspondante. Par exemple, k8s.io/[email protected] correspond à Kubernetes v1.20.4. Ma version est la 1.23.1, alors téléchargez la version client-go correspondante :

go get k8s.io/client-go@v0.23.1

Le fichier go mod crée et démarre la prise en charge du mode go :

  1. go mod init <module-name>
  2. export GO111MODULE=on

Un fichier go.mod initial sera alors créé, comprenant le nom du module et les informations de version go. Au fur et à mesure que le projet est déployé ou que des dépendances sont ajoutées, go sera automatiquement mis à jour, enregistrant toutes les dépendances et leurs versions. . Le fichier go.sum est également généré pour garantir la cohérence et l'exhaustivité des dépendances. Par conséquent, le fichier go.mod accumulera progressivement toutes les dépendances et informations de version requises par le projet.

Utilisez client-go pour capturer des informations

Écrire le fichier main.go

  1. package main
  2. import (
  3. "flag"
  4. "fmt"
  5. metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
  6. "k8s.io/client-go/kubernetes"
  7. "k8s.io/client-go/tools/clientcmd"
  8. "context"
  9. )
  10. func main() {
  11. // 配置 k8s 集群外 kubeconfig 配置文件
  12. var kubeconfig *string
  13. kubeconfig = flag.String("kubeconfig", "/etc/k8scoonfig/config", "absolute path to the kubeconfig file")
  14. namespace := flag.String("namespace","default","the namespace to list the pod from")
  15. flag.Parse()
  16. // use the current context in kubeconfig
  17. config, err := clientcmd.BuildConfigFromFlags("", *kubeconfig)
  18. if err != nil {
  19. panic(err.Error())
  20. }
  21. // create the clientset
  22. clientset, err := kubernetes.NewForConfig(config)
  23. if err != nil {
  24. panic(err.Error())
  25. }
  26. // 获取集群中所有 Pod 列表
  27. pods, err := clientset.CoreV1().Pods("").List(context.TODO(), metav1.ListOptions{})
  28. if err != nil {
  29. panic(err.Error())
  30. }
  31. fmt.Printf("There are %d pods in the k8s clustern", len(pods.Items))
  32. // 获取指定 namespace 中的 Pod 列表
  33. pods, err = clientset.CoreV1().Pods(*namespace).List(context.TODO(), metav1.ListOptions{})
  34. if err != nil {
  35. panic(err)
  36. }
  37. fmt.Printf("There are %d pods in namespace %sn", len(pods.Items), namespace)
  38. for _, pod := range pods.Items {
  39. fmt.Printf("Name: %s, Status: %s, CreateTime: %vn", pod.Name, pod.Status.Phase, pod.CreationTimestamp)
  40. }
  41. }

Lorsque vous spécifiez l'espace de noms comme monitor-sa, vous pouvez voir que client-go a réussi à capturer le nombre de pods dans l'espace de noms du cluster.

  1. [root@client client_go_examples]# ./app -kubeconfig=/etc/k8scoonfig/config -namespace="monitor-sa"
  2. There are 18 pods in the k8s cluster
  3. There are 3 pods in namespace monitor-sa
  4. Name: node-exporter-jb9jp, Status: Running, CreateTime: 2024-07-06 11:47:33 +0000 UTC
  5. Name: node-exporter-kpvxd, Status: Running, CreateTime: 2024-07-06 11:47:33 +0000 UTC
  6. Name: node-exporter-pwdw4, Status: Running, CreateTime: 2024-07-06 11:47:33 +0000 UTC

les fenêtres

Téléchargez Kubectl. Notez que l'endroit que vous téléchargez et enregistrez ici est l'endroit auquel vous ferez référence plus tard, il est donc préférable de se souvenir du chemin de sauvegarde et de ne pas l'enregistrer dans le dossier de téléchargement.https://storage.googleapis.com/kubernetes-release/release/v1.18.0/bin/windows/amd64/kubectl.exe

Ajoutez-le ensuite à la variable d'environnement. Le kube est ici le dossier où kubectl.exe est stocké.

Ouvrez la ligne de commande Windows et testez si kubectl fonctionne correctement.

Configurez kube-config et copiez le fichier de configuration copié sur le système Linux vers Windows. Le répertoire ici est C:/user/.kube/config. Ensuite, configurez-le dans vscode.

Code VS

Téléchargez client-go localement, puis téléchargez le plug-in go et le plug-in Code Runner dans vscode :

Ensuite cstrl+shift+p, entrez la ligne de recherche vscode et installez les dépendances du plug-in go. Rechercher Go : outils d'installation/mise à jour

Si cela se produit, vous devez définir des variables d'environnement. Définissez les quatre variables d'environnement suivantes, où go_path est le répertoire dans lequel le code go que vous souhaitez exécuter est stocké et go_root est le répertoire dans lequel vous avez téléchargé go.

Vérifiez le chemin. S'il y a les éléments suivants, c'est normal :

À ce stade, essayez à nouveau de télécharger les outils GO:install/update, et cela réussira.

Après une installation réussie, installez client-go dans le répertoire gopath

  1. go get k8s.io/client-go@v0.23.1
  2. go get k8s.io/apimachinery@v0.23.1
  3. #使用 go mod tidy 确保所有依赖项已被正确下载并添加到项目中:
  4. go mod tidy
  5. go run main.go

J'ai constaté que l'opération avait réussi :