minhas informações de contato
Correspondência[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
client-go é uma biblioteca cliente publicada e mantida pela k8s especificamente para desenvolvedores interagirem com kubernetes. Ele suporta operações CRUD (criar, ler, atualizar, excluir) em recursos k8s, monitoramento e processamento de eventos e acesso ao contexto e configuração do cluster kubernetes.
Client go é uma máquina cliente independente do cluster Kubernetes, mas que interage com o cluster. Instale o ambiente go nesta máquina e estabeleça uma conexão com o kubernetes.
Para instalar o ambiente go em um novo nó (no meu caso, uma máquina virtual), primeiro baixe o pacote de instalação go e baixe-o do site oficial.Todos os lançamentos - A linguagem de programação Go
Como estou instalando uma versão de servidor da máquina virtual, ao instalar o ambiente go, utilizo o comando curl para baixar o pacote de instalação. Como você precisa determinar a compatibilidade entre o ambiente go e o cluster k8s, é necessário verificar a versão k8s do cluster.
[root@master ~]# kubectl versão --short
Versão do cliente: v1.23.1
Versão do servidor: v1.23.1
Verifique a documentação oficial do Kubernetes e descubra que ela corresponde à versão 1.19.5 do go.
- [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
Adicione go à variável de ambiente e verifique a versão do go para determinar se o go foi instalado com sucesso.
- [root@client ~]# export PATH=$PATH:/usr/local/go/bin
- [root@client ~]# go version
- go version go1.19.5 linux/amd64
Adicione go à variável de ambiente de forma persistente e escreva o export PATH=... acima no arquivo do sistema.
- [root@client ~]# vim ~/.bashrc
- [root@client ~]# source ~/.bashrc
Se você estiver usando a versão do Kubernetes >= v1.17.0, use a tag v0.xy correspondente. Por exemplo, k8s.io/[email protected] corresponde ao Kubernetes v1.20.4. Minha versão é 1.23.1, então baixe a versão correspondente do client-go:
go get k8s.io/client-go@v0.23.1
O arquivo go mod cria e inicia o suporte ao modo go:
- go mod init <module-name>
- export GO111MODULE=on
Um arquivo go.mod inicial será então criado, incluindo o nome do módulo e as informações da versão do go. À medida que o projeto for implantado ou as dependências forem adicionadas, o arquivo go.mod será atualizado automaticamente, registrando todas as dependências e suas versões. . O arquivo go.sum também é gerado para garantir a consistência e integridade das dependências. Portanto, o arquivo go.mod acumulará gradativamente todas as dependências e informações de versão exigidas pelo projeto.
Escreva o arquivo 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)
- }
- }
Ao especificar o namespace como monitor-sa, você pode ver que o client-go capturou com sucesso o número de pods no namespace no cluster.
- [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
Baixe kubectl. Observe que o local que você baixa e salva aqui é o local que você fará referência mais tarde, portanto, é melhor lembrar o caminho para salvar e não salvá-lo na pasta de download.https://storage.googleapis.com/kubernetes-release/release/v1.18.0/bin/windows/amd64/kubectl.exe
Em seguida, adicione-o à variável de ambiente. O kube aqui é a pasta onde kubectl.exe está armazenado.
Abra a linha de comando do Windows e teste se o kubectl está funcionando corretamente.
Configure kube-config e copie o arquivo de configuração copiado do sistema Linux para o Windows. O diretório aqui é C:/user/.kube/config. Em seguida, configure-o no vscode.
Baixe o client-go localmente e, em seguida, baixe o plug-in go e o plug-in code runner no vscode:
Em seguida, cstrl+shift+p, insira a linha de pesquisa vscode e instale as dependências do plug-in go. Search Go:instalar/atualizar ferramentas
Se isso acontecer, você precisará definir variáveis de ambiente. Defina as quatro variáveis de ambiente a seguir, onde go_path é o diretório onde o código go que você deseja executar está armazenado e go_root é o diretório onde você baixou go.
Verifique o caminho. Se houver o seguinte, é normal:
Neste momento, tente baixar as ferramentas GO:install/update novamente e tudo será bem-sucedido.
Após a instalação bem-sucedida, instale o client-go no diretório 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
Descobriu que a operação foi bem-sucedida: