From dfea2cb446cb0d824882070f65407d7c2aab4f87 Mon Sep 17 00:00:00 2001 From: Meenakshi Kaushik Date: Mon, 30 Mar 2020 11:51:37 -0700 Subject: [PATCH] Add topology manager blog --- .../2020-03-30-topology-manager-beta.md | 503 ++++++++++++++++++ .../align-up.png | Bin 0 -> 4763 bytes .../example-numa-system.png | Bin 0 -> 16077 bytes .../numa-hint-provider1.png | Bin 0 -> 20114 bytes .../numa-hint-provider2.png | Bin 0 -> 20704 bytes .../numa-steps-during-loop.png | Bin 0 -> 13612 bytes 6 files changed, 503 insertions(+) create mode 100644 content/en/blog/_posts/2020-03-30-topology-manager-beta.md create mode 100755 static/images/blog/2020-03-25-kubernetes-1.18-release-announcement/align-up.png create mode 100644 static/images/blog/2020-03-25-kubernetes-1.18-release-announcement/example-numa-system.png create mode 100755 static/images/blog/2020-03-25-kubernetes-1.18-release-announcement/numa-hint-provider1.png create mode 100755 static/images/blog/2020-03-25-kubernetes-1.18-release-announcement/numa-hint-provider2.png create mode 100755 static/images/blog/2020-03-25-kubernetes-1.18-release-announcement/numa-steps-during-loop.png diff --git a/content/en/blog/_posts/2020-03-30-topology-manager-beta.md b/content/en/blog/_posts/2020-03-30-topology-manager-beta.md new file mode 100644 index 0000000000..85c5cd81d5 --- /dev/null +++ b/content/en/blog/_posts/2020-03-30-topology-manager-beta.md @@ -0,0 +1,503 @@ +--- +layout: blog +title: "Kubernetes Topology Manager Moves to Beta - Align Up!" +date: 2020-04-01 +slug: kubernetes-1-18-feature-topoloy-manager-beta +--- + +**Authors:** Kevin Klues (NVIDIA), Victor Pickard (Red Hat), Conor Nolan (Intel) + +This blog post describes the **TopologyManager**, a beta feature of Kubernetes in release 1.18. The **TopologyManager** feature enables NUMA alignment of CPUs and peripheral devices (such as SR-IOV VFs and GPUs), allowing your workload to run in an environment optimized for low-latency. + +Prior to the introduction of the **TopologyManager**, the CPU and Device Manager would make resource allocation decisions independent of each other. This could result in undesirable allocations on multi-socket systems, causing degraded performance on latency critical applications. With the introduction of the **TopologyManager**, we now have a way to avoid this. + +This blog post covers: + +1. A brief introduction to NUMA and why it is important +1. The policies available to end-users to ensure NUMA alignment of CPUs and devices +1. The internal details of how the **TopologyManager** works +1. Current limitations of the **TopologyManager** +1. Future directions of the **TopologyManager** + +## So, what is NUMA and why do I care? + +The term NUMA stands for Non-Uniform Memory Access. It is a technology available on multi-cpu systems that allows different CPUs to access different parts of memory at different speeds. Any memory directly connected to a CPU is considered "local" to that CPU and can be accessed very fast. Any memory not directly connected to a CPU is considered "non-local" and will have variable access times depending on how many interconnects must be passed through in order to reach it. On modern systems, the idea of having "local" vs. "non-local" memory can also be extended to peripheral devices such as NICs or GPUs. For high performance, CPUs and devices should be allocated such that they have access to the same local memory. + +All memory on a NUMA system is divided into a set of "NUMA nodes", with each node representing the local memory for a set of CPUs or devices. We talk about an individual CPU as being part of a NUMA node if its local memory is associated with that NUMA node. + +We talk about a peripheral device as being part of a NUMA node based on the shortest number of interconnects that must be passed through in order to reach it. + +For example, in Figure 1, CPUs 0-3 are said to be part of NUMA node 0, whereas CPUs 4-7 are part of NUMA node 1. Likewise GPU 0 and NIC 0 are said to be part of NUMA node 0 because they are attached to Socket 0, whose CPUs are all part of NUMA node 0. The same is true for GPU 1 and NIC 1 on NUMA node 1. + +

+ +

+ + +**Figure 1:** An example system with 2 NUMA nodes, 2 Sockets with 4 CPUs each, 2 GPUs, and 2 NICs. CPUs on Socket 0, GPU 0, and NIC 0 are all part of NUMA node 0. CPUs on Socket 1, GPU 1, and NIC 1 are all part of NUMA node 1. + + +Although the example above shows a 1-1 mapping of NUMA Node to Socket, this is not necessarily true in the general case. There may be multiple sockets on a single NUMA node, or individual CPUs of a single socket may be connected to different NUMA nodes. Moreover, emerging technologies such as Sub-NUMA Clustering ([available on recent intel CPUs](https://software.intel.com/en-us/articles/intel-xeon-processor-scalable-family-technical-overview)) allow single CPUs to be associated with multiple NUMA nodes so long as their memory access times to both nodes are the same (or have a negligible difference). + +The **TopologyManager** has been built to handle all of these scenarios. + +## Align Up! It's a TeaM Effort! + +As previously stated, the **TopologyManager** allows users to align their CPU and peripheral device allocations by NUMA node. There are several policies available for this: + +* **none:** this policy will not attempt to do any alignment of resources. It will act the same as if the **TopologyManager** were not present at all. This is the default policy. +* **best-effort:** with this policy, the **TopologyManager** will attempt to align allocations on NUMA nodes as best it can, but will always allow the pod to start even if some of the allocated resources are not aligned on the same NUMA node. +* **restricted:** this policy is the same as the **best-effort** policy, except it will fail pod admission if allocated resources cannot be aligned properly. Unlike with the **single-numa-node** policy, some allocations may come from multiple NUMA nodes if it is impossible to _ever_ satisfy the allocation request on a single NUMA node (e.g. 2 devices are requested and the only 2 devices on the system are on different NUMA nodes). +* **single-numa-node:** this policy is the most restrictive and will only allow a pod to be admitted if _all_ requested CPUs and devices can be allocated from exactly one NUMA node. + +It is important to note that the selected policy is applied to each container in a pod spec individually, rather than aligning resources across all containers together. + +Moreover, a single policy is applied to _all_ pods on a node via a global **kubelet** flag, rather than allowing users to select different policies on a pod-by-pod basis (or a container-by-container basis). We hope to relax this restriction in the future. + +The **kubelet** flag to set one of these policies can be seen below: + + +``` +--topology-manager-policy= + [none | best-effort | restricted | single-numa-node] +``` + + +Additionally, the **TopologyManager** is protected by a feature gate. This feature gate has been available since Kubernetes 1.16, but has only been enabled by default since 1.18. + +The feature gate can be enabled or disabled as follows (as described in more detail [here](https://kubernetes.io/docs/reference/command-line-tools-reference/feature-gates/)): + + +``` +--feature-gates="...,TopologyManager=" +``` + + +In order to trigger alignment according to the selected policy, a user must request CPUs and peripheral devices in their pod spec, according to a certain set of requirements. + +For peripheral devices, this means requesting devices from the available resources provided by a device plugin (e.g. **intel.com/sriov**, **nvidia.com/gpu**, etc.). This will only work if the device plugin has been extended to integrate properly with the **TopologyManager**. Currently, the only plugins known to have this extension are the [Nvidia GPU device plugin](https://github.com/NVIDIA/k8s-device-plugin/blob/5cb45d52afdf5798a40f8d0de049bce77f689865/nvidia.go#L74), and the [Intel SRIOV network device plugin](https://github.com/intel/sriov-network-device-plugin/blob/30e33f1ce2fc7b45721b6de8c8207e65dbf2d508/pkg/resources/pciNetDevice.go#L80). Details on how to extend a device plugin to integrate with the **TopologyManager** can be found [here](https://kubernetes.io/docs/concepts/extend-kubernetes/compute-storage-net/device-plugins/#device-plugin-integration-with-the-topology-manager). + +For CPUs, this requires that the **CPUManager** has been configured with its **--static** policy enabled and that the pod is running in the Guaranteed QoS class (i.e. all CPU and memory **limits** are equal to their respective CPU and memory **requests**). CPUs must also be requested in whole number values (e.g. **1**, **2**, **1000m**, etc). Details on how to set the **CPUManager** policy can be found [here](https://kubernetes.io/docs/tasks/administer-cluster/cpu-management-policies/#cpu-management-policies). + +For example, assuming the **CPUManager** is running with its **--static** policy enabled and the device plugins for **gpu-vendor.com**, and **nic-vendor.com** have been extended to integrate with the **TopologyManager** properly, the pod spec below is sufficient to trigger the **TopologyManager** to run its selected policy: + +``` +spec: + containers: + - name: numa-aligned-container + image: alpine + resources: + limits: + cpu: 2 + memory: 200Mi + gpu-vendor.com/gpu: 1 + nic-vendor.com/nic: 1 +``` + +Following Figure 1 from the previous section, this would result in one of the following aligned allocations: + +``` +{cpu: {0, 1}, gpu: 0, nic: 0} +{cpu: {0, 2}, gpu: 0, nic: 0} +{cpu: {0, 3}, gpu: 0, nic: 0} +{cpu: {1, 2}, gpu: 0, nic: 0} +{cpu: {1, 3}, gpu: 0, nic: 0} +{cpu: {2, 3}, gpu: 0, nic: 0} + +{cpu: {4, 5}, gpu: 1, nic: 1} +{cpu: {4, 6}, gpu: 1, nic: 1} +{cpu: {4, 7}, gpu: 1, nic: 1} +{cpu: {5, 6}, gpu: 1, nic: 1} +{cpu: {5, 7}, gpu: 1, nic: 1} +{cpu: {6, 7}, gpu: 1, nic: 1} +``` + +And that’s it! Just follow this pattern to have the **TopologyManager** ensure NUMA alignment across containers that request topology-aware devices and exclusive CPUs. + +**NOTE:** if a pod is rejected by one of the **TopologyManager** policies, it will be placed in a **Terminated** state with a pod admission error and a reason of "**TopologyAffinityError**". Once a pod is in this state, the Kubernetes scheduler will not attempt to reschedule it. It is therefore recommended to use a [**Deployment**](https://kubernetes.io/docs/concepts/workloads/controllers/deployment/#creating-a-deployment) with replicas to trigger a redeploy of the pod on such a failure. An [external control loop](https://kubernetes.io/docs/concepts/architecture/controller/) can also be implemented to trigger a redeployment of pods that have a **TopologyAffinityError**. + +## This is great, so how does it work under the hood? + +Pseudocode for the primary logic carried out by the **TopologyManager** can be seen below: + +``` +for container := range append(InitContainers, Containers...) { + for provider := range HintProviders { + hints += provider.GetTopologyHints(container) + } + + bestHint := policy.Merge(hints) + + for provider := range HintProviders { + provider.Allocate(container, bestHint) + } +} +``` + +The following diagram summarizes the steps taken during this loop: + +

+ +

+ +The steps themselves are: + +1. Loop over all containers in a pod. +1. For each container, gather "**TopologyHints**" from a set of "**HintProviders**" for each topology-aware resource type requested by the container (e.g. **gpu-vendor.com/gpu**, **nic-vendor.com/nic**, **cpu**, etc.). +1. Using the selected policy, merge the gathered **TopologyHints** to find the "best" hint that aligns resource allocations across all resource types. +1. Loop back over the set of hint providers, instructing them to allocate the resources they control using the merged hint as a guide. +1. This loop runs at pod admission time and will fail to admit the pod if any of these steps fail or alignment cannot be satisfied according to the selected policy. Any resources allocated before the failure are cleaned up accordingly. + +The following sections go into more detail on the exact structure of **TopologyHints** and **HintProviders**, as well as some details on the merge strategies used by each policy. + +### TopologyHints + +A **TopologyHint** encodes a set of constraints from which a given resource request can be satisfied. At present, the only constraint we consider is NUMA alignment. It is defined as follows: + +``` +type TopologyHint struct { + NUMANodeAffinity bitmask.BitMask + Preferred bool +} +``` + +The **NUMANodeAffinity** field contains a bitmask of NUMA nodes where a resource request can be satisfied. For example, the possible masks on a system with 2 NUMA nodes include: + +``` +{00}, {01}, {10}, {11} +``` + +The **Preferred** field contains a boolean that encodes whether the given hint is "preferred" or not. With the **best-effort** policy, preferred hints will be given preference over non-preferred hints when generating a "best" hint. With the **restricted** and **single-numa-node** policies, non-preferred hints will be rejected. + +In general, **HintProviders** generate **TopologyHints** by looking at the set of currently available resources that can satisfy a resource request. More specifically, they generate one **TopologyHint** for every possible mask of NUMA nodes where that resource request can be satisfied. If a mask cannot satisfy the request, it is omitted. For example, a **HintProvider** might provide the following hints on a system with 2 NUMA nodes when being asked to allocate 2 resources. These hints encode that both resources could either come from a single NUMA node (either 0 or 1), or they could each come from different NUMA nodes (but we prefer for them to come from just one). + +``` +{01: True}, {10: True}, {11: False} +``` + +At present, all **HintProviders** set the **Preferred** field to **True** if and only if the **NUMANodeAffinity** encodes a _minimal_ set of NUMA nodes that can satisfy the resource request. Normally, this will only be **True** for **TopologyHints** with a single NUMA node set in their bitmask. However, it may also be **True** if the only way to _ever_ satisfy the resource request is to span multiple NUMA nodes (e.g. 2 devices are requested and the only 2 devices on the system are on different NUMA nodes): + +``` +{0011: True}, {0111: False}, {1011: False}, {1111: False} +``` + +**NOTE:** Setting of the **Preferred** field in this way is _not_ based on the set of currently available resources. It is based on the ability to physically allocate the number of requested resources on some minimal set of NUMA nodes. + +In this way, it is possible for a **HintProvider** to return a list of hints with _all_ **Preferred** fields set to **False** if an actual preferred allocation cannot be satisfied until other containers release their resources. For example, consider the following scenario from the system in Figure 1: + +1. All but 2 CPUs are currently allocated to containers +1. The 2 remaining CPUs are on different NUMA nodes +1. A new container comes along asking for 2 CPUs + +In this case, the only generated hint would be **{11: False}** and not **{11: True}**. This happens because it _is_ possible to allocate 2 CPUs from the same NUMA node on this system (just not right now, given the current allocation state). The idea being that it is better to fail pod admission and retry the deployment when the minimal alignment can be satisfied than to allow a pod to be scheduled with sub-optimal alignment. + +### HintProviders + +A **HintProvider** is a component internal to the **kubelet** that coordinates aligned resource allocations with the **TopologyManager**. At present, the only **HintProviders** in Kubernetes are the **CPUManager** and the **DeviceManager**. We plan to add support for **HugePages** soon. + +As discussed previously, the **TopologyManager** both gathers **TopologyHints** from **HintProviders** as well as triggers aligned resource allocations on them using a merged "best" hint. As such, **HintProviders** implement the following interface: + +``` +type HintProvider interface { + GetTopologyHints(*v1.Pod, *v1.Container) map[string][]TopologyHint + Allocate(*v1.Pod, *v1.Container) error +} +``` + +Notice that the call to **GetTopologyHints()** returns a **map[string][]TopologyHint**. This allows a single **HintProvider** to provide hints for multiple resource types instead of just one. For example, the **DeviceManager** requires this in order to pass hints back for every resource type registered by its plugins. + +As **HintProviders** generate their hints, they only consider how alignment could be satisfied for _currently_ available resources on the system. Any resources already allocated to other containers are not considered. + +For example, consider the system in Figure 1, with the following two containers requesting resources from it: + + + + + + + + + + +
Container0 + Container1 +
+ +
+spec:
+    containers:
+    - name: numa-aligned-container0
+      image: alpine
+      resources:
+          limits:
+              cpu: 2
+              memory: 200Mi
+              gpu-vendor.com/gpu: 1
+              nic-vendor.com/nic: 1
+
+ +
+ +
+spec:
+    containers:
+    - name: numa-aligned-container1
+      image: alpine
+      resources:
+          limits:
+              cpu: 2
+              memory: 200Mi
+              gpu-vendor.com/gpu: 1
+              nic-vendor.com/nic: 1
+
+ +
+ +If **Container0** is the first container considered for allocation on the system, the following set of hints will be generated for the three topology-aware resource types in the spec. + +``` + cpu: {{01: True}, {10: True}, {11: False}} +gpu-vendor.com/gpu: {{01: True}, {10: True}} +nic-vendor.com/nic: {{01: True}, {10: True}} +``` + +With a resulting aligned allocation of: + +``` +{cpu: {0, 1}, gpu: 0, nic: 0} +``` + +

+ +

+ + +When considering **Container1** these resources are then presumed to be unavailable, and thus only the following set of hints will be generated: + +``` + cpu: {{01: True}, {10: True}, {11: False}} +gpu-vendor.com/gpu: {{10: True}} +nic-vendor.com/nic: {{10: True}} +``` + +With a resulting aligned allocation of: + + +``` +{cpu: {4, 5}, gpu: 1, nic: 1} +``` + +

+ +

+ + +**NOTE:** Unlike the pseudocode provided at the beginning of this section, the call to **Allocate()** does not actually take a parameter for the merged "best" hint directly. Instead, the **TopologyManager** implements the following **Store** interface that **HintProviders** can query to retrieve the hint generated for a particular container once it has been generated: + +``` +type Store interface { + GetAffinity(podUID string, containerName string) TopologyHint +} +``` + +Separating this out into its own API call allows one to access this hint outside of the pod admission loop. This is useful for debugging as well as for reporting generated hints in tools such as **kubectl**(not yet available). + +### Policy.Merge + +The merge strategy defined by a given policy dictates how it combines the set of **TopologyHints** generated by all **HintProviders** into a single **TopologyHint** that can be used to inform aligned resource allocations. + +The general merge strategy for all supported policies begins the same: + +1. Take the cross-product of **TopologyHints** generated for each resource type +1. For each entry in the cross-product, **bitwise-and** the NUMA affinities of each **TopologyHint** together. Set this as the NUMA affinity in a resulting "merged" hint. +1. If all of the hints in an entry have **Preferred** set to **True** , set **Preferred** to **True** in the resulting "merged" hint. +1. If even one of the hints in an entry has **Preferred** set to **False** , set **Preferred** to **False** in the resulting "merged" hint. Also set **Preferred** to **False** in the "merged" hint if its NUMA affinity contains all 0s. + +Following the example from the previous section with hints for **Container0** generated as: + +``` + cpu: {{01: True}, {10: True}, {11: False}} +gpu-vendor.com/gpu: {{01: True}, {10: True}} +nic-vendor.com/nic: {{01: True}, {10: True}} +``` + +The above algorithm results in the following set of cross-product entries and "merged" hints: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
cross-product entry +

+{cpu, gpu-vendor.com/gpu, nic-vendor.com/nic} +

+
"merged" hint +
+ {{01: True}, {01: True}, {01: True}} + {01: True} +
+ {{01: True}, {01: True}, {10: True}} + {00: False} +
+ {{01: True}, {10: True}, {01: True}} + {00: False} +
+ {{01: True}, {10: True}, {10: True}} + {00: False} +
+ +
+ {{10: True}, {01: True}, {01: True}} + {00: False} +
+ {{10: True}, {01: True}, {10: True}} + {00: False} +
+ {{10: True}, {10: True}, {01: True}} + {00: False} +
+ {{10: True}, {10: True}, {10: True}} + {01: True} +
+ +
+ {{11: False}, {01: True}, {01: True}} + {01: False} +
+ {{11: False}, {01: True}, {10: True}} + {00: False} +
+ {{11: False}, {10: True}, {01: True}} + {00: False} +
+ {{11: False}, {10: True}, {10: True}} + {10: False} +
+ + +Once this list of "merged" hints has been generated, it is the job of the specific **TopologyManager** policy in use to decide which one to consider as the "best" hint. + +In general, this involves: + +1. Sorting merged hints by their "narrowness". Narrowness is defined as the number of bits set in a hint’s NUMA affinity mask. The fewer bits set, the narrower the hint. For hints that have the same number of bits set in their NUMA affinity mask, the hint with the most low order bits set is considered narrower. +1. Sorting merged hints by their **Preferred** field. Hints that have **Preferred** set to **True** are considered more likely candidates than hints with **Preferred** set to **False**. +1. Selecting the narrowest hint with the best possible setting for **Preferred**. + +In the case of the **best-effort** policy this algorithm will always result in _some_ hint being selected as the "best" hint and the pod being admitted. This "best" hint is then made available to **HintProviders** so they can make their resource allocations based on it. + +However, in the case of the **restricted** and **single-numa-node** policies, any selected hint with **Preferred** set to **False** will be rejected immediately, causing pod admission to fail and no resources to be allocated. Moreover, the **single-numa-node** will also reject a selected hint that has more than one NUMA node set in its affinity mask. + +In the example above, the pod would be admitted by all policies with a hint of **{01: True}**. + +## Upcoming enhancements + +While the 1.18 release and promotion to Beta brings along some great enhancements and fixes, there are still a number of limitations, described [here](https://kubernetes.io/docs/tasks/administer-cluster/topology-manager/#known-limitations). We are already underway working to address these limitations and more. + +This section walks through the set of enhancements we plan to implement for the **TopologyManager** in the near future. This list is not exhaustive, but it gives a good idea of the direction we are moving in. It is ordered by the timeframe in which we expect to see each enhancement completed. + +If you would like to get involved in helping with any of these enhancements, please [join the weekly Kubernetes SIG-node meetings](https://github.com/kubernetes/community/tree/master/sig-node) to learn more and become part of the community effort! + +### Supporting device-specific constraints + +Currently, NUMA affinity is the only constraint considered by the **TopologyManager** for resource alignment. Moreover, the only scalable extensions that can be made to a **TopologyHint** involve _node-level_ constraints, such as PCIe bus alignment across device types. It would be intractable to try and add any _device-specific_ constraints to this struct (e.g. the internal NVLINK topology among a set of GPU devices). + +As such, we propose an extension to the device plugin interface that will allow a plugin to state its topology-aware allocation preferences, without having to expose any device-specific topology information to the kubelet. In this way, the **TopologyManager** can be restricted to only deal with common node-level topology constraints, while still having a way of incorporating device-specific topology constraints into its allocation decisions. + +Details of this proposal can be found [here](https://github.com/kubernetes/enhancements/pull/1121), and should be available as soon as Kubernetes 1.19. + +### NUMA alignment for hugepages + +As stated previously, the only two **HintProviders** currently available to the **TopologyManager** are the **CPUManager** and the **DeviceManager**. However, work is currently underway to add support for hugepages as well. With the completion of this work, the **TopologyManager** will finally be able to allocate memory, hugepages, CPUs and PCI devices all on the same NUMA node. + +A [KEP](https://github.com/kubernetes/enhancements/blob/253f1e5bdd121872d2d0f7020a5ac0365b229e30/keps/sig-node/20200203-memory-manager.md) for this work is currently under review, and a prototype is underway to get this feature implemented very soon. + + +### Scheduler awareness + +Currently, the **TopologyManager** acts as a Pod Admission controller. It is not directly involved in the scheduling decision of where a pod will be placed. Rather, when the kubernetes scheduler (or whatever scheduler is running in the deployment), places a pod on a node to run, the **TopologyManager** will decide if the pod should be "admitted" or "rejected". If the pod is rejected due to lack of available NUMA aligned resources, things can get a little interesting. This kubernetes [issue](https://github.com/kubernetes/kubernetes/issues/84869) highlights and discusses this situation well. + +So how do we go about addressing this limitation? We have the [Kubernetes Scheduling Framework](https://github.com/kubernetes/enhancements/blob/master/keps/sig-scheduling/20180409-scheduling-framework.md) to the rescue! This framework provides a new set of plugin APIs that integrate with the existing Kubernetes Scheduler and allow scheduling features, such as NUMA alignment, to be implemented without having to resort to other, perhaps less appealing alternatives, including writing your own scheduler, or even worse, creating a fork to add your own scheduler secret sauce. + +The details of how to implement these extensions for integration with the **TopologyManager** have not yet been worked out. We still need to answer questions like: + +* Will we require duplicated logic to determine device affinity in the **TopologyManager** and the scheduler? +* Do we need a new API to get **TopologyHints** from the **TopologyManager** to the scheduler plugin? + +Work on this feature should begin in the next couple of months, so stay tuned! + + +### Per-pod alignment policy + +As stated previously, a single policy is applied to _all_ pods on a node via a global **kubelet** flag, rather than allowing users to select different policies on a pod-by-pod basis (or a container-by-container basis). + +While we agree that this would be a great feature to have, there are quite a few hurdles that need to be overcome before it is achievable. The biggest hurdle being that this enhancement will require an API change to be able to express the desired alignment policy in either the Pod spec or its associated **[RuntimeClass](https://kubernetes.io/docs/concepts/containers/runtime-class/)**. + +We are only now starting to have serious discussions around this feature, and it is still a few releases away, at the best, from being available. + +## Conclusion + +With the promotion of the **TopologyManager** to Beta in 1.18, we encourage everyone to give it a try and look forward to any feedback you may have. Many fixes and enhancements have been worked on in the past several releases, greatly improving the functionality and reliability of the **TopologyManager** and its **HintProviders**. While there are still a number of limitations, we have a set of enhancements planned to address them, and look forward to providing you with a number of new features in upcoming releases. + +If you have ideas for additional enhancements or a desire for certain features, don’t hesitate to let us know. The team is always open to suggestions to enhance and improve the **TopologyManager**. + +We hope you have found this blog informative and useful! Let us know if you have any questions or comments. And, happy deploying…..Align Up! + + + \ No newline at end of file diff --git a/static/images/blog/2020-03-25-kubernetes-1.18-release-announcement/align-up.png b/static/images/blog/2020-03-25-kubernetes-1.18-release-announcement/align-up.png new file mode 100755 index 0000000000000000000000000000000000000000..fcd6d23f8554850e874da298b8d22a8cbcdc848b GIT binary patch literal 4763 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 As{jB1 literal 0 HcmV?d00001 diff --git a/static/images/blog/2020-03-25-kubernetes-1.18-release-announcement/numa-hint-provider1.png b/static/images/blog/2020-03-25-kubernetes-1.18-release-announcement/numa-hint-provider1.png new file mode 100755 index 0000000000000000000000000000000000000000..a2cc88e9a546ccd10db2f811aeb516309d478c9e GIT binary patch literal 20114 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 literal 0 HcmV?d00001 diff --git a/static/images/blog/2020-03-25-kubernetes-1.18-release-announcement/numa-hint-provider2.png b/static/images/blog/2020-03-25-kubernetes-1.18-release-announcement/numa-hint-provider2.png new file mode 100755 index 0000000000000000000000000000000000000000..073c70a5c9b31e84e728bea9ec961f29ef15d0c8 GIT binary patch literal 20704 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

tZpp!t@ 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 literal 0 HcmV?d00001