我总共有 3 个节点池如下:
最初,内容池具有 0 个节点,并启用了自动调节程序。 我已经在内容点池上部署了一个 nginx pod 部署。它的最小节点数为 1,最大节点数为 3。 nginx的部署文件如下:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
affinity:
nodeAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 2
preference:
matchExpressions:
- key: agentpool
operator: In
values:
- contentspotpool
- weight: 1
preference:
matchExpressions:
- key: agentpool
operator: In
values:
- contentpool
当内容点池被驱逐时,我希望 内容点池 上的 pod 被转移到内容池。但是,pod 被安排在数据库池..!
谁能告诉我如何实现这一目标?..
另外,我如何设置数据库池以拒绝所有新 Pod?
使用的 AKS 版本 - 1.18.14
答案 0 :(得分:1)
我决定提供一个社区 Wiki 答案,因为有一个类似的答案但被作者删除了。
在这种情况下,您可以使用 Taints and Tolerations:
<块引用>污点和容忍度协同工作,以确保 pod 不会被安排到不适当的节点上。一个或多个污点被应用到一个节点;这标志着节点不应接受任何不容忍污点的 Pod。
您可以向数据库池中的节点添加一个 taint
并指定一个 toleration
,该 taint
仅用于可以调度的 Pod在数据库池上。
我创建了一个简单的例子来说明它是如何工作的。
我只有一个工作节点,我向这个节点添加了一个特定的 taint
:
$ kubectl get nodes
NAME STATUS ROLES AGE
database-pool Ready <none> 6m9s
$ kubectl taint nodes database-pool type=database:NoSchedule
node/database-pool tainted
$ kubectl describe node database-pool | grep -i taint
Taints: type=database:NoSchedule
仅允许将具有以下 Pods
的 toleration
调度到 database-pool
节点上:
tolerations:
- key: "type"
operator: "Equal"
value: "database"
effect: "NoSchedule"
我创建了两个 Pods
:web
(不容忍 taint
)和 web-with-toleration
(容忍 taint
):
$ cat web.yml
apiVersion: v1
kind: Pod
metadata:
labels:
run: web
name: web
spec:
containers:
- image: nginx
name: web
$ cat web-with-toleration.yml
apiVersion: v1
kind: Pod
metadata:
labels:
run: web
name: web-with-toleration
spec:
containers:
- image: nginx
name: web
tolerations:
- key: "type"
operator: "Equal"
value: "database"
effect: "NoSchedule"
$ kubectl apply -f web.yml
pod/web created
$ kubectl apply -f web-with-toleration.yml
pod/web-with-toleration created
最后,我们可以检查哪个 Pod
已被正确调度:
$ kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE
web 0/1 Pending 0 6m13s <none> <none>
web-with-toleration 1/1 Running 0 6m8s 10.76.0.14 database-pool
可以同时使用 Node affinity 和 Taints 来很好地控制 Pods
在特定节点上的位置。 >
<块引用>
节点亲和性,是 Pod 的一个属性,它将它们吸引到一组节点(作为偏好或硬性要求)。 污点则相反——它们允许一个节点排斥一组 Pod。