2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
client-go on k8s:n julkaisema ja ylläpitämä asiakaskirjasto, joka on tarkoitettu erityisesti kehittäjille vuorovaikutukseen kubernetesin kanssa. Se tukee CRUD-toimintoja (luo, lue, päivitä, poista) k8s-resursseissa, tapahtumien seurantaa ja käsittelyä sekä pääsyä kubernetes-klusterin kontekstiin ja konfiguraatioon.
Client go on asiakaskone, joka on riippumaton kubernetes-klusterista, mutta on vuorovaikutuksessa klusterin kanssa. Asenna go-ympäristö tälle koneelle ja muodosta yhteys kubernetesiin.
Jos haluat asentaa go-ympäristön uuteen solmuun (minun tapauksessani virtuaalikoneeseen), lataa ensin go-asennuspaketti ja lataa se viralliselta verkkosivustolta.Kaikki julkaisut - Go-ohjelmointikieli
Koska olen asentamassa virtuaalikoneen palvelinversiota, käytän go-ympäristöä asentaessani asennuspaketin lataamiseen curl-komentoa. Koska sinun on määritettävä yhteensopivuus go-ympäristön ja k8s-klusterin välillä, sinun on tarkistettava klusterin k8s-versio.
[root@master ~]# kubectl-versio --short
Asiakasversio: v1.23.1
Palvelimen versio: v1.23.1
Tarkista virallinen kubernetes-dokumentaatio ja huomaa, että se vastaa go-versiota 1.19.5.
- [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
Lisää go ympäristömuuttujaan ja tarkista go-versio selvittääksesi, onko go asennettu onnistuneesti.
- [root@client ~]# export PATH=$PATH:/usr/local/go/bin
- [root@client ~]# go version
- go version go1.19.5 linux/amd64
Lisää go to ympäristömuuttuja jatkuvasti ja kirjoita yllä oleva vienti PATH=... järjestelmätiedostoon.
- [root@client ~]# vim ~/.bashrc
- [root@client ~]# source ~/.bashrc
Jos käytät Kubernetes-versiota >= v1.17.0, käytä vastaavaa v0.xy-tunnistetta. Esimerkiksi k8s.io/[email protected] vastaa Kubernetes v1.20.4:ää. Versioni on 1.23.1, joten lataa vastaava client-go-versio:
go get k8s.io/client-go@v0.23.1
go mod -tiedosto luo ja käynnistää go mode -tuen:
- go mod init <module-name>
- export GO111MODULE=on
Sitten luodaan ensimmäinen go.mod-tiedosto, joka sisältää moduulin nimen ja go-version tiedot. Kun projekti otetaan käyttöön tai riippuvuuksia lisätään, go.mod-tiedosto päivittyy automaattisesti ja tallentaa kaikki riippuvuudet ja niiden versiot Go.sum-tiedosto luodaan myös riippuvuuksien johdonmukaisuuden ja täydellisyyden varmistamiseksi. Siksi go.mod-tiedosto kerää vähitellen kaikki projektin edellyttämät riippuvuudet ja versiotiedot.
Kirjoita main.go-tiedosto
- 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)
- }
- }
Kun määrität nimiavaruuden monitor-sa:ksi, voit nähdä, että client-go on onnistuneesti sieppannut klusterin nimiavaruuden ryhmien määrän.
- [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
Lataa kubectl. Huomaa, että paikka, jonka lataat ja tallennat tänne, on paikka, johon viittaat myöhemmin, joten on parasta muistaa tallennuspolku etkä tallenna sitä latauskansioon.https://storage.googleapis.com/kubernetes-release/release/v1.18.0/bin/windows/amd64/kubectl.exe
Lisää se sitten ympäristömuuttujaan. Kube tässä on kansio, johon kubectl.exe on tallennettu.
Avaa Windowsin komentorivi ja testaa, toimiiko kubectl oikein.
Määritä kube-config ja kopioi Linux-järjestelmään kopioitu asetustiedosto Windowsiin. Tässä oleva hakemisto on C:/user/.kube/config. Määritä se sitten vscodeksi.
Lataa client-go paikallisesti ja lataa sitten go-laajennus ja koodin ajolaajennus vscodessa:
Sitten cstrl+shift+p, kirjoita vscode-hakurivi ja asenna go-laajennusten riippuvuudet. Hae Go:install/update tools
Jos näin tapahtuu, sinun on asetettava ympäristömuuttujat. Aseta seuraavat neljä ympäristömuuttujaa, joissa go_path on hakemisto, johon ajettava go-koodi on tallennettu, ja go_root on hakemisto, johon latasit go.
Tarkista polku Jos siellä on seuraava, se on normaalia:
Yritä tällä hetkellä ladata GO:install/update -työkalut uudelleen, niin se onnistuu.
Onnistuneen asennuksen jälkeen asenna client-go gopath-hakemistoon
- 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
Todettiin, että operaatio onnistui: