面试题答案
一键面试Kubernetes资源调度确保微服务稳定运行的方式
- 节点选择:Kubernetes通过标签(Labels)和选择器(Selectors)来匹配Pod与节点。例如,给需要高性能CPU的微服务Pod加上
cpu - high - performance: true
标签,同时给具备高性能CPU的节点也加上同样标签,这样调度器就能将这类Pod调度到合适节点。 - 资源请求与限制:Pod可以声明对CPU和内存等资源的请求(Requests)与限制(Limits)。Kubernetes调度器根据节点可用资源和Pod资源请求来分配Pod。例如,一个微服务Pod请求0.5个CPU核心和512Mi内存,调度器会寻找有足够空闲资源的节点。
常用资源调度策略及配置
- 默认调度策略:
- 描述:Kubernetes默认调度策略基于一系列规则,如资源充足性、节点亲和性等。它会优先考虑将Pod调度到资源最适合的节点。
- 配置:无需额外配置,默认启用。例如一个简单的Deployment创建的Pod,默认按照此策略调度。以下是一个简单Deployment示例:
apiVersion: apps/v1
kind: Deployment
metadata:
name: my - app - deployment
spec:
replicas: 3
selector:
matchLabels:
app: my - app
template:
metadata:
labels:
app: my - app
spec:
containers:
- name: my - app - container
image: my - app - image:latest
resources:
requests:
cpu: 250m
memory: 128Mi
limits:
cpu: 500m
memory: 256Mi
- 节点亲和性(Node Affinity):
- 描述:分为软亲和性(PreferredDuringSchedulingIgnoredDuringExecution)和硬亲和性(RequiredDuringSchedulingIgnoredDuringExecution)。硬亲和性要求Pod必须调度到匹配标签的节点,软亲和性则是优先调度到匹配节点。
- 配置:
apiVersion: v1
kind: Pod
metadata:
name: example - pod
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: disk - type
operator: In
values:
- ssd
containers:
- name: example - container
image: example - image:latest
上述配置表示Pod必须调度到标签disk - type
值为ssd
的节点。
3. 污点(Taints)与容忍(Tolerations):
- 描述:节点可以设置污点,表明不希望被某些Pod调度。Pod通过设置容忍来允许调度到有相应污点的节点。
- 配置:
- 设置节点污点:kubectl taint nodes node1 key = value:NoSchedule
- Pod设置容忍:
apiVersion: v1
kind: Pod
metadata:
name: toleration - pod
spec:
tolerations:
- key: "key"
operator: "Equal"
value: "value"
effect: "NoSchedule"
containers:
- name: toleration - container
image: example - image:latest
- 资源配额(Resource Quotas):
- 描述:可以对Namespace内的资源使用进行限制,如限定该Namespace内所有Pod可使用的CPU总量和内存总量。
- 配置:
apiVersion: v1
kind: ResourceQuota
metadata:
name: compute - resources
namespace: my - namespace
spec:
hard:
requests.cpu: "1"
requests.memory: 1Gi
limits.cpu: "2"
limits.memory: 2Gi
上述配置限制了my - namespace
中所有Pod请求的CPU总量不超过1个核心,请求内存总量不超过1Gi,限制的CPU总量不超过2个核心,限制内存总量不超过2Gi。