Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kubernetes 如何为命名空间保留某些工作节点_Kubernetes_Taint - Fatal编程技术网

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

Kubernetes 如何为命名空间保留某些工作节点,kubernetes,taint,Kubernetes,Taint,我想为命名空间保留一些工作节点。我看到了stackflow和medium的注释 我知道我们可以使用污染和节点选择器来实现这一点。 我的问题是,如果人们知道nodeselector或taint的详细信息,我们如何防止他们将pod部署到这些专用工作节点中 谢谢你要完成你所需要的,基本上你必须使用。 假设您有一个Kubernetes群集,其中有一个主节点和两个工作节点: $ kubectl get nodes NAME STATUS ROLES AGE VERSION

我想为命名空间保留一些工作节点。我看到了stackflow和medium的注释

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


谢谢你

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

$ 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
要在这些节点中运行pod,我们必须在yaml文件的spec会话中指定容差:

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>

这就是可以做到的

  • 向特定工作节点添加新标签,例如ns=保留标签
  • 将污染和容忍添加到此工作节点上的目标特定吊舱
  • 您需要在该命名空间中定义RBAC角色和角色绑定,以控制其他用户可以做什么

  • 你不会对你的同事隐瞒这些事情。。。这是生产,你应该学会合作;0@Honord,此答案帮助您找到所需的解决方案?
      tolerations:
      - key: "key"
        operator: "Equal"
        value: "prod"
        effect: "NoSchedule"
    
    $ 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>