Implements apps/v1 Deployment YAML manifests with rolling update strategies, replica scaling, and rollback procedures for stateless application workloads.
Scanned 9/4/2026
Install to Claude Code
npx -y skills add paulpas/agent-skill-router --skill kubernetes-deployment --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Kubernetes Deployment?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/paulpas-kubernetes-deployment-agent-skill-router)More formats (shields.io, HTML) on the badges page.
---
name: kubernetes-deployment
description: Implements apps/v1 Deployment YAML manifests with rolling update strategies, replica scaling, and rollback procedures for stateless application workloads.
license: MIT
compatibility: opencode
metadata:
version: "1.0.0"
domain: cncf
triggers: rolling update, replica count, deployment strategy, rollback, apps/v1, deployment rollout, kubernetes deployment
archetypes:
- tactical
- generation
anti_triggers:
- stateful persistence
- stable network identity
- ordered pod lifecycle
response_profile:
verbosity: low
directive_strength: high
abstraction_level: operational
role: implementation
scope: implementation
output-format: code
content-types: [code, guidance, config, do-dont]
related-skills: cncf/kubernetes-deployment, cncf/kubernetes-services-management, cncf/kubernetes-configmap
---
# Kubernetes Deployment Manager
Implements apps/v1 Deployment YAML manifests for stateless application workloads with rolling update strategies, replica management, and controlled rollback procedures. When loaded, the model generates production-grade Deployment resources with proper strategy configuration, health probes, and rollout monitoring.
## TL;DR Checklist
- [ ] Use `apps/v1` API version — never `extensions/v1beta1` or `apps/v1beta1`
- [ ] Set `strategy.type: RollingUpdate` with explicit `maxSurge` and `maxUnavailable`
- [ ] Define `minReadySeconds` to prevent premature rollout of next batch
- [ ] Include `livenessProbe` and `readinessProbe` with appropriate initial delays
- [ ] Never use `strategy.type: Recreate` for zero-downtime deployments
- [ ] Verify rollout status with `kubectl rollout status` before proceeding
---
## When to Use
Use this skill when:
- Creating a Deployment manifest for a stateless application (web servers, API services, worker processes)
- Configuring rolling update parameters to control rollout speed and safety
- Implementing rollback procedures for failed deployments
- Scaling replica count for horizontal capacity adjustments
- Managing deployment strategy for blue-green or canary deployment patterns
---
## When NOT to Use
Avoid this skill for:
- Stateful applications requiring stable network IDs — use `kubernetes-statefulset` instead
- Pods needing guaranteed ordering during creation/deletion — use `kubernetes-statefulset` instead
- Persistent storage per replica — use `kubernetes-persistentvolume` with StatefulSet
- Single-instance workloads that should never run in parallel — consider a Job instead
---
## Core Workflow
1. **Determine Deployment Requirements** — Identify replica count, container image, ports, and resource limits. **Checkpoint:** Verify the application is stateless (no local disk writes, no sticky sessions) — if not, StatefulSet is required.
2. **Define Pod Template Spec** — Create the `spec.template.spec` with containers, ports, environment variables, volume mounts, and security context. **Checkpoint:** Every container must have a `livenessProbe` and `readinessProbe` configured.
3. **Configure Rolling Update Strategy** — Set `strategy.type: RollingUpdate` with `rollingUpdate.maxSurge` and `rollingUpdate.maxUnavailable`. **Checkpoint:** `maxSurge` and `maxUnavailable` must sum to no more than 50% of replicas for safe scaling, unless explicitly tolerating temporary excess.
4. **Set Replicas and Selector** — Define `spec.replicas` and a `spec.selector.matchLabels` that matches the pod template labels. **Checkpoint:** Selector labels must exactly match `spec.template.metadata.labels` — mismatched selectors cause deployment rejection.
5. **Create and Validate Manifest** — Apply the manifest with `kubectl apply -f deployment.yaml --dry-run=client` then `kubectl apply -f deployment.yaml`. **Checkpoint:** Run `kubectl rollout status deploy/<name>` and verify all pods reach Ready state.
6. **Plan Rollback Path** — Keep the previous revision history available. Use `kubectl rollout undo deploy/<name>` if the new version shows errors. **Checkpoint:** Monitor pod logs and metrics during the first 60 seconds after each rollout.
---
## Implementation Patterns
### Pattern 1: Production-Grade Deployment Manifest
A complete Deployment with rolling update strategy, health probes, resource limits, and proper labeling for service discovery.
```yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-frontend
namespace: production
labels:
app: web-frontend
tier: frontend
version: v2.1.0
spec:
replicas: 3
revisionHistoryLimit: 5
selector:
matchLabels:
app: web-frontend
tier: frontend
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1
maxUnavailable: 0
minReadySeconds: 30
template:
metadata:
labels:
app: web-frontend
tier: frontend
version: v2.1.0
spec:
terminationGracePeriodSeconds: 30
securityContext:
runAsNonRoot: true
runAsUser: 1000
fsGroup: 1000
containers:
- name: web-frontend
image: registry.example.com/web-frontend:2.1.0
ports:
- containerPort: 8080
protocol: TCP
name: http
env:
- name: APP_ENV
value: production
- name: LOG_LEVEL
valueFrom:
configMapKeyRef:
name: app-config
key: log-level
resources:
requests:
cpu: 250m
memory: 256Mi
limits:
cpu: 500m
memory: 512Mi
livenessProbe:
httpGet:
path: /healthz
port: 8080
initialDelaySeconds: 15
periodSeconds: 10
timeoutSeconds: 3
failureThreshold: 3
readinessProbe:
httpGet:
path: /ready
port: 8080
initialDelaySeconds: 5
periodSeconds: 5
timeoutSeconds: 2
failureThreshold: 3
volumeMounts:
- name: config-volume
mountPath: /etc/app/config
readOnly: true
volumes:
- name: config-volume
configMap:
name: app-config
```
### Pattern 2: Rolling Update Strategy Configuration (BAD vs GOOD)
Configuring the rolling update strategy incorrectly can cause service downtime or excessive resource usage.
```yaml
# ❌ BAD — default strategy causes unpredictable rollout behavior
# maxSurge and maxUnavailable are unset, using defaults (25%/25%) which
# may take down too many pods or spin up too many simultaneously.
strategy:
type: RollingUpdate
# ❌ BAD — Recreate strategy causes full downtime on every deployment
strategy:
type: Recreate
# ✅ GOOD — explicit RollingUpdate with conservative safety parameters
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1 # Only add 1 extra pod during rollout
maxUnavailable: 0 # Never reduce below desired replica count
minReadySeconds: 30 # Wait 30s after pod becomes ready before proceeding
# ✅ GOOD — aggressive strategy for development environments with low risk
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 2
maxUnavailable: 1
minReadySeconds: 5
```
### Pattern 3: Deployment Rollback Procedure
Programmatic rollback logic using kubectl commands and manifest versioning.
```yaml
# Rollback to previous revision
# kubectl rollout undo deployment/web-frontend -n production
# Rollback to a specific revision (if history is preserved)
# kubectl rollout undo deployment/web-frontend -n production --to-revision=2
# View rollout history
# kubectl rollout history deployment/web-frontend -n production
# View details of a specific revision
# kubectl rollout history deployment/web-frontend -n production --revision=3
# View rollout status after apply or undo
# kubectl rollout status deployment/web-frontend -n production --timeout=120s
# Pause and resume rollouts for manual approval gates
# kubectl rollout pause deployment/web-frontend -n production
# kubectl rollout resume deployment/web-frontend -n production
```
```python
def check_deployment_healthy(name: str, namespace: str, timeout_seconds: int = 120) -> bool:
"""Check if a Deployment rollout completed successfully.
Uses kubectl rollout status to verify all pods are Ready.
Returns True if healthy, False if timeout or failure detected.
Args:
name: Deployment name.
namespace: Kubernetes namespace.
timeout_seconds: Maximum time to wait for rollout.
Returns:
True if rollout completed successfully, False otherwise.
"""
import subprocess
try:
result = subprocess.run(
["kubectl", "rollout", "status", f"deploy/{name}",
"-n", namespace, f"--timeout={timeout_seconds}s"],
capture_output=True, text=True, timeout=timeout_seconds + 10
)
return result.returncode == 0 and "successfully rolled out" in result.stdout
except subprocess.TimeoutExpired:
return False
except FileNotFoundError:
return False
```
---
## Constraints
### MUST DO
- Always use `apps/v1` API version — never `extensions/v1beta1` or `apps/v1beta1` (both are removed in Kubernetes 1.16+)
- Set explicit `strategy.type: RollingUpdate` with concrete `maxSurge` and `maxUnavailable` values
- Define both `livenessProbe` and `readinessProbe` on every container — never rely on defaults
- Use `resources.requests` and `resources.limits` on every container for proper scheduling and QoS
- Include `terminationGracePeriodSeconds` (≥ 30s for graceful shutdown) in the pod spec
- Match `spec.selector.matchLabels` exactly to `spec.template.metadata.labels`
- Set `revisionHistoryLimit: 5` to preserve rollout history for rollbacks
- Use `minReadySeconds` (≥ 15s) to ensure pods are truly ready before the next batch starts
### MUST NOT DO
- Never use `strategy.type: Recreate` for production stateless workloads — it causes full downtime
- Never omit `livenessProbe` or `readinessProbe` — the node cannot detect unhealthy pods otherwise
- Never set `maxUnavailable` to the total replica count — this allows complete outage during rollout
- Never use `latest` tag in production images — always pin to a specific image digest or semver tag
- Never set `terminationGracePeriodSeconds: 0` — in-flight requests will be dropped on pod deletion
- Never match selector labels to pods outside this Deployment — it can cause unexpected pod management
---
## Output Template
When implementing a Kubernetes Deployment, produce the following:
1. **Deployment YAML** — Complete `apps/v1` Deployment manifest with `metadata`, `spec.replicas`, `spec.strategy`, `spec.selector`, and `spec.template` fully defined.
2. **Strategy Rationale** — Brief explanation of chosen `maxSurge`, `maxUnavailable`, and `minReadySeconds` values relative to the replica count.
3. **Probe Configuration** — Document the health check endpoints, intervals, and thresholds for liveness and readiness probes.
4. **Rollback Plan** — Command sequence for undoing the deployment if issues arise, including the revision number to target.
---
## Related Skills
| Skill | Purpose |
|---|---|
| `kubernetes-services-management` | Expose the Deployment via ClusterIP, NodePort, or LoadBalancer service |
| `kubernetes-ingress` | Route external HTTP/HTTPS traffic to the Deployment's service |
| `kubernetes-configmap` | Inject configuration data into the Deployment via env vars or volume mounts |
| `kubernetes-statefulset` | Deploy stateful applications that need stable network identities and persistent storage |
---
## Live References
> Authoritative documentation links for this skill's domain. The model follows markdown links at load time to resolve external references and inline content.
- [Kubernetes Deployments Documentation](https://kubernetes.io/docs/concepts/workloads/controllers/deployment/) — Official guide to Deployment concepts, strategies, and lifecycle
- [Rolling Updates and Rollbacks](https://kubernetes.io/docs/concepts/workloads/controllers/deployment/#rolling-update-deployment) — How rolling updates work and rollback procedures
- [Deployment Strategy Types](https://kubernetes.io/docs/concepts/workloads/controllers/deployment/#strategy) — RollingUpdate vs Recreate strategy configuration
- [Probes Documentation](https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes) — Liveness, readiness, and startup probe configuration
- [Pod Security Context](https://kubernetes.io/docs/tasks/configure-pod-container/security-context/) — Security context settings for containers and pods
- [Kubernetes API Reference — apps/v1 Deployment](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#deployment-v1-apps) — Complete API schema for Deployment resources
- [Resource Management for Pods and Containers](https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/) — CPU and memory requests/limits configuration
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!