Mi informacion de contacto
Correo[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
client-go es una biblioteca cliente publicada y mantenida por k8s específicamente para que los desarrolladores interactúen con kubernetes. Admite operaciones CRUD (crear, leer, actualizar, eliminar) en recursos k8s, monitoreo y procesamiento de eventos y acceso al contexto y configuración del clúster de Kubernetes.
Client go es una máquina cliente que es independiente del clúster de Kubernetes pero que interactúa con el clúster. Instale el entorno go en esta máquina y establezca una conexión con kubernetes.
Para instalar el entorno go en un nuevo nodo (en mi caso, una máquina virtual), primero descargue el paquete de instalación de go y descárguelo del sitio web oficial.Todos los lanzamientos - El lenguaje de programación Go
Como estoy instalando una versión de servidor de la máquina virtual, al instalar el entorno go, uso el comando curl para descargar el paquete de instalación. Debido a que necesita determinar la compatibilidad entre el entorno go y el clúster k8s, debe verificar la versión k8s del clúster.
[root@master ~]# versión de kubectl --short
Versión del cliente: v1.23.1
Versión del servidor: v1.23.1
Consulte la documentación oficial de Kubernetes y compruebe que coincide con la versión 1.19.5 de 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
Agregue go a la variable de entorno y verifique la versión de go para determinar si go se instaló correctamente.
- [root@client ~]# export PATH=$PATH:/usr/local/go/bin
- [root@client ~]# go version
- go version go1.19.5 linux/amd64
Agregue ir a la variable de entorno de forma persistente y escriba la ruta de exportación anterior =... en el archivo del sistema.
- [root@client ~]# vim ~/.bashrc
- [root@client ~]# source ~/.bashrc
Si está utilizando la versión de Kubernetes >= v1.17.0, utilice la etiqueta v0.xy correspondiente. Por ejemplo, k8s.io/[email protected] corresponde a Kubernetes v1.20.4. Mi versión es 1.23.1, así que descargue la versión client-go correspondiente:
go get k8s.io/client-go@v0.23.1
El archivo go mod crea e inicia el soporte del modo go:
- go mod init <module-name>
- export GO111MODULE=on
Luego se creará un archivo go.mod inicial, que incluirá el nombre del módulo y la información de la versión de go. A medida que se implemente el proyecto o se agreguen dependencias, go se actualizará automáticamente y registrará todas las dependencias y sus versiones. El archivo go.sum también se genera para garantizar la coherencia y la integridad de las dependencias. Por lo tanto, el archivo go.mod acumulará gradualmente todas las dependencias y la información de versión requerida por el proyecto.
Escribir archivo 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)
- }
- }
Al especificar el espacio de nombres como monitor-sa, puede ver que client-go capturó con éxito la cantidad de pods en el espacio de nombres del clúster.
- [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
Descargar kubectl. Tenga en cuenta que el lugar donde descarga y guarda aquí es el lugar al que hará referencia más adelante, por lo que es mejor recordar la ruta para guardar y no guardarla en la carpeta de descargas.https://storage.googleapis.com/kubernetes-release/release/v1.18.0/bin/windows/amd64/kubectl.exe
Luego agréguelo a la variable de entorno. El kube aquí es la carpeta donde está almacenado kubectl.exe.
Abra la línea de comando de Windows y pruebe si kubectl funciona correctamente.
Configure kube-config y copie el archivo de configuración copiado en el sistema Linux a Windows. El directorio aquí es C:/user/.kube/config. Luego configúrelo en vscode.
Descargue client-go localmente, luego descargue el complemento go y el complemento code runner en vscode:
Luego cstrl+shift+p, ingrese la línea de búsqueda de vscode e instale las dependencias del complemento go. Buscar Ir:instalar/actualizar herramientas
Si esto sucede, debe configurar variables de entorno. Configure las siguientes cuatro variables de entorno, donde go_path es el directorio donde está almacenado el código go que desea ejecutar y go_root es el directorio donde descargó go.
Verifique la ruta. Si existe lo siguiente, es normal:
En este momento, intente descargar GO: instalar/actualizar herramientas nuevamente y será exitoso.
Después de una instalación exitosa, instale client-go en el directorio 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
Descubrí que la operación fue exitosa: