Search icon CANCEL
Subscription
0
Cart icon
Your Cart (0 item)
Close icon
You have no products in your basket yet
Arrow left icon
Explore Products
Best Sellers
New Releases
Books
Videos
Audiobooks
Learning Hub
Free Learning
Arrow right icon
Arrow up icon
GO TO TOP
Running Windows Containers on AWS

You're reading from   Running Windows Containers on AWS A complete guide to successfully running Windows containers on Amazon ECS, EKS, and AWS Fargate

Arrow left icon
Product type Paperback
Published in Apr 2023
Publisher Packt
ISBN-13 9781804614136
Length 212 pages
Edition 1st Edition
Tools
Arrow right icon
Author (1):
Arrow left icon
Marcio Morales Marcio Morales
Author Profile Icon Marcio Morales
Marcio Morales
Arrow right icon
View More author details
Toc

Table of Contents (22) Chapters Close

Preface 1. Part 1: Why Windows Containers on Amazon Web Services (AWS)?
2. Chapter 1: Windows Container 101 FREE CHAPTER 3. Chapter 2: Amazon Web Services – Breadth and Depth 4. Part 2: Windows Containers on Amazon Elastic Container Service (ECS)
5. Chapter 3: Amazon ECS – Overview 6. Chapter 4: Deploying a Windows Container Instance 7. Chapter 5: Deploying an EC2 Windows-Based Task 8. Chapter 6: Deploying a Fargate Windows-Based Task 9. Part 3: Windows Containers on Amazon Elastic Kubernetes Service (EKS)
10. Chapter 7: Amazon EKS – Overview 11. Chapter 8: Preparing the Cluster for OS Interoperability 12. Chapter 9: Deploying a Windows Node Group 13. Chapter 10: Managing a Windows Pod 14. Part 4: Operationalizing Windows Containers on AWS
15. Chapter 11: Monitoring and Logging 16. Chapter 12: Managing a Windows Container's Image Life Cycle 17. Chapter 13: Working with Ephemeral Hosts 18. Chapter 14: Implementing a Container Image Cache Strategy 19. Chapter 15: AWS Windows Containers Deployment Tools 20. Index 21. Other Books You May Enjoy

How does Windows Server expose container primitives?

Containers are kernel primitives responsible for containerization, such as control groups, namespaces, union filesystems, and other OS functionalities. These work together to create process isolation provided through namespace isolation and control groups, which govern the resources of a collection of processes within a namespace.

Namespaces isolate named objects from unauthorized access. A named object provides processes to share object handles. In simple words, when a process needs to share handles, it creates a named event or mutex in the kernel; other processes can use this object name to call functions inside the process, then an object namespace creates the boundary that defines what process or container process can call the named objects.

Control groups or cgroups are a Linux kernel feature that limits and isolates how much CPU, memory, disk I/O, and network a collection of the process can consume. The collection process is the one running in the container:

Figure 1.1 – How a container runtime interacts with the Linux kernel

Figure 1.1 – How a container runtime interacts with the Linux kernel

However, when it relates to the Windows OS, this is an entirely different story; there is no cgroup, pid, net, ipc, mnt, or vfs. Instead, in the Windows world, we call them job objects (the equivalent of cgroups), object namespaces, the registry, and so on. Back in the days when Microsoft planned how they would effectively expose these low-level Windows kernel APIs so that the container runtime could easily consume them, Microsoft decided to create a new management service called the Host Compute Service (HCS). The HCS provides an abstraction to the Windows kernel APIs, making a Windows container a single API call from the container runtime to the kernel:

Figure 1.2 – How a container runtime interacts with the Windows kernel

Figure 1.2 – How a container runtime interacts with the Windows kernel

Working directly with the HCS may be difficult as it exposes a C API. To make it easier for container runtime and orchestrator developers to consume the HCS from higher-level languages such as Go and C#, Microsoft released two wrappers:

  • hcsshim is a Golang interface to launch and manage Windows containers using the HCS
  • dotnet-computevirtualization is a C# class library to launch and manage Windows containers using the HCS

Now that you understand how Windows Server exposes container primitives and how container runtimes such as Docker Engine and containerd interact with the Windows kernel, let’s delve into how Windows Server implements resource controls at the kernel level for Windows containers.

You have been reading a chapter from
Running Windows Containers on AWS
Published in: Apr 2023
Publisher: Packt
ISBN-13: 9781804614136
Register for a free Packt account to unlock a world of extra content!
A free Packt account unlocks extra newsletters, articles, discounted offers, and much more. Start advancing your knowledge today.
Unlock this book and the full library FREE for 7 days
Get unlimited access to 7000+ expert-authored eBooks and videos courses covering every tech area you can think of
Renews at $19.99/month. Cancel anytime
Banner background image