Reword topic Assigning Pods to Nodes

- Rewording
- Tidying

Co-authored-by: Abdullah Gharaibeh <40361897+ahg-g@users.noreply.github.com>
This commit is contained in:
Tim Bannister
2022-05-10 11:02:19 +01:00
parent 3225a082df
commit 311cdc386a
@@ -11,20 +11,22 @@ weight: 20
<!-- overview --> <!-- overview -->
You can constrain a {{< glossary_tooltip text="Pod" term_id="pod" >}} so that it can only run on particular set of You can constrain a {{< glossary_tooltip text="Pod" term_id="pod" >}} so that it is
{{< glossary_tooltip text="node(s)" term_id="node" >}}. _restricted_ to run on particular {{< glossary_tooltip text="node(s)" term_id="node" >}},
or to _prefer_ to run on particular nodes.
There are several ways to do this and the recommended approaches all use There are several ways to do this and the recommended approaches all use
[label selectors](/docs/concepts/overview/working-with-objects/labels/) to facilitate the selection. [label selectors](/docs/concepts/overview/working-with-objects/labels/) to facilitate the selection.
Generally such constraints are unnecessary, as the scheduler will automatically do a reasonable placement Often, you do not need to set any such constraints; the
{{< glossary_tooltip text="scheduler" term_id="kube-scheduler" >}} will automatically do a reasonable placement
(for example, spreading your Pods across nodes so as not place Pods on a node with insufficient free resources). (for example, spreading your Pods across nodes so as not place Pods on a node with insufficient free resources).
However, there are some circumstances where you may want to control which node However, there are some circumstances where you may want to control which node
the Pod deploys to, for example, to ensure that a Pod ends up on a node with an SSD attached to it, or to co-locate Pods from two different the Pod deploys to, for example, to ensure that a Pod ends up on a node with an SSD attached to it,
services that communicate a lot into the same availability zone. or to co-locate Pods from two different services that communicate a lot into the same availability zone.
<!-- body --> <!-- body -->
You can use any of the following methods to choose where Kubernetes schedules You can use any of the following methods to choose where Kubernetes schedules
specific Pods: specific Pods:
* [nodeSelector](#nodeselector) field matching against [node labels](#built-in-node-labels) * [nodeSelector](#nodeselector) field matching against [node labels](#built-in-node-labels)
* [Affinity and anti-affinity](#affinity-and-anti-affinity) * [Affinity and anti-affinity](#affinity-and-anti-affinity)
@@ -338,13 +340,15 @@ null `namespaceSelector` matches the namespace of the Pod where the rule is defi
Inter-pod affinity and anti-affinity can be even more useful when they are used with higher Inter-pod affinity and anti-affinity can be even more useful when they are used with higher
level collections such as ReplicaSets, StatefulSets, Deployments, etc. These level collections such as ReplicaSets, StatefulSets, Deployments, etc. These
rules allow you to configure that a set of workloads should rules allow you to configure that a set of workloads should
be co-located in the same defined topology, eg., the same node. be co-located in the same defined topology; for example, preferring to place two related
Pods onto the same node.
Take, for example, a three-node cluster running a web application with an For example: imagine a three-node cluster. You use the cluster to run a web application
in-memory cache like redis. You could use inter-pod affinity and anti-affinity and also an in-memory cache (such as Redis). For this example, also assume that latency between
to co-locate the web servers with the cache as much as possible. the web application and the memory cache should be as low as is practical. You could use inter-pod
affinity and anti-affinity to co-locate the web servers with the cache as much as possible.
In the following example Deployment for the redis cache, the replicas get the label `app=store`. The In the following example Deployment for the Redis cache, the replicas get the label `app=store`. The
`podAntiAffinity` rule tells the scheduler to avoid placing multiple replicas `podAntiAffinity` rule tells the scheduler to avoid placing multiple replicas
with the `app=store` label on a single node. This creates each cache in a with the `app=store` label on a single node. This creates each cache in a
separate node. separate node.
@@ -379,10 +383,10 @@ spec:
image: redis:3.2-alpine image: redis:3.2-alpine
``` ```
The following Deployment for the web servers creates replicas with the label `app=web-store`. The The following example Deployment for the web servers creates replicas with the label `app=web-store`.
Pod affinity rule tells the scheduler to place each replica on a node that has a The Pod affinity rule tells the scheduler to place each replica on a node that has a Pod
Pod with the label `app=store`. The Pod anti-affinity rule tells the scheduler with the label `app=store`. The Pod anti-affinity rule tells the scheduler never to place
to avoid placing multiple `app=web-store` servers on a single node. multiple `app=web-store` servers on a single node.
```yaml ```yaml
apiVersion: apps/v1 apiVersion: apps/v1
@@ -431,6 +435,10 @@ where each web server is co-located with a cache, on three separate nodes.
| *webserver-1* | *webserver-2* | *webserver-3* | | *webserver-1* | *webserver-2* | *webserver-3* |
| *cache-1* | *cache-2* | *cache-3* | | *cache-1* | *cache-2* | *cache-3* |
The overall effect is that each cache instance is likely to be accessed by a single client, that
is running on the same node. This approach aims to minimize both skew (imbalanced load) and latency.
You might have other reasons to use Pod anti-affinity.
See the [ZooKeeper tutorial](/docs/tutorials/stateful-application/zookeeper/#tolerating-node-failure) See the [ZooKeeper tutorial](/docs/tutorials/stateful-application/zookeeper/#tolerating-node-failure)
for an example of a StatefulSet configured with anti-affinity for high for an example of a StatefulSet configured with anti-affinity for high
availability, using the same technique as this example. availability, using the same technique as this example.