Κοινή χρήση τεχνολογίας

[πηγαίος κώδικας k8s] 1.client-go ανάπτυξη εκτός του συμπλέγματος

2024-07-12

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

Το client-go είναι μια βιβλιοθήκη πελατών που δημοσιεύεται και διατηρείται από την k8s ειδικά για προγραμματιστές να αλληλεπιδρούν με το kubernetes. Υποστηρίζει λειτουργίες CRUD (δημιουργία, ανάγνωση, ενημέρωση, διαγραφή) σε πόρους k8s, παρακολούθηση και επεξεργασία συμβάντων και πρόσβαση στο περιβάλλον και τη διαμόρφωση του συμπλέγματος kubernetes.

Το Client go είναι ένα μηχάνημα πελάτη που είναι ανεξάρτητο από το σύμπλεγμα kubernetes αλλά αλληλεπιδρά με το σύμπλεγμα. Εγκαταστήστε το περιβάλλον go σε αυτό το μηχάνημα και δημιουργήστε μια σύνδεση με το kubernetes.

Linux

Εγκαταστήστε το περιβάλλον go

Για να εγκαταστήσετε το περιβάλλον go σε έναν νέο κόμβο (στην περίπτωσή μου, μια εικονική μηχανή), κατεβάστε πρώτα το πακέτο εγκατάστασης go και κατεβάστε το από τον επίσημο ιστότοπο.Όλες οι εκδόσεις - The Go Programming Language

Εφόσον εγκαθιστώ μια έκδοση διακομιστή της εικονικής μηχανής, κατά την εγκατάσταση του περιβάλλοντος go, χρησιμοποιώ την εντολή curl για τη λήψη του πακέτου εγκατάστασης. Επειδή πρέπει να προσδιορίσετε τη συμβατότητα μεταξύ του περιβάλλοντος go και του συμπλέγματος k8s, πρέπει να ελέγξετε την έκδοση k8s του συμπλέγματος.

[root@master ~]# έκδοση kubectl --σύντομη
Έκδοση πελάτη: v1.23.1
Έκδοση διακομιστή: v1.23.1

Ελέγξτε την επίσημη τεκμηρίωση του kubernetes και βρείτε ότι ταιριάζει με την έκδοση 1.19.5 του 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

Προσθέστε το go στη μεταβλητή περιβάλλοντος και ελέγξτε την έκδοση του go για να διαπιστώσετε εάν το go έχει εγκατασταθεί με επιτυχία.

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

Προσθέστε το go στη μεταβλητή περιβάλλοντος επίμονα και γράψτε την παραπάνω εξαγωγή PATH=... στο αρχείο συστήματος.

  1. [root@client ~]# vim ~/.bashrc
  2. [root@client ~]# source ~/.bashrc
Διαμόρφωση προγράμματος-πελάτη

Εάν χρησιμοποιείτε την έκδοση Kubernetes >= v1.17.0, χρησιμοποιήστε την αντίστοιχη ετικέτα v0.xy. Για παράδειγμα, το k8s.io/[email protected] αντιστοιχεί στο Kubernetes v1.20.4. Η έκδοσή μου είναι 1.23.1, οπότε κατεβάστε την αντίστοιχη έκδοση πελάτη-go:

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

Το αρχείο go mod δημιουργεί και ξεκινά την υποστήριξη λειτουργίας μετάβασης:

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

Στη συνέχεια, θα δημιουργηθεί ένα αρχικό αρχείο go.mod, συμπεριλαμβανομένου του ονόματος της μονάδας και των πληροφοριών της έκδοσης go Καθώς το έργο αναπτύσσεται ή προστίθενται εξαρτήσεις, το αρχείο go.mod θα ενημερώνεται αυτόματα, καταγράφοντας όλες τις εξαρτήσεις και τις εκδόσεις τους Το αρχείο go.sum δημιουργείται επίσης για να διασφαλιστεί η συνέπεια και η πληρότητα των εξαρτήσεων. Επομένως, το αρχείο go.mod θα συγκεντρώσει σταδιακά όλες τις εξαρτήσεις και τις πληροφορίες έκδοσης που απαιτούνται από το έργο.

Χρησιμοποιήστε το πρόγραμμα-πελάτη για να καταγράψετε πληροφορίες

Γράψτε το αρχείο 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. }

Όταν καθορίζετε τον χώρο ονομάτων ως monitor-sa, μπορείτε να δείτε ότι ο πελάτης-go κατέγραψε με επιτυχία τον αριθμό των ομάδων ονομάτων στον χώρο ονομάτων στο σύμπλεγμα.

  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

παράθυρα

Κατεβάστε το kubectl. Σημειώστε ότι το μέρος που κατεβάζετε και αποθηκεύετε εδώ είναι το μέρος στο οποίο θα αναφερθείτε αργότερα, επομένως είναι καλύτερο να θυμάστε τη διαδρομή αποθήκευσης και να μην την αποθηκεύσετε στο φάκελο λήψης.https://storage.googleapis.com/kubernetes-release/release/v1.18.0/bin/windows/amd64/kubectl.exe

Στη συνέχεια, προσθέστε το στη μεταβλητή περιβάλλοντος Το kube εδώ είναι ο φάκελος όπου είναι αποθηκευμένο το kubectl.exe.

Ανοίξτε τη γραμμή εντολών των Windows και ελέγξτε εάν το kubectl λειτουργεί σωστά.

Διαμορφώστε το kube-config και αντιγράψτε το αρχείο διαμόρφωσης που αντιγράφηκε στο σύστημα Linux στα Windows Ο κατάλογος εδώ είναι C:/user/.kube/config. Στη συνέχεια, ρυθμίστε το σε vscode.

VSCode

Κάντε λήψη του client-go τοπικά και, στη συνέχεια, κατεβάστε το plug-in go και το plug-in code runner στο vscode:

Στη συνέχεια, cstrl+shift+p, εισαγάγετε τη γραμμή αναζήτησης vscode και εγκαταστήστε τις εξαρτήσεις της προσθήκης go. Αναζήτηση Go:install/update tools

Εάν συμβεί αυτό, πρέπει να ορίσετε μεταβλητές περιβάλλοντος. Ορίστε τις ακόλουθες τέσσερις μεταβλητές περιβάλλοντος, όπου το go_path είναι ο κατάλογος όπου αποθηκεύεται ο κώδικας go που θέλετε να εκτελέσετε και το go_root είναι ο κατάλογος στον οποίο κάνατε λήψη.

Ελέγξτε τη διαδρομή Εάν υπάρχει το εξής, είναι φυσιολογικό:

Προς το παρόν, προσπαθήστε να πραγματοποιήσετε ξανά λήψη του GO:install/update tools και θα είναι επιτυχής.

Μετά την επιτυχή εγκατάσταση, εγκαταστήστε το client-go στον κατάλογο 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

Διαπιστώθηκε ότι η επέμβαση ήταν επιτυχής: