A cloud infrastructure diagram shows a secured Linux database linked to servers, storage, and balanced resources.
AWS has published a walkthrough for running SQL Server 2022 in Linux containers on Amazon EKS. Its pitch is lower licensing cost and simpler operations. The deployment recipe is concrete. The savings claims need careful reading, and the licensing details decide whether the idea works for you.

A cloud infrastructure diagram shows a secured Linux database linked to servers, storage, and balanced resources. The licensing argument, and its fine print​

AWS says a SQL Server host on Windows carries two license layers: the Windows Server OS license and the SQL Server license. Its answer is to run SQL Server on Linux container hosts. That removes the Windows Server license and lets you license only the virtual cores given to each container.

The post's worked example is a 16-core host running one container with 4 virtual cores. Per-core licensing of an individual virtual OSE is available only with subscription licenses or active Software Assurance, and it requires licenses equal to the virtual cores, with a four-license minimum per virtual OSE. A container counts as a virtual OSE, and the cores available to it count as virtual cores. In that example, you license 4 cores instead of 16. That is a 75% cut in the number of core licenses for that one workload.

That is not a 75% cut in your SQL Server bill. AWS itself says actual savings depend on existing agreements, core counts and SA status.

Where the math can mislead​

  • SA or subscription gate. Individual virtual OSE per-core licensing is available only with subscription rights or active SA. Without one of those, the 4-for-16 example does not apply.
  • The four-core floor. Many small containers can erase the benefit. One licensing-vendor example describes a worker VM with eight virtual cores running six two-core Standard containers. Licensed one by one, that needs 24 core licenses, because each container carries the four-core minimum. That is a third-party illustration, not Microsoft's wording. It still shows why density matters.
  • Hyper-threading. Microsoft's product terms say that if a virtual core maps to more than one hardware thread, you need a license for each thread. For containers, the cores available to the container are treated as hardware threads, so check your host configuration.
  • The 40–60% combined figure. This is AWS's own estimate. The post says it rests on "typical enterprise deployment patterns." It publishes no cost model, no EC2, EBS or EKS pricing and no customer case study. Treat it as a hypothesis to test against your own invoices.
  • Linux does not make licensing disappear. Microsoft's Learn documentation says SQL Server is licensed the same on Linux and Windows. You still pay for SQL Server, plus EKS, EC2, EBS, networking and the skills to run Kubernetes.

High-density alternatives​

AWS also points to two other licensing paths, and Microsoft's product terms back both up:

  • Enterprise Core with SA. License the physical cores and run an unlimited number of containers on that server.
  • Standard or Enterprise Core with SA by virtual OSE. License the virtual cores of a VM, then run any number of containers inside it. Under this benefit, a container is not considered a separate virtual OSE.

These rights differ from the single-container model. You can't mix assumptions between them.

What AWS actually deploys​

The pattern is a Helm chart that installs a single SQL Server pod on EKS worker nodes.

ComponentRole in the design
StatefulSetStable pod identity and ordered startup
Three PVCs on EBS gp3Separate volumes for data, log and backup paths
StorageClassEncryption on, Retain reclaim policy, WaitForFirstConsumer binding
Secrets Manager + Secrets Store CSI + IRSAThe SA password is mounted as a file, with scoped IAM access
AWS Load Balancer ControllerProvisions a Network Load Balancer on TCP 1433
NetworkPolicyAllows ingress only from namespaces labeled access-mssql=true
PodDisruptionBudgetLimits voluntary disruptions
ConfigMap (mssql.conf)Runtime settings

The sample mssql.conf enables SQL Agent and caps memory at 3072 MB. It forces encryption, restricts TLS to 1.2, turns off customer feedback and sets trace flags 3226 and 8002. These are examples, not universal recommendations. Validate memory sizing, trace flags and certificate handling for your own workload.

Walkthrough outline​

  1. Launch an Amazon Linux 2023 EC2 workstation and install the AWS CLI, kubectl, eksctl and Helm v3.
  2. Configure AWS credentials, or use an instance profile.
  3. Clone the solution repository. The post's clone command shows only a placeholder, so you need to find the real repo address.
  4. Edit cluster.yaml. The example uses us-east-1, two managed nodes (r7i.4xlarge and r6i.4xlarge) and the cluster name sqleksclu. Create it with eksctl.
  5. Attach AmazonEBSCSIDriverPolicy to the node group role.
  6. Run aws-setup.sh. It associates OIDC, installs the EBS CSI and Secrets Store CSI drivers, creates the secret and a scoped policy, sets up the mssql namespace with the mssql-sa service account, and installs the Load Balancer Controller.
  7. Install the chart with 4 CPU requested and limited. Use storage.create=true on the first deployment only.
  8. Verify with kubectl get pods, describe, logs and get svc. Then connect with sqlcmd from inside the pod or through the NLB endpoint.

Gaps to close before production​

Single pod is not high availability. The example deploys one pod, mssql-mssql-0. The post shows no failover, backup restore or disaster recovery. A PodDisruptionBudget and persistent volumes are not database HA, and they are not a backup strategy. Microsoft's container documentation also warns that backups must be stored outside the container.

CU level matters for resource limits. Microsoft says SQL Server honors cgroup v2 constraints starting with SQL Server 2025 and SQL Server 2022 CU20. Earlier versions could hit out-of-memory errors on Kubernetes because container memory limits were not enforced. AWS names SQL Server 2022 but no CU, so check your image tag.

CPU limits and scheduling. Microsoft notes that with cgroup v2, the error log may still report the host's total CPU count. To align schedulers and parallelism with the quota, it recommends setting processor affinity and enabling trace flag 8002. The AWS config already includes 8002, but the affinity step is separate.

Platform support. Microsoft lists SQL Server 2022 containers as supported on Kubernetes. It also says container images are supported only on Linux hosts with Intel or AMD x86-64 CPUs. Emulation environments such as QEMU are not tested or supported. Graviton-based nodes are therefore a bad fit.

Network claims need testing. The post says pods stay in private subnets, with access through PrivateLink or VPN. Verify NetworkPolicy enforcement and actual reachability in your cluster.

Cleanup can leave charges. The Retain policy means deleting the Helm release, namespace and cluster can leave EBS volumes behind. Delete them manually once you no longer need the data.

Bottom line​

This is a solid reference architecture for teams that already hold SA or subscription licenses and want to consolidate SQL Server onto Kubernetes. It is AWS's design, not a Microsoft endorsement. The headline savings are not independently demonstrated. Before you migrate, do three things:

  • Model your actual licensing position, including SA status, thread mapping and the four-core floor per container.
  • Confirm your SQL Server CU level.
  • Plan real HA and restore testing.

If the numbers hold, the Windows license removal and right-sized cores are real levers. If they don't, you have swapped a license bill for a Kubernetes learning curve.

 

References

  1. Containerize SQL Server on AWS to reduce licensing costs and simplify operations Amazon Web Services (AWS) 2026-11-05T14:22:41+00:00
  2. Configure and Customize SQL Server Docker Containers - SQL Server | Microsoft Learn learn.microsoft.com
  3. Installation Guidance for SQL Server on Linux - SQL Server | Microsoft Learn learn.microsoft.com