前提条件
- 已创建ECK集群,集群状态为运行中。
- 已创建无状态工作负载Deployment或创建有状态工作负载StatefulSet。
操作步骤
-
查看本节点池的特定标签。
a. 登录边缘容器集群控制台。
b. 在控制台左侧导航栏中,单击集群管理 。
c. 在集群列表页面,选择所需的集群并单击左侧的节点管理 > 节点 。
d. 在节点列表页,点击左上角的标签与污点管理,进入节点的标签页面,找到名称为apps.openyurt.io/desired-nodepool的标签,此标签的值相同的节点在同一个节点池内。 -
为应用设置调度策略。
上述步骤已经获取了节点池特定标签apps.openyurt.io/desired-nodepool:<特定值>。您可以利用nodeSelector或者nodeAffinity保证您的应用限定在指定节点池上运行。
- 为应用设置 nodeSelector 。nodeSelector是spec中的一个字段。您只需要将上述的apps.openyurt.io/desired-nodepool: <特定值>标签填充到nodeSelector中。示例如下:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment-basic
labels:
app: nginx
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
nodeSelector:
apps.openyurt.io/desired-nodepool: xxx # #添加节点池的特定标签,以保证您的应用只可以运行在目标节点节点池下的节点上。请使用实际值。
containers:
- name: nginx
image: nginx:1.7.9
ports:
- containerPort: 80
resources:
limits:
cpu: "500m"
- 为应用设置 nodeAffinity 。
- requiredDuringSchedulingIgnoredDuringExecution表示Pod必须部署到满足条件的节点上。如果没有满足条件的节点,调度操作就会不停重试。其中IgnoreDuringExecution表示Pod部署之后运行时,如果节点标签发生了变化,不再满足Pod指定的条件,Pod也会继续运行。
- preferredDuringSchedulingIgnoredDuringExecution表示优先部署到满足条件的节点上,如果没有满足条件的节点,则忽略这些条件,按照正常逻辑部署。
本文示例使用requiredDuringSchedulingIgnoredDuringExecution策略保证应用始终运行在指定的节点池上。
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment-basic
labels:
app: nginx
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: apps.openyurt.io/desired-nodepool
operator: In
values:
- xxx #标签的值,需要根据实际情况填写。
containers:
- name: nginx
image: nginx:1.7.9
ports:
- containerPort: 80
resources:
limits:
cpu: "500m"
结果验证
单击 工作负载 >容器组页面,查看对应名称的容器组,发现目标应用调度到了特定节点池下的某个节点上。