MST

星途 面试题库

面试题:微服务架构下Kubernetes资源调度原理及应用

在微服务架构中,Kubernetes是如何进行资源调度以确保各个微服务稳定运行的?请举例说明常用的资源调度策略及如何在Kubernetes中配置。
45.8万 热度难度
后端开发微服务架构

知识考点

AI 面试

面试题答案

一键面试

Kubernetes资源调度确保微服务稳定运行的方式

  1. 节点选择:Kubernetes通过标签(Labels)和选择器(Selectors)来匹配Pod与节点。例如,给需要高性能CPU的微服务Pod加上cpu - high - performance: true标签,同时给具备高性能CPU的节点也加上同样标签,这样调度器就能将这类Pod调度到合适节点。
  2. 资源请求与限制:Pod可以声明对CPU和内存等资源的请求(Requests)与限制(Limits)。Kubernetes调度器根据节点可用资源和Pod资源请求来分配Pod。例如,一个微服务Pod请求0.5个CPU核心和512Mi内存,调度器会寻找有足够空闲资源的节点。

常用资源调度策略及配置

  1. 默认调度策略
    • 描述: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
  1. 节点亲和性(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
  1. 资源配额(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。