luiscamaral

l1-cluster-services

1
0
# Install this skill:
npx skills add luiscamaral/k8s-cell-platform-skills --skill "l1-cluster-services"

Install specific skill from multi-skill repository

# Description

Manages L1 cluster platform services including MetalLB load balancer, external-dns for DNS automation, and Karpenter for node autoscaling. Use for load balancer configuration, IP address assignment, DNS record management, or cluster autoscaling on Proxmox.

# SKILL.md


name: l1-cluster-services
description: Manages L1 cluster platform services including MetalLB load balancer, external-dns for DNS automation, and Karpenter for node autoscaling. Use for load balancer configuration, IP address assignment, DNS record management, or cluster autoscaling on Proxmox.
allowed-tools: Read, Glob, Grep, Bash(kubectl:*)


L1 Cluster Services Management

Manages cluster-level services that provide capabilities to applications.

Layer Boundaries

L1 Owns:
- MetalLB (LoadBalancer for bare-metal)
- external-dns (DNS automation with Pi-hole)
- Karpenter (Node autoscaling on Proxmox)

L1 Does NOT Own:
- Cilium CNI (L0 - Talos inline manifests)
- Argo CD, Kyverno (L2)
- Application workloads

Key Directory

l1_cluster-platform/
├── metallb/           # LoadBalancer config
├── external-dns/      # DNS automation
├── karpenter/         # Node autoscaling
├── test-service/      # Integration validation
├── generated/         # Generated docs
└── Makefile           # Operations

Component Details

MetalLB (v0.15.3)

  • Namespace: metallb-system
  • IP Pool: 192.168.100.200-250
  • Mode: L2 advertisement
# Status
kubectl get pods -n metallb-system
kubectl get ipaddresspools -n metallb-system
kubectl get l2advertisements -n metallb-system

# Check assigned IPs
kubectl get svc -A -o wide | grep LoadBalancer

external-dns (v0.17.0)

  • Namespace: external-dns
  • Provider: Pi-hole
  • Domain: homelab.local
# Status
kubectl get pods -n external-dns
kubectl logs -n external-dns -l app.kubernetes.io/name=external-dns

# Check DNS records created
kubectl get svc -A -o jsonpath='{range .items[?(@.metadata.annotations.external-dns\.alpha\.kubernetes\.io/hostname)]}{.metadata.name}: {.metadata.annotations.external-dns\.alpha\.kubernetes\.io/hostname}{"\n"}{end}'

Karpenter (v0.7.1)

  • Namespace: karpenter
  • Strategy: Hybrid (2 static + 0-10 dynamic workers)
  • Provider: Proxmox
# Status
kubectl get pods -n karpenter
kubectl get nodepools
kubectl get nodeclaims

# Check provisioned nodes
kubectl get nodes --show-labels | grep karpenter

Common Operations

Read-Only (Auto-Execute)

kubectl get pods -n metallb-system
kubectl get pods -n external-dns
kubectl get pods -n karpenter
kubectl get svc -A

Write Operations (Require Approval)

# Apply configurations
kubectl apply -k l1_cluster-platform/metallb/
kubectl apply -k l1_cluster-platform/external-dns/
kubectl apply -k l1_cluster-platform/karpenter/

# Force sync
kubectl rollout restart deployment -n metallb-system

Memory Files

  • meta/memory/current-state.md - Deployed components
  • meta/memory/component-ownership.md - L1 responsibilities

Reference Documentation

  • reference/metallb-config.md - MetalLB configuration guide
  • reference/karpenter-scaling.md - Karpenter scaling patterns

Validation

Run scripts/test-loadbalancer.sh to validate L1 integration.

# Supported AI Coding Agents

This skill is compatible with the SKILL.md standard and works with all major AI coding agents:

Learn more about the SKILL.md standard and how to use these skills with your preferred AI coding agent.