

 **帮助改进此页面** 

要帮助改进本用户指南，请选择位于每个页面右侧窗格中的**在 GitHub 上编辑此页面**链接。

# 在专用实例上运行关键附加组件
<a name="critical-workload"></a>

在本主题中，您将了解如何部署具有 `CriticalAddonsOnly` 容忍度的工作负载，以便 EKS 自动模式将其调度到 `system` 节点池中。

EKS 自动模式内置的 `system` 节点池专为在专用实例上运行关键附加组件而设计。这种隔离可确保关键组件拥有专用资源并与一般工作负载隔离，从而增强集群的整体稳定性和性能。

本指南演示了如何利用 `CriticalAddonsOnly` 容忍度和适当的节点选择器将附加组件部署到 `system` 节点池。通过执行这些步骤，您可以利用 EKS 自动模式专用节点池结构提供的隔离和资源分配优势，确保将关键应用程序调度到专用的 `system` 节点上。

EKS 自动模式有以下两个内置节点池：`general-purpose` 和 `system`。有关更多信息，请参阅 [启用或禁用内置节点池](set-builtin-node-pools.md)。

`system` 节点池的作用是将关键附加组件隔离到不同的节点上。`system` 节点池预置的节点有一个 `CriticalAddonsOnly` Kubernetes 污点。Kubernetes 仅在具有对应的容忍度时才会将容器组调度到这些节点上。有关更多信息，请参阅 Kubernetes 文档中的[污点和容忍度](https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/)。

## 先决条件
<a name="_prerequisites"></a>
+ 启用内置 `system` 节点池的 EKS 自动模式集群。有关更多信息，请参阅 [启用或禁用内置节点池](set-builtin-node-pools.md) 
+  安装并配置了 `kubectl`。有关更多信息，请参阅 [进行设置以使用 Amazon EKS](setting-up.md)。

## 过程
<a name="_procedure"></a>

参阅下面的示例 yaml。请注意以下配置：
+  `nodeSelector` – 这会将工作负载关联到内置的 `system` 节点池。必须使用 AWS API 启用此节点池。有关更多信息，请参阅 [启用或禁用内置节点池](set-builtin-node-pools.md)。
+  `tolerations` – 此容忍度会克服 `system` 节点池中节点上的 `CriticalAddonsOnly` 污点。

```
apiVersion: apps/v1
kind: Deployment
metadata:
  name: sample-app
spec:
  replicas: 3
  selector:
    matchLabels:
      app: sample-app
  template:
    metadata:
      labels:
        app: sample-app
    spec:
      nodeSelector:
        karpenter.sh/nodepool: system
      tolerations:
      - key: "CriticalAddonsOnly"
        operator: "Exists"
      containers:
      - name: app
        image: nginx:latest
        resources:
          requests:
            cpu: "500m"
            memory: "512Mi"
```

要更新要在 `system` 节点池上运行的工作负载，您需要完成以下操作：

1. 更新现有工作负载以添加上文描述的以下配置：
   +  `nodeSelector` 
   +  `tolerations` 

1. 使用 `kubectl apply` 将更新后的工作负载部署到集群 

工作负载更新后将在专用节点上运行。