प्रौद्योगिकी साझेदारी

[k8s स्रोतसङ्केतः] 1.client-go परिनियोजनं क्लस्टरस्य बहिः

2024-07-12

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

client-go इति क्लायन्ट् पुस्तकालयः अस्ति यः k8s द्वारा प्रकाशितः, परिपालितः च विशेषतया विकासकानां कृते kubernetes इत्यनेन सह अन्तरक्रियां कर्तुं । इदं k8s संसाधनेषु CRUD-सञ्चालनानि (निर्माणं, पठितुं, अद्यतनं कर्तुं, विलोपनं), घटनानिरीक्षणं संसाधनं च, kubernetes क्लस्टरस्य सन्दर्भं विन्यासं च प्राप्तुं समर्थयति

Client go इति क्लायन्ट् यन्त्रं यत् kubernetes क्लस्टरतः स्वतन्त्रं किन्तु क्लस्टर् इत्यनेन सह अन्तरक्रियां करोति । अस्मिन् यन्त्रे go वातावरणं संस्थाप्य kubernetes इत्यनेन सह संयोजनं स्थापयतु ।

लिनक्स

go वातावरणं संस्थापयन्तु

नूतने नोड् (मम सन्दर्भे वर्चुअल् मशीन्) इत्यत्र go वातावरणं संस्थापयितुं प्रथमं go संस्थापनसङ्कुलं डाउनलोड् कृत्वा आधिकारिकजालस्थलात् डाउनलोड् कुर्वन्तु ।सर्वाणि विमोचनानि - The Go Programming Language

यतः अहं वर्चुअल् मशीनस्य सर्वर संस्करणं संस्थापयामि, go वातावरणं संस्थापयन् संस्थापनसङ्कुलं डाउनलोड् कर्तुं curl आदेशस्य उपयोगं करोमि । यतः भवद्भिः go वातावरणस्य k8s क्लस्टरस्य च मध्ये संगततां निर्धारयितुं आवश्यकम्, अतः भवद्भिः क्लस्टरस्य k8s संस्करणं परीक्षितव्यम् ।

[मूल@मास्टर ~]# kubectl संस्करण --लघु
क्लायन्ट् संस्करणम्: v1.23.1
सर्वर संस्करणम्: v1.23.1

आधिकारिकं kubernetes दस्तावेजीकरणं पश्यन्तु तथा च ज्ञातव्यं यत् एतत् go इत्यस्य संस्करणं 1.19.5 इत्यनेन सह सङ्गतम् अस्ति ।

  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

environment चर मध्ये 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 अस्ति, अतः तत्सम्बद्धं client-go संस्करणं डाउनलोड् कुर्वन्तु:

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

go mod सञ्चिका go mode समर्थनं निर्माति आरभते च:

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

ततः प्रारम्भिकं go.mod सञ्चिका निर्मितं भविष्यति, यत्र मॉड्यूलस्य नाम तथा go संस्करणस्य सूचना अस्ति, यथा यथा परियोजना परिनियोज्यते अथवा निर्भरताः योजिताः भवन्ति, go.mod सञ्चिका स्वयमेव अद्यतनं करिष्यति, सर्वाणि निर्भरतानि तेषां संस्करणं च अभिलेखयिष्यति .आश्रितानां स्थिरतां पूर्णतां च सुनिश्चित्य go.sum सञ्चिका अपि उत्पद्यते । अतः go.mod सञ्चिका क्रमेण परियोजनायाः आवश्यकानि सर्वाणि आश्रयाणि संस्करणसूचनानि च सञ्चयिष्यति ।

सूचनां गृहीतुं client-go इत्यस्य उपयोगं कुर्वन्तु

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 इति नामस्थानं निर्दिशति चेत्, भवान् द्रष्टुं शक्नोति यत् client-go इत्यनेन क्लस्टर् मध्ये नामस्थाने pods इत्यस्य संख्यां सफलतया गृहीता ।

  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 इति ग्रन्थः अस्ति इति ग्रन्थः अस्ति

ततः environment variable इत्यत्र योजयन्तु ।

windows आदेशपङ्क्तिं उद्घाट्य kubectl सम्यक् कार्यं करोति वा इति परीक्ष्यताम् ।

kube-config विन्यस्यताम्, Linux प्रणाल्यां प्रतिलिपिकृतां config सञ्चिकां Windows मध्ये प्रतिलिख्यताम् अत्र निर्देशिका C:/user/.kube/config अस्ति । ततः vscode इत्यत्र विन्यस्यताम् ।

VSCode इति

client-go स्थानीयतया डाउनलोड् कुर्वन्तु, ततः vscode मध्ये go प्लग-इन् तथा कोड रनर प्लग-इन् डाउनलोड् कुर्वन्तु:

ततः cstrl+shift+p, vscode अन्वेषणरेखां प्रविश्य, go प्लग-इन् निर्भरतां संस्थापयन्तु । अन्वेषणं Go:install/update tools इति

यदि एतत् भवति तर्हि भवद्भिः वातावरणचराः सेट् कर्तव्याः । निम्नलिखित चत्वारि वातावरणचराः सेट् कुर्वन्तु, यत्र go_path इति निर्देशिका यत्र भवान् चालयितुम् इच्छति सः go कोडः संगृहीतः अस्ति, तथा च go_root इति निर्देशिका यत्र भवान् go डाउनलोड् कृतवान् ।

मार्गं पश्यन्तु यदि निम्नलिखितम् अस्ति तर्हि सामान्यम् अस्ति।

अस्मिन् समये पुनः GO:install/update इति साधनानि डाउनलोड् कर्तुं प्रयतध्वम्, ततः सफलं भविष्यति ।

सफलसंस्थापनानन्तरं gopath निर्देशिकायां client-go संस्थापयन्तु

  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

शल्यक्रिया सफला इति ज्ञातम् : १.