在 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 的调度行为。