MST

星途 面试题库

面试题:容器化之容器编排与DevOps基础协同

请阐述容器编排工具(如Kubernetes)在与DevOps协同发展过程中,如何实现应用的自动化部署和扩缩容,列举关键的操作步骤和涉及到的核心概念。
48.3万 热度难度
后端开发容器化

知识考点

AI 面试

面试题答案

一键面试

自动化部署

  1. 关键操作步骤
    • 定义部署配置:使用Kubernetes的Deployment资源对象,编写YAML文件来定义应用的镜像版本、副本数量、容器资源限制等信息。例如:
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:v1.0
        resources:
          limits:
            cpu: "1"
            memory: "1Gi"
          requests:
            cpu: "0.5"
            memory: "512Mi"
- **创建部署**:通过`kubectl create -f deployment.yaml`或`kubectl apply -f deployment.yaml`命令将定义好的`Deployment`配置应用到Kubernetes集群中。`create`命令用于首次创建资源,`apply`命令则支持更新已有资源。
- **滚动更新**:当需要更新应用镜像版本时,只需修改`Deployment`配置文件中的镜像版本号,然后再次执行`kubectl apply -f deployment.yaml`。Kubernetes会自动以滚动的方式逐步替换旧版本的容器为新版本,确保服务的连续性。例如,从`my - app - image:v1.0`更新到`my - app - image:v1.1`。

2. 核心概念 - Deployment:是Kubernetes中用于管理无状态应用的主要资源对象,负责定义应用的期望状态,包括副本数量、镜像版本等,并确保集群中的实际状态与期望状态一致。它通过控制ReplicaSet来实现应用的部署和更新。 - ReplicaSet:负责维护指定数量的Pod副本,确保集群中始终有期望数量的Pod在运行。当某个Pod出现故障时,ReplicaSet会自动创建新的Pod来替代它。Deployment通常会创建和管理ReplicaSet。 - Pod:是Kubernetes中最小的可部署和可管理的计算单元,一个Pod可以包含一个或多个紧密相关的容器。应用的实际运行实例就是在Pod中,多个Pod可以共享网络和存储资源。

自动化扩缩容

  1. 关键操作步骤
    • 基于CPU或内存指标的自动扩缩容
      • 创建Horizontal Pod Autoscaler(HPA):使用kubectl autoscale命令或编写HPA的YAML文件来创建基于CPU或内存使用率的自动扩缩容控制器。例如,基于CPU使用率创建HPA:
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
  name: my - app - hpa
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: my - app - deployment
  minReplicas: 2
  maxReplicas: 10
  targetCPUUtilizationPercentage: 50
  - **监控指标**:Kubernetes通过`metrics - server`来收集Pod的CPU和内存使用指标。`metrics - server`需要提前部署到集群中,为HPA提供数据支持。
  - **扩缩容触发**:当Pod的平均CPU使用率超过`targetCPUUtilizationPercentage`(这里是50%)时,HPA会自动增加Pod副本数量;当使用率低于该值时,HPA会自动减少Pod副本数量,确保CPU使用率维持在目标范围内。
- **基于自定义指标的自动扩缩容**:
  - **部署自定义指标适配器**:例如`Prometheus Adapter`,用于将自定义指标(如应用特定的请求速率、队列长度等)暴露给Kubernetes的API Server。
  - **定义基于自定义指标的HPA**:在HPA的YAML文件中指定自定义指标和目标值。例如,假设自定义指标为`my_custom_metric`,目标值为100:
apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
  name: my - app - custom - hpa
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: my - app - deployment
  minReplicas: 2
  maxReplicas: 10
  metrics:
  - type: Pods
    pods:
      metric:
        name: my_custom_metric
      target:
        type: AverageValue
        averageValue: 100
  1. 核心概念
    • Horizontal Pod Autoscaler(HPA):通过监控Pod的资源使用率或自定义指标,自动调整DeploymentReplicaSet中的Pod副本数量,以满足应用的负载需求。HPA实现了水平方向(增加或减少Pod数量)的自动扩缩容。
    • Vertical Pod Autoscaler(VPA):与HPA不同,VPA主要负责根据容器的资源使用情况,自动调整容器的资源请求(requests)和限制(limits),实现垂直方向(调整单个Pod的资源配额)的自动扩缩容。不过,VPA相对HPA使用场景较少,且配置和使用更为复杂。
    • 自定义指标:除了CPU和内存等默认指标外,应用可以定义和暴露自己的特定指标(如业务相关的请求量、响应时间等),用于更精准的扩缩容决策。通过自定义指标适配器,Kubernetes可以识别并利用这些指标进行自动扩缩容。