| description | Use when generating Kubernetes deployment manifests and services. Trigger with phrases like "create kubernetes deployment", "generate k8s manifest", "deploy app to kubernetes", or "create service and ingress". Produces production-ready YAML with health checks, auto-scaling, resource limits, ingress configuration, and TLS termination. |
| allowed-tools | ["Read","Write","Edit","Grep","Glob","Bash(kubectl:*)"] |
| name | creating-kubernetes-deployments |
| license | MIT |
| version | 1.0.0 |
Prerequisites
Before using this skill, ensure:
- Kubernetes cluster is accessible and kubectl is configured
- Container image is built and pushed to registry
- Understanding of application resource requirements
- Namespace exists or will be created
- Ingress controller is installed (if using ingress)
- TLS certificates are available (if using HTTPS)
Instructions
- Gather Requirements: Application name, image, replicas, ports, environment
- Create Deployment: Generate YAML with container spec and resource limits
- Add Health Checks: Configure liveness and readiness probes
- Define Service: Create ClusterIP, NodePort, or LoadBalancer service
- Configure Ingress: Set up routing rules and TLS termination
- Add ConfigMaps/Secrets: Externalize configuration and sensitive data
- Enable Auto-scaling: Create HorizontalPodAutoscaler if needed
- Apply Manifests: Use kubectl apply to deploy resources
Output
Deployment Manifest:
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-web-app
namespace: production
spec:
replicas: 3
selector:
matchLabels:
app: my-web-app
template:
metadata:
labels:
app: my-web-app
spec:
containers:
- name: app
image: registry/my-web-app:v1.0.0
ports:
- containerPort: 80
resources:
requests:
cpu: 100m
memory: 128Mi
limits:
cpu: 500m
memory: 512Mi
livenessProbe:
httpGet:
path: /health
port: 80
initialDelaySeconds: 30
periodSeconds: 10
Service and Ingress:
apiVersion: v1
kind: Service
metadata:
name: my-web-app
namespace: production
spec:
type: ClusterIP
selector:
app: my-web-app
ports:
- port: 80
targetPort: 80
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-web-app
namespace: production
spec:
tls:
- hosts:
- app.example.com
secretName: tls-cert
rules:
- host: app.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: my-web-app
port:
Error Handling
Image Pull Error
- Error: "ErrImagePull" or "ImagePullBackOff"
- Solution: Verify image name, tag, and registry credentials in imagePullSecrets
CrashLoopBackOff
- Error: Pod repeatedly crashes and restarts
- Solution: Check application logs with
kubectl logs and review container health
Resource Quota Exceeded
- Error: "forbidden: exceeded quota"
- Solution: Reduce resource requests or increase namespace quota
Ingress Not Working
- Error: 404 or 503 on ingress domain
- Solution: Verify ingress controller is running and service endpoints are ready
TLS Certificate Error
- Error: "certificate signed by unknown authority"
- Solution: Create or update TLS secret with valid certificate
Resources