Kubectl将部署应用于指定的节点组-AWS EKS

时间:2019-08-14 12:06:14

标签: amazon-web-services kubernetes aws-eks

我在 EKS集群中创建了多个堆栈(节点组),并且每个组都在不同实例类型上运行(例如,一组在GPU实例上运行)。我在每个节点组的 aws-auth-cm.yaml 文件的 mapRoles 中添加了一个条目。现在,我想在另一个上部署一些 Deployments 。部署文件如下所示:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: deployment-1
spec:
  replicas: 1
  selector:
    matchLabels:
      component: component-1
  template:
    metadata:
      labels:
        component: component-1
    spec:
      containers:
        - name: d1
          image: docker-container
          ports:
            - containerPort: 83

文档显示我可以运行标准命令 kubectl apply 。有什么方法可以指定组?也许像

  

kubectl apply -f server-deployment.yaml -group node-group-1

3 个答案:

答案 0 :(得分:1)

可悲的是您提到的内容不存在,但您可以阅读Affinity,它应该可以解决您的问题。

TL; DR,您必须在节点上添加标签或使用现有标签,然后使用这些标签将吊舱分配给正确的节点。

确认您有beta.kubernetes.io/instance-type=highmem

apiVersion: apps/v1
kind: Deployment
metadata:
  name: deployment-1
spec:
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
        - matchExpressions:
          - key: beta.kubernetes.io/instance-typ
            operator: In
            values:
            - highmem
  replicas: 1
  selector:
    matchLabels:
      component: component-1
  template:
    metadata:
      labels:
        component: component-1
    spec:
      containers:
        - name: d1
          image: docker-container
          ports:
            - containerPort: 83

答案 1 :(得分:1)

您可以使用taints and tolerations来确保吊舱最终位于正确的节点上。当您具有异构节点时,这是一个好习惯。

例如,在我的部署中,我们有2类节点,其中的一个节点连接了NVMe SSD,而没有的节点。它们的污染方式各不相同,并且在顶部运行的部署会指定容忍度,以确保它们最终只能出现在具有特定污点的节点上。

例如,该节点将具有:

spec:
    ...
    taints:
    - effect: NoSchedule
      key: role
      value: gpu-instance

,必须在这些节点之一上调度的Pod必须具有:

spec:
    tolerations:
    - effect: NoSchedule
      key: role
      operator: Equal
      value: gpu-instance

设置完成后,您只需执行常规的kubectl apply,即可将pod正确定位到节点上。 请注意,这是一种比节点选择器和标签更灵活的方法,因为它可以为您提供更精细的控制和可配置的逐出行为。

答案 2 :(得分:0)

只要您已标记节点,

nodeSelector也应适用于此

此处的示例和更多信息:https://eksworkshop.com/beginner/140_assigning_pods/node_selector/和此处https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#nodeselector