# K8S 系统预留

在Kubernetes(K8S)中,系统预留是一种用于保留一部分节点资源不被普通Pod调度使用的机制。对于一些特殊的应用场景,比如系统组件或者高优先级任务,我们通常需要在集群中设置系统预留来确保它们有足够的资源支持。

## 流程

下面是实现K8S系统预留的一般流程:

| 步骤 | 操作 |
|------|--------------------------|
| 1 | 创建Namespace |
| 2 | 创建资源配额 |
| 3 | 在节点上设置污点和容忍度 |
| 4 | 部署Pod |

## 详细步骤

### 步骤1:创建Namespace

首先,我们需要在集群中创建一个专门用于系统预留的Namespace。

```yaml
apiVersion: v1
kind: Namespace
metadata:
name: system-reserved
```

### 步骤2:创建资源配额

接着,我们需要为该Namespace设置资源配额,限制其可以使用的资源。

```yaml
apiVersion: v1
kind: ResourceQuota
metadata:
name: system-reserved-quota
namespace: system-reserved
spec:
hard:
pods: "10"
requests.cpu: "4"
requests.memory: 8Gi
limits.cpu: "6"
limits.memory: 10Gi
```

### 步骤3:在节点上设置污点和容忍度

然后,我们需要在集群的节点上设置污点(Taints)和容忍度(Tolerations),以便只有特定Pod可以调度到被预留的节点上。

```bash
kubectl taint nodes node-1 reserved=system:NoSchedule
```

```yaml
apiVersion: v1
kind: Pod
metadata:
name: system-pod
spec:
containers:
- name: system-container
image: nginx
tolerations:
- key: "reserved"
operator: "Equal"
value: "system"
effect: "NoSchedule"
```

### 步骤4:部署Pod

最后,我们可以部署需要系统预留的Pod到对应的Namespace中。

```yaml
apiVersion: v1
kind: Pod
metadata:
name: system-pod
namespace: system-reserved
spec:
containers:
- name: system-container
image: nginx
```

通过以上步骤,我们成功实现了K8S系统预留,确保了系统组件或者高优先级任务有足够的资源支持。希望这篇文章对你有所帮助!