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
Azure Kubernetes服务:在退出Spot节点池后,如何将POD从Spot节点池移动到常规节点池?_Kubernetes_Yaml_Azure Aks_Kubernetes Pod - Fatal编程技术网

Azure Kubernetes服务:在退出Spot节点池后,如何将POD从Spot节点池移动到常规节点池?

Azure Kubernetes服务:在退出Spot节点池后,如何将POD从Spot节点池移动到常规节点池?,kubernetes,yaml,azure-aks,kubernetes-pod,Kubernetes,Yaml,Azure Aks,Kubernetes Pod,我总共有3个节点池,如下所示: 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:

我总共有3个节点池,如下所示:

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
  • 数据库池-常规节点池
  • 内容池-常规节点池
  • 内容点池-点节点池
  • 最初,内容池具有启用自动缩放的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

    我决定提供一个社区维基答案,因为有一个类似的答案,但被作者删除了

    在这种情况下,您可以使用:

    污染和容忍共同确保POD不会被安排到不适当的节点上。一个或多个污点应用于一个节点;这标志着节点不应接受任何不容忍污染的吊舱

    您可以向数据库池中的节点添加
    污点
    ,并指定一个
    容忍度
    ,该容忍度仅与
    污点
    匹配,该容忍度仅适用于可在数据库池中调度的POD


    我创建了一个简单的示例来说明它是如何工作的

    我只有一个工作节点,并且我向该节点添加了一个特定的
    污点

    $ 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
    
    我创建了两个
    pod
    web
    (不容忍
    污染
    )和
    容忍的web
    (容忍
    污染
    ):

    最后,我们可以检查哪个
    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 
    
    $kubectl获得吊舱-o宽
    名称就绪状态重新启动老化IP节点
    web 0/1挂起0 6m13s
    运行0 6m8s 10.76.0.14数据库池的容忍度为1/1的web
    

    可以同时使用和污染,以更好地控制特定节点上的
    pod
    放置

    节点关联性是POD的一个属性,它将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