Análisis del código fuente del cliente
Client-go es un cliente que llama a la API de objetos de recursos del clúster de Kubernetes. Es decir, client-go admite agregar, eliminar, cambiar y recuperar objetos de recursos (incluidos la implementación, el servicio y el ingreso). clúster de kubernetes, conjunto de réplicas, pod, espacio de nombres, nodo, etc.) y otras operaciones. Estos objetos incluyen implementaciones, servicios, ingresos, conjuntos de réplicas, pods, espacios de nombres, nodos, etc.) en un clúster de Kubernetes. La mayor parte del desarrollo secundario del paquete de API front-end de Kubernetes se completa a través del paquete de software de terceros client-go.
Documentación oficial de client-go: /kubernetes/client-go
Versión de la biblioteca Client-go
Obtiene la ruta absoluta del archivo de configuración de Kubernetes kubeconfig. La ruta general es $HOME/.kube/config. Este archivo se utiliza principalmente para configurar un clúster de Kubernetes conectado localmente. El archivo de configuración admite dos métodos de acceso, dentro y fuera del clúster. (Siempre que esté dentro del rango de acceso de la política de red)
El formato del archivo de configuración es el siguiente:
Utilice el método BuildConfigFromFlags para obtener el objeto rest.Config a través de parámetros (URL del maestro o ruta de kubeconfig). Generalmente la ruta al parámetro kubeconfig.
Tomando el objeto de configuración como entrada, llame a la función NewForConfig para obtener el objeto del cliente, que es una colección de clientes. Contiene todas las versiones del cliente. Fuente: k8s.io/client-go/kubernetes/clientset.go
La función NewForConfig crea un objeto Clientset basado en el objeto rest.config pasado y ejecuta el método CoreV1 ().
Los parámetros específicos de esta estructura son los siguientes:
La estructura Clientset implementa todos los métodos definidos por la estructura anterior. Fuente: k8s.io/client-go/kubernetes/clientset.go
Porque se puede llamar a Clientset usando cualquiera de sus funciones, como obtener una lista de Pod.
Cuando se crea el objeto Clientset, la variable coreV1 en Clientset se inicializará y creará. Es decir, se crea el objeto CoreV1Client.
Como se muestra a continuación:
CoreV1Interface contiene interfaces para llamar a varios objetos de Kubernetes, como PodsGetter (una interfaz para agregar, eliminar, modificar y recuperar objetos pod en Kubernetes) y ServicesGetter (interfaz para manipular objetos de servicio).
La estructura CoreV1Client implementa todas las funciones definidas de CoreV1Interface.
La interfaz PodsGetter define el método Pods, que devuelve una PodInterface, por lo que puedes usar el método Clients.Corev1().Pods() para agregar, eliminar, modificar y recuperar Pods.
Después de llamar al método Pods, la función newPods creará un objeto Pods.
El objeto Pods hereda la interfaz rest.Interface, lo que significa que la implementación final es básicamente una llamada HTTP a RESTClient.
La interfaz PodInterface define todos los métodos para las operaciones de objetos Pod.
El objeto Pod hereda rest.Interface. Si el cliente mencionado anteriormente quiere llamar al objeto de recurso es, primero necesita obtener la información de configuración de Kubernetes, es decir, $HOME/.kube/config (master). nodo)
El proceso específico se muestra en la siguiente figura: