k8s学习 – Pod调度

  • Post author:
  • Post category:其他




Pod调度

在这里插入图片描述



资源限制对pod调度影响

apiVersion: v1
kind: Pod
metadata:
  name: resource
spec:
  containers:
  - name: web
    image: nginx:1.16
    resources:
      requests:
        memory: "64Mi"
        cpu: "250m"
      limits:
        memory: "128Mi"
        cpu: "500m"

Memory 的单位是Mi

CPU的单位: 0.5 =500m , 1=1000m



nodeSelector

给特定的节点打标签

kubectl label nodes node1 location=node1

删除标签

kubectl label nodes node1 location-

案例:

apiVersion: v1
kind: Pod
metadata:
  name: nodeselector
spec:
  nodeSelector:
    location: node1
  containers:
  - name: nginx
    image: nginx:1.19



nodeAffinity

节点亲和类似于nodeSelector,可以根据节点上的标签来约束Pod可以调度到哪些节点。

相比nodeSelector:

•匹配有更多的逻辑组合,不只是字符串的完全相等

•调度分为软策略和硬策略,而不是硬性要求

•硬(required):必须满足

•软(preferred):尝试满足,但不保证

操作符:In、NotIn、Exists、DoesNotExist、Gt、Lt

案例:

apiVersion: v1
kind: Pod
metadata:
  name: nginx
spec:
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
        - matchExpressions:
          - key: disktype
            operator: In
            values:
            - ssd            
  containers:
  - name: nginx
    image: nginx:1.16
    imagePullPolicy: IfNotPresent



污点 & 容忍

Taints:避免Pod调度到特定Node上

kubectl taint node [node] key=value:[effect]

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: web
  name: web
spec:
  replicas: 10
  selector:
    matchLabels:
      app: web
  strategy: {}
  template:
    metadata:
      labels:
        app: web
    spec:
      containers:
      - image: nginx:1.16
        name: nginx
        resources: {}
      tolerations:
      - key: "disktype"
        operator: "Equal"
        value: "sata"
        effect: "NoSchedule"
status: {}

nodeName

案例:

apiVersion: v1
kind: Pod
metadata:
  name: nodename
  labels:
    app: nginx
spec:
  nodeName: node2
  containers:
  - name: nginx
    image: nginx:1.15



Daemonset 控制器

在每一个Node上运行一个Pod

新加入的Node也同样会自动运行一个Pod

网络插件、监控Agent、日志Agent

案例:

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: filebeat
  namespace: kube-system
spec:
  selector:
    matchLabels:
      name: filebeat
  template:
    metadata:
      labels:
        name: filebeat
    spec:
      containers:
      - name: log
        image: elastic/filebeat:7.10.2

思考:

如上的案例执行之后, 只会在node1 & 2上运行filebeat, 如何在master上也运行filebeat ?



版权声明:本文为weixin_41444433原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。