k8s-golisted
Install: claude install-skill omeyang/Thoth
# Kubernetes Go 开发专家
编写 Kubernetes 相关的 Go 代码:$ARGUMENTS
## client-go 基础
### 创建客户端
```go
// 集群内运行(Pod 内)
func inClusterClient() (*kubernetes.Clientset, error)
// 集群外运行(使用 kubeconfig)
func outOfClusterClient(kubeconfig string) (*kubernetes.Clientset, error)
// 自动检测环境(推荐)
func autoClient() (*kubernetes.Clientset, error)
```
> 完整实现见 [references/examples.md](references/examples.md#创建客户端)
### CRUD 操作
```go
// 创建 Pod
client.CoreV1().Pods(ns).Create(ctx, pod, metav1.CreateOptions{})
// 读取
client.CoreV1().Pods(ns).Get(ctx, name, metav1.GetOptions{})
// 列表(带 label 过滤)
client.CoreV1().Pods(ns).List(ctx, metav1.ListOptions{LabelSelector: "app=myapp"})
// 更新
client.CoreV1().Pods(ns).Update(ctx, pod, metav1.UpdateOptions{})
// 删除
client.CoreV1().Pods(ns).Delete(ctx, name, metav1.DeleteOptions{})
```
> 完整实现见 [references/examples.md](references/examples.md#crud-操作)
## Watch 和 Informer
### 使用 Watch
```go
func watchPods(ctx context.Context, client *kubernetes.Clientset, ns string) error
```
- 监听 Added / Modified / Deleted 事件
- 适合简单场景
### 使用 SharedInformer(推荐)
```go
factory := informers.NewSharedInformerFactory(client, 30*time.Second)
podInformer := factory.Core().V1().Pods().Informer()
podInformer.AddEventHandler(cache.ResourceEventHandlerFuncs{
AddFunc: func(obj interface{}) { ... },
UpdateFunc: func(oldObj, newObj interface{}) { ... },
DeleteFunc: func(obj interface{}) { ... }, // 注意处理 tombstone
})
factory.Start(ctx.Done())
cache.WaitForCacheSync(ctx.Done(), podI