Loading source
Pulling the file list, source metadata, and syntax-aware rendering for this listing.
Source from repo
Assess and migrate workloads from AWS, GCP, or other clouds to Azure services.
Files
Skill
Size
Entrypoint
Format
Open file
Syntax-highlighted preview of this file as included in the skill package.
references/services/container-apps/assessment-guide.md
1# Kubernetes to Azure Container Apps - Assessment Guide23## Compatibility Matrix45### Kubernetes → Container Apps Resource Mapping67| Kubernetes Concept | Container Apps Equivalent | Supported | Notes |8|-------------------|--------------------------|-----------|-------|9| Deployment | Container App | ✅ Yes | One-to-one mapping for stateless workloads |10| Service (ClusterIP) | Internal ingress | ✅ Yes | Set `ingress.external: false` |11| Service (LoadBalancer) | External ingress | ✅ Yes | Set `ingress.external: true` |12| Ingress | Built-in ingress with custom domain | ✅ Yes | Supports TLS, traffic splitting |13| ConfigMap | Environment variables | ✅ Yes | Inline or from secrets |14| Secret | Secrets (Key Vault refs preferred) | ✅ Yes | Use managed identity for Key Vault |15| CronJob | Container Apps Job (scheduled) | ✅ Yes | Cron expression syntax |16| Job | Container Apps Job (manual/event) | ✅ Yes | One-time or event-triggered |17| HPA | Built-in scaling rules | ✅ Yes | HTTP, TCP, KEDA-compatible scalers |18| PersistentVolumeClaim | Azure Files mount | ⚠️ Limited | EmptyDir and Azure Files only; no block storage |19| DaemonSet | N/A | ❌ No | Consider sidecar containers or external agents |20| StatefulSet | N/A | ❌ No | Use external state (Cosmos DB, Redis, SQL) |21| Custom CRDs / Operators | N/A | ❌ No | Evaluate if Dapr components can replace |22| NetworkPolicy | VNet NSG rules | ⚠️ Limited | Configure at Environment subnet level |2324### Resource Limits2526| Resource | Kubernetes (typical) | Container Apps Maximum | Migration Impact |27|----------|---------------------|----------------------|------------------|28| CPU per container | Up to 64+ vCPU | 4 vCPU | Split large containers |29| Memory per container | Up to 256+ GiB | 8 GiB | Redesign memory-intensive workloads |30| Replicas per app | 1000+ | 300 per revision | Validate scale requirements |31| Request timeout | Configurable (hours+) | 240 seconds default | Redesign long-running requests |32| Startup probe timeout | Configurable | 240 seconds | Optimize startup time |33| Containers per pod/app | 10+ | Up to 10 sidecars | Init + sidecar containers supported |3435## Unsupported Patterns3637### Critical Blockers38391. **StatefulSets with persistent storage**40- **Why**: Container Apps is designed for stateless workloads41- **Alternative**: Migrate state to Azure Cosmos DB, Azure SQL, Redis, or Storage42432. **DaemonSets for node-level agents**44- **Why**: No node-level access in managed environment45- **Alternative**: Use Azure Monitor agents, Dapr components, or sidecar containers46473. **Privileged containers or host networking**48- **Why**: Security isolation in managed platform49- **Alternative**: Redesign to avoid host-level access50514. **Custom CRDs and Operators**52- **Why**: No Kubernetes API server access53- **Alternative**: Use Dapr state management, bindings, or Azure PaaS services54555. **Direct Kubernetes API calls from apps**56- **Why**: Kubernetes API not exposed57- **Alternative**: Use environment variables, service discovery via DNS, or Dapr5859### Storage Considerations6061- **EmptyDir**: Supported (ephemeral storage)62- **Azure Files**: Supported via volume mounts63- **Persistent Block Storage**: Not supported (migrate to Azure Blob, SQL, Cosmos DB)6465## Assessment Checklist6667### 1. Workload Inventory6869- List all Deployments, StatefulSets, DaemonSets in target namespaces70- Identify workload types: API, background worker, CronJob, StatefulSet71- Document current resource requests/limits (CPU, memory)72- Note replica counts (min, max, typical)7374### 2. Network Configuration7576- **Service Types**: ClusterIP (internal) vs LoadBalancer (external)77- **Ingress**: Document hostnames, TLS certificates, path routing rules78- **Service Mesh**: Document if using Istio, Linkerd (consider migrating to Dapr)79- **NetworkPolicies**: List egress/ingress rules (map to NSG rules or VNet integration)8081### 3. Storage and State8283- **PersistentVolumeClaims**: List volumes, sizes, access modes (ReadWriteOnce, ReadWriteMany)84- **StatefulSets**: Document state storage patterns (candidates for external state migration)85- **EmptyDir/Temp Storage**: Note usage patterns (supported in Container Apps)86- **ConfigMaps/Secrets**: Count and categorize (migrate inline or to Key Vault)8788### 4. Scaling and Performance8990- **HPA**: Document scaling metrics (CPU, memory, custom metrics)91- **Min/Max Replicas**: Verify within Container Apps limits (0-300)92- **Startup Time**: Measure pod startup latency (must be <240s)93- **Request Patterns**: Long-running requests (>240s) need redesign9495### 5. Dependencies9697- **Internal Services**: List service-to-service calls (use internal DNS in Container Apps)98- **External Services**: Databases, APIs, message queues, storage99- **Authentication**: Service accounts, RBAC roles (map to managed identities)100- **Observability**: Logging, metrics, tracing (migrate to Azure Monitor, App Insights)101102### 6. CI/CD and Deployment103104- **Pipeline Tools**: kubectl, Helm, Kustomize, ArgoCD, Flux105- **Image Registries**: Docker Hub, GCR, ECR, private registries (migrate to ACR)106- **Deployment Strategy**: Rolling update, blue/green, canary (Container Apps supports traffic splitting)107108## Complexity Assessment Guidelines109110### Low Complexity111- Stateless Deployments with ClusterIP or LoadBalancer Services112- Simple environment variables (no complex ConfigMaps)113- No persistent storage or external state already in use114- Standard HTTP/gRPC ingress115- No service mesh dependencies116117### Medium Complexity118- Multiple Deployments with inter-service communication119- ConfigMaps and Secrets requiring Key Vault migration120- HPA with custom metrics (need KEDA scaler mapping)121- CronJobs (map to Container Apps Jobs)122- Ingress with TLS and custom domains123124### High Complexity125- StatefulSets requiring state migration to external services126- Service mesh (Istio/Linkerd) requiring Dapr migration127- Custom CRDs or Operators (need redesign)128- NetworkPolicies requiring VNet/NSG configuration129- Large-scale deployments (>100 replicas, need architecture review)130- Workloads exceeding Container Apps resource limits (>4 vCPU, >8 GiB)131132## Assessment Report Structure133134Generate `k8s-migration-assessment.md` with:1351361. **Executive Summary**: Cluster name, namespace(s), workload count, complexity (Low/Medium/High), estimated timeline, Azure cost1372. **Current State**: Deployment inventory, resource usage, scaling config, storage usage, networking topology1383. **Compatibility Analysis**: Supported workloads, blockers, redesign requirements (StatefulSets, DaemonSets, CRDs)1394. **Azure Target**: Required resources (resource group, Container Apps Environment, ACR, Key Vault, Log Analytics, VNet if needed)1405. **Migration Plan**:141- State migration strategy (databases, caches, storage)142- Image migration approach (ACR import, rebuild)143- IaC generation plan (Bicep templates per Deployment)144- Deployment sequence (dependencies first, then consumers)1456. **Risk Assessment**: Blockers, feature gaps, performance considerations, downtime estimate1467. **Validation Tests**: Smoke tests, integration tests, performance benchmarks147