Marketplace
go-kubernetes
Kubernetes operators and client-go development
$ Instalar
git clone https://github.com/pluginagentmarketplace/custom-plugin-go /tmp/custom-plugin-go && cp -r /tmp/custom-plugin-go/skills/go-kubernetes ~/.claude/skills/custom-plugin-go// tip: Run this command in your terminal to install the skill
SKILL.md
name: go-kubernetes description: Kubernetes operators and client-go development sasmp_version: "1.3.0" bonded_agent: 08-go-devops bond_type: PRIMARY_BOND
Go Kubernetes Skill
Build Kubernetes operators and controllers with client-go.
Overview
Develop custom Kubernetes controllers, operators, and CRDs using client-go and controller-runtime.
Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| type | string | yes | - | Type: "operator", "controller", "crd" |
| framework | string | no | "controller-runtime" | Framework |
Core Topics
Client Setup
import (
"k8s.io/client-go/kubernetes"
"k8s.io/client-go/rest"
"k8s.io/client-go/tools/clientcmd"
)
func NewClient() (*kubernetes.Clientset, error) {
config, err := rest.InClusterConfig()
if err != nil {
// Fallback to kubeconfig
kubeconfig := filepath.Join(os.Getenv("HOME"), ".kube", "config")
config, err = clientcmd.BuildConfigFromFlags("", kubeconfig)
if err != nil {
return nil, err
}
}
return kubernetes.NewForConfig(config)
}
Watch Resources
func WatchPods(ctx context.Context, client *kubernetes.Clientset, namespace string) error {
watcher, err := client.CoreV1().Pods(namespace).Watch(ctx, metav1.ListOptions{})
if err != nil {
return err
}
defer watcher.Stop()
for event := range watcher.ResultChan() {
pod := event.Object.(*corev1.Pod)
switch event.Type {
case watch.Added:
fmt.Printf("Pod added: %s\n", pod.Name)
case watch.Modified:
fmt.Printf("Pod modified: %s (phase: %s)\n", pod.Name, pod.Status.Phase)
case watch.Deleted:
fmt.Printf("Pod deleted: %s\n", pod.Name)
}
}
return nil
}
Controller-Runtime Reconciler
type MyReconciler struct {
client.Client
Scheme *runtime.Scheme
Log logr.Logger
}
func (r *MyReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) {
log := r.Log.WithValues("resource", req.NamespacedName)
var myResource myv1.MyResource
if err := r.Get(ctx, req.NamespacedName, &myResource); err != nil {
if apierrors.IsNotFound(err) {
return ctrl.Result{}, nil
}
return ctrl.Result{}, err
}
// Reconciliation logic
if myResource.Status.Phase == "" {
myResource.Status.Phase = "Pending"
if err := r.Status().Update(ctx, &myResource); err != nil {
return ctrl.Result{}, err
}
}
return ctrl.Result{RequeueAfter: time.Minute}, nil
}
Custom Resource Definition
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
name: myresources.example.com
spec:
group: example.com
versions:
- name: v1
served: true
storage: true
schema:
openAPIV3Schema:
type: object
properties:
spec:
type: object
properties:
replicas:
type: integer
status:
type: object
properties:
phase:
type: string
scope: Namespaced
names:
plural: myresources
singular: myresource
kind: MyResource
Troubleshooting
Failure Modes
| Symptom | Cause | Fix |
|---|---|---|
| RBAC denied | Missing permissions | Check ServiceAccount |
| CRD not found | Not installed | kubectl apply CRD |
| Leader election fail | Lease conflict | Check replicas |
Usage
Skill("go-kubernetes")
Repository

pluginagentmarketplace
Author
pluginagentmarketplace/custom-plugin-go/skills/go-kubernetes
1
Stars
0
Forks
Updated8h ago
Added6d ago