在 Kubernetes 中,使用 YAML 文件来定义和配置 Pod。以下是几种常见的调度方式以及对应的 YAML 示例:

  1. 基于资源需求与节点容量的调度:
apiVersion: v1
kind: Pod
metadata:
  name: my-pod
spec:
  containers:
  - name: my-container
    image: nginx
    resources:
      requests:
        cpu: "0.5"
        memory: "512Mi"
      limits:
        cpu: "1"
        memory: "1Gi"

上述示例中,通过在 Pod 的 spec 下的 resources 字段中定义 CPU 和内存的请求和限制,Kubernetes 将会根据这些资源需求与节点容量进行调度。

  1. 亲和性调度:
apiVersion: v1
kind: Pod
metadata:
  name: my-pod
spec:
  affinity:
    podAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
      - labelSelector:
          matchExpressions:
          - key: app
            operator: In
            values:
            - frontend
        topologyKey: kubernetes.io/hostname

上述示例中,通过在 Pod 的 spec 下的 affinity 字段中定义 podAffinity 规则,将 Pod 调度到具有 app=frontend 标签的节点上。

  1. 反亲和性调度:
apiVersion: v1
kind: Pod
metadata:
  name: my-pod
spec:
  affinity:
    podAntiAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
      - labelSelector:
          matchExpressions:
          - key: app
            operator: In
            values:
            - backend
        topologyKey: kubernetes.io/hostname

上述示例中,通过在 Pod 的 spec 下的 affinity 字段中定义 podAntiAffinity 规则,防止将 Pod 调度到具有 app=backend 标签的同一节点上。

  1. 亲和性和反亲和性的软限制:
apiVersion: v1
kind: Pod
metadata:
  name: my-pod
spec:
  affinity:
    podAffinity:
      preferredDuringSchedulingIgnoredDuringExecution:
      - weight: 100
        podAffinityTerm:
          labelSelector:
            matchExpressions:
            - key: app
              operator: In
              values:
              - frontend
          topologyKey: kubernetes.io/hostname
    podAntiAffinity:
      preferredDuringSchedulingIgnoredDuringExecution:
      - weight: 100
        podAffinityTerm:
          labelSelector:
            matchExpressions:
            - key: app
              operator: In
              values:
              - backend
          topologyKey: kubernetes.io/hostname

上述示例中,通过在 Pod 的 spec 下的 affinity 字段中定义 podAffinitypodAntiAffinity 规则,并设置权重值,以软限制的方式进行调度。

这些是 Kubernetes 中常见的调度方式的 YAML 示例。根据实际需求,可以组合和配置不同的调度规则,并添加其他字段(如标签选择器)来进一步定制 Pod 的调度行为。