informasi kontak saya
Surat[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
client-go adalah perpustakaan klien yang diterbitkan dan dikelola oleh k8s khusus bagi pengembang untuk berinteraksi dengan kubernetes. Ini mendukung operasi CRUD (membuat, membaca, memperbarui, menghapus) pada sumber daya k8s, pemantauan dan pemrosesan peristiwa, dan akses ke konteks dan konfigurasi cluster kubernetes.
Client go adalah mesin klien yang independen terhadap cluster kubernetes tetapi berinteraksi dengan cluster. Instal lingkungan go di mesin ini dan buat koneksi dengan kubernetes.
Untuk menginstal lingkungan go pada node baru (dalam kasus saya, mesin virtual), pertama-tama unduh paket instalasi go dan unduh dari situs resminya.Semua rilis - Bahasa Pemrograman Go
Karena saya menginstal versi server dari mesin virtual, ketika menginstal lingkungan go, saya menggunakan perintah curl untuk mengunduh paket instalasi. Karena Anda perlu menentukan kompatibilitas antara lingkungan go dan kluster k8s, Anda perlu memeriksa versi k8s kluster.
[root@master ~]# kubectl versi --short
Versi Klien: v1.23.1
Versi Server: v1.23.1
Periksa dokumentasi resmi kubernetes dan temukan bahwa dokumentasi tersebut cocok dengan versi go 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
Tambahkan go ke variabel lingkungan dan periksa versi go untuk menentukan apakah go berhasil diinstal.
- [root@client ~]# export PATH=$PATH:/usr/local/go/bin
- [root@client ~]# go version
- go version go1.19.5 linux/amd64
Tambahkan variabel go to environment secara terus-menerus, dan tulis di atas ekspor PATH=... ke file sistem.
- [root@client ~]# vim ~/.bashrc
- [root@client ~]# source ~/.bashrc
Jika Anda menggunakan Kubernetes versi >= v1.17.0, silakan gunakan tag v0.xy yang sesuai. Misalnya, k8s.io/[email protected] berhubungan dengan Kubernetes v1.20.4. Versi saya adalah 1.23.1, jadi unduh versi client-go yang sesuai:
go get k8s.io/client-go@v0.23.1
file go mod membuat dan memulai dukungan mode go:
- go mod init <module-name>
- export GO111MODULE=on
File awal go.mod kemudian akan dibuat, termasuk nama modul dan informasi versi go. Saat proyek di-deploy atau dependensi ditambahkan, file go.mod akan diperbarui secara otomatis, mencatat semua dependensi dan versinya . File go.sum juga dibuat untuk memastikan konsistensi dan kelengkapan dependensi. Oleh karena itu, file go.mod secara bertahap akan mengumpulkan semua dependensi dan informasi versi yang diperlukan oleh proyek.
Tulis 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)
- }
- }
Saat menentukan namespace sebagai monitor-sa, Anda dapat melihat bahwa client-go berhasil menangkap jumlah pod dalam namespace di klaster.
- [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
Unduh kubectl. Perhatikan bahwa tempat Anda mendownload dan menyimpan di sini adalah tempat yang akan Anda referensikan nanti, jadi sebaiknya ingat jalur penyimpanannya dan jangan menyimpannya di folder download.https://storage.googleapis.com/kubernetes-release/release/v1.18.0/bin/windows/amd64/kubectl.exe
Kemudian tambahkan ke variabel lingkungan. Kube di sini adalah folder tempat penyimpanan kubectl.exe.
Buka baris perintah windows dan uji apakah kubectl berfungsi dengan baik.
Konfigurasikan kube-config, dan salin file konfigurasi yang disalin ke sistem Linux ke Windows. Direktori di sini adalah C:/user/.kube/config. Kemudian konfigurasikan menjadi vscode.
Unduh client-go secara lokal, lalu unduh plugin go dan plugin code runner di vscode:
Kemudian cstrl+shift+p, masukkan baris pencarian vscode, dan instal dependensi plugin go. Cari Go:instal/perbarui alat
Jika ini terjadi, Anda perlu menyetel variabel lingkungan. Tetapkan empat variabel lingkungan berikut, di mana go_path adalah direktori tempat menyimpan kode go yang ingin Anda jalankan, dan go_root adalah direktori tempat Anda mengunduh go.
Periksa jalannya. Jika ada yang berikut ini, itu normal:
Saat ini, coba unduh lagi GO:install/update tools, dan berhasil.
Setelah instalasi berhasil, instal client-go di direktori 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
Menemukan bahwa operasi berhasil: