在 Kubernetes 中,使用 YAML 文件来定义和配置 Pod。以下是几种常见的调度方式以及对应的 YAML 示例:
基于资源需求与节点容量的调度:
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 将会根据这些资源需求与节点容量进行调度。亲和性调度:
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
标签的节点上。反亲和性调度:
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
标签的同一节点上。亲和性和反亲和性的软限制:
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
字段中定义podAffinity
和podAntiAffinity
规则,并设置权重值,以软限制的方式进行调度。
这些是 Kubernetes 中常见的调度方式的 YAML 示例。根据实际需求,可以组合和配置不同的调度规则,并添加其他字段(如标签选择器)来进一步定制 Pod 的调度行为。