如何为命名空间保留某些工作节点



我想为命名空间保留一些工作节点。我看到堆叠流和中等的钞票

如何将命名空间分配给某些节点?

https://medium.com/@alejandro.ramirez.ch/streserving-a-kubernetes-node-for-specific-nodes-e75dc8297076

我知道我们可以使用污点和节点选择器来实现这一点。我的问题是,如果人们了解了nodeselector或taint的详细信息,我们如何防止他们将pod部署到这些专用的工作节点中。

谢谢

要完成您所需要的,基本上您必须使用taint。假设您有一个Kubernetes集群,其中有一个Master和两个Worker节点:

$ kubectl get nodes
NAME         STATUS   ROLES    AGE   VERSION
knode01      Ready    <none>   8d    v1.16.2
knode02      Ready    <none>   8d    v1.16.2
kubemaster   Ready    master   8d    v1.16.2

例如,我将knode01设置为Prod,knode02设置为Dev.

$ kubectl taint nodes knode01 key=prod:NoSchedule
$ kubectl taint nodes knode02 key=dev:NoSchedule

要在这些节点中运行pod,我们必须在yaml文件上指定一个规范中的容忍会话:

apiVersion: v1
kind: Pod
metadata:
name: pod1
labels:
env: test
spec:
containers:
- name: nginx
image: nginx
imagePullPolicy: IfNotPresent
tolerations:
- key: "key"
operator: "Equal"
value: "dev"
effect: "NoSchedule"

这个pod(pod1(将始终在knode02中运行,因为它被设置为dev。如果我们想在prod上运行它,我们的容忍度应该是这样的:

tolerations:
- key: "key"
operator: "Equal"
value: "prod"
effect: "NoSchedule"

由于我们只有2个节点,并且两者都被指定为只运行prod或dev,如果我们试图在不指定容差的情况下运行pod,那么pod将进入挂起状态:

$ kubectl get pods -o wide
NAME         READY   STATUS    RESTARTS   AGE   IP               NODE      NOMINATED NODE   READINESS GATES
pod0         1/1     Running   0          21m   192.168.25.156   knode01   <none>           <none>
pod1         1/1     Running   0          20m   192.168.32.83    knode02   <none>           <none>
pod2         1/1     Running   0          18m   192.168.25.157   knode01   <none>           <none>
pod3         1/1     Running   0          17m   192.168.32.84    knode02   <none>           <none>
shell-demo   0/1     Pending   0          16m   <none>           <none>    <none>           <none>

去除污点:

$ kubectl taint nodes knode02 key:NoSchedule-

就是这样做的

  1. 添加新标签,例如,ns=reserved,标签到特定的工作节点
  2. 将污点和容忍添加到此工作节点上的目标特定pod
  3. 您需要在该命名空间中定义RBAC角色和角色绑定,以控制其他用户可以执行的操作

相关内容

  • 没有找到相关文章

最新更新