Go-Kubernetes-Client-go编程从Pod管理到CRD开发
文章导语
Client-go是Kubernetes官方的Go客户端库,用于与K8s API Server交互。本文深入Client-go的核心组件:Informer、WorkQueue、Lister,实现从基础CRUD到自定义Controller。
一、Client-go基础操作
go
func NewClientSet() (*kubernetes.Clientset, error) {
config, err := clientcmd.BuildConfigFromFlags("", kubeconfig)
if err != nil {
return nil, err
}
return kubernetes.NewForConfig(config)
}
// List Pods
func ListPods(clientset *kubernetes.Clientset, namespace string) {
pods, err := clientset.CoreV1().Pods(namespace).List(context.TODO(), metav1.ListOptions{})
for _, pod := range pods.Items {
fmt.Printf("Pod: %s, Status: %s\n", pod.Name, pod.Status.Phase)
}
}
二、Informer机制
go
func WatchPods(clientset *kubernetes.Clientset) {
factory := informers.NewSharedInformerFactory(clientset, 30*time.Second)
podInformer := factory.Core().V1().Pods()
podInformer.Informer().AddEventHandler(cache.ResourceEventHandlerFuncs{
AddFunc: func(obj interface{}) {
pod := obj.(*corev1.Pod)
fmt.Printf("Pod Added: %s\n", pod.Name)
},
UpdateFunc: func(oldObj, newObj interface{}) {
fmt.Println("Pod Updated")
},
DeleteFunc: func(obj interface{}) {
fmt.Println("Pod Deleted")
},
})
stopCh := make(chan struct{})
defer close(stopCh)
factory.Start(stopCh)
factory.WaitForCacheSync(stopCh)
<-stopCh
}
三、全文总结
- Client-go是K8s生态的核心Go库
- Informer实现本地缓存+事件通知
- WorkQueue限流+去重处理事件
- CRD+Controller扩展K8s能力
参考文献
- Client-go官方文档
- K8s Sample Controller
- Kubebuilder框架文档