# K8S容忍污点亲和度

在Kubernetes(K8S)集群中,容忍、污点和亲和度是一些非常重要的概念。本文将着重介绍如何实现K8S中的容忍、污点和亲和度,并通过代码示例向您展示整个流程。

## 流程概述

下面是实现K8S容忍污点亲和度的流程概述:

| 步骤 | 描述 |
| ---- | ---- |
| 1 | 创建一个节点,并为该节点添加一个污点 |
| 2 | 创建一个Pod,并设置该Pod容忍指定的污点 |
| 3 | 配置Pod和节点之间的亲和度 |

接下来我们将逐步进行详细介绍每一个步骤以及对应的代码示例。

## 步骤一:创建一个节点,并为节点添加一个污点

首先,我们创建一个K8S节点,并为该节点添加一个污点。我们需要使用NodeSelector以及Taints来为节点添加污点。

```yaml
apiVersion: v1
kind: Node
metadata:
name: node1
spec:
taints:
- key: node-role
value: infra
effect: NoSchedule
```

在上面的yaml配置中,我们给名为node1的节点添加了一个名为node-role的污点,值为infra,并设置了效果为NoSchedule,表示该节点不会被调度Pod。

## 步骤二:创建一个Pod,并设置容忍指定的污点

接下来,我们创建一个Pod,并设置该Pod容忍之前添加的污点。我们需要在Pod的spec中使用tolerations来设置容忍。

```yaml
apiVersion: v1
kind: Pod
metadata:
name: test-pod
spec:
containers:
- name: test-container
image: nginx
tolerations:
- key: node-role
operator: Equal
value: infra
effect: NoSchedule
```

在上面的yaml配置中,我们创建了一个名为test-pod的Pod,并设置了该Pod容忍node-role为infra的污点,同样设置了效果为NoSchedule。

## 步骤三:配置Pod和节点之间的亲和度

最后,我们需要配置Pod和节点之间的亲和度。通过NodeAffinity来指定Pod与哪些节点有亲和度。

```yaml
apiVersion: v1
kind: Pod
metadata:
name: test-pod
spec:
containers:
- name: test-container
image: nginx
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- node1
```

在上面的yaml配置中,我们设置了test-pod这个Pod与名为node1的节点具有亲和度,即只能在node1节点上运行。

通过上述步骤,我们实现了K8S中的容忍、污点和亲和度的配置。希望这篇文章能够帮助您更好地理解和应用K8S中的这些重要概念。祝您在K8S的学习和实践过程中顺利!