내 연락처 정보
우편메소피아@프로톤메일.com
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
client-go는 개발자가 kubernetes와 상호 작용할 수 있도록 특별히 k8s에서 게시하고 유지 관리하는 클라이언트 라이브러리입니다. k8s 리소스에 대한 CRUD 작업(생성, 읽기, 업데이트, 삭제), 이벤트 모니터링 및 처리, kubernetes 클러스터의 컨텍스트 및 구성에 대한 액세스를 지원합니다.
Client go는 kubernetes 클러스터와 독립적이지만 클러스터와 상호 작용하는 클라이언트 시스템입니다. 이 머신에 go 환경을 설치하고 kubernetes와 연결을 설정합니다.
새 노드(저의 경우 가상 머신)에 Go 환경을 설치하려면 먼저 Go 설치 패키지를 다운로드한 후 공식 웹사이트에서 다운로드하세요.모든 릴리스 - Go 프로그래밍 언어
저는 서버 버전의 가상머신을 설치하고 있기 때문에 go 환경을 설치할 때 컬 명령어를 이용하여 설치 패키지를 다운로드 받습니다. go 환경과 k8s 클러스터의 호환성을 확인해야 하므로 클러스터의 k8s 버전을 확인해야 합니다.
[root@master ~]# kubectl 버전 --short
클라이언트 버전: v1.23.1
서버 버전: v1.23.1
공식 kubernetes 문서를 확인하여 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
환경 변수에 go를 추가하고 go 버전을 확인하여 go가 성공적으로 설치되었는지 확인하세요.
- [root@client ~]# export PATH=$PATH:/usr/local/go/bin
- [root@client ~]# go version
- go version go1.19.5 linux/amd64
지속적으로 환경 변수에 go를 추가하고 위의 내보내기 PATH=...를 시스템 파일에 씁니다.
- [root@client ~]# vim ~/.bashrc
- [root@client ~]# source ~/.bashrc
Kubernetes 버전 >= v1.17.0을 사용하는 경우 해당 v0.xy 태그를 사용하세요. 예를 들어 k8s.io/[email protected]는 Kubernetes v1.20.4에 해당합니다. 내 버전은 1.23.1이므로 해당 클라이언트 이동 버전을 다운로드하세요.
go get k8s.io/client-go@v0.23.1
go mod 파일은 go 모드 지원을 생성하고 시작합니다.
- go mod init <module-name>
- export GO111MODULE=on
그런 다음 모듈 이름과 go 버전 정보를 포함하는 초기 go.mod 파일이 생성됩니다. 프로젝트가 배포되거나 종속성이 추가되면 go.mod 파일이 자동으로 업데이트되어 모든 종속성과 해당 버전이 기록됩니다. . 종속성의 일관성과 완전성을 보장하기 위해 go.sum 파일도 생성됩니다. 따라서 go.mod 파일은 프로젝트에 필요한 모든 종속성과 버전 정보를 점차적으로 축적하게 됩니다.
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)
- }
- }
네임스페이스를 monitor-sa로 지정하면 client-go가 클러스터의 네임스페이스에 있는 Pod 수를 성공적으로 캡처한 것을 확인할 수 있습니다.
- [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
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로 구성하십시오.
client-go를 로컬로 다운로드한 다음 vscode에서 go 플러그인과 코드 실행기 플러그인을 다운로드하세요.
그런 다음 cstrl+shift+p를 누르고 vscode 검색 줄을 입력하고 go 플러그인 종속성을 설치합니다. 검색 Go:설치/업데이트 도구
이런 일이 발생하면 환경 변수를 설정해야 합니다. 다음 네 가지 환경 변수를 설정합니다. 여기서 go_path는 실행하려는 go 코드가 저장된 디렉터리이고 go_root는 go를 다운로드한 디렉터리입니다.
경로를 확인하시면 정상입니다.
이때 GO:install/update 도구를 다시 다운로드해 보면 성공할 것입니다.
성공적으로 설치한 후 gopath 디렉터리에 client-go를 설치합니다.
- 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
작업이 성공한 것으로 확인되었습니다.