| 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
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
-
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.
-
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.
-
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.
-
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.
-
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.
-
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.
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.
strategy:
type: RollingUpdate
strategy:
type: Recreate
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1
maxUnavailable: 0
minReadySeconds: 30
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 2
maxUnavailable: 1
minReadySeconds: 5
Pattern 3: Deployment Rollback Procedure
Programmatic rollback logic using kubectl commands and manifest versioning.
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:
- Deployment YAML — Complete
apps/v1 Deployment manifest with metadata, spec.replicas, spec.strategy, spec.selector, and spec.template fully defined.
- Strategy Rationale — Brief explanation of chosen
maxSurge, maxUnavailable, and minReadySeconds values relative to the replica count.
- Probe Configuration — Document the health check endpoints, intervals, and thresholds for liveness and readiness probes.
- 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.