面试题答案
一键面试自动化部署
- 关键操作步骤
- 定义部署配置:使用Kubernetes的
Deployment
资源对象,编写YAML文件来定义应用的镜像版本、副本数量、容器资源限制等信息。例如:
- 定义部署配置:使用Kubernetes的
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可以共享网络和存储资源。
自动化扩缩容
- 关键操作步骤
- 基于CPU或内存指标的自动扩缩容:
- 创建Horizontal Pod Autoscaler(HPA):使用
kubectl autoscale
命令或编写HPA的YAML文件来创建基于CPU或内存使用率的自动扩缩容控制器。例如,基于CPU使用率创建HPA:
- 创建Horizontal Pod Autoscaler(HPA):使用
- 基于CPU或内存指标的自动扩缩容:
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
- 核心概念
- Horizontal Pod Autoscaler(HPA):通过监控Pod的资源使用率或自定义指标,自动调整
Deployment
或ReplicaSet
中的Pod副本数量,以满足应用的负载需求。HPA实现了水平方向(增加或减少Pod数量)的自动扩缩容。 - Vertical Pod Autoscaler(VPA):与HPA不同,VPA主要负责根据容器的资源使用情况,自动调整容器的资源请求(
requests
)和限制(limits
),实现垂直方向(调整单个Pod的资源配额)的自动扩缩容。不过,VPA相对HPA使用场景较少,且配置和使用更为复杂。 - 自定义指标:除了CPU和内存等默认指标外,应用可以定义和暴露自己的特定指标(如业务相关的请求量、响应时间等),用于更精准的扩缩容决策。通过自定义指标适配器,Kubernetes可以识别并利用这些指标进行自动扩缩容。
- Horizontal Pod Autoscaler(HPA):通过监控Pod的资源使用率或自定义指标,自动调整