
1) 【一句话结论】在科大讯飞云平台中,微服务容器化部署到Kubernetes需通过Dockerfile定义应用环境并构建镜像,再通过Kubernetes的Deployment(管理Pod副本)、Service(负载均衡)和Ingress(外部访问)资源对象完成部署,结合Prometheus等监控工具和Horizontal Pod Autoscaler(HPA)实现自动扩缩容,确保应用弹性运行。
2) 【原理/概念讲解】老师先解释容器化核心是“容器化流程”和“K8s资源管理”。首先,容器化流程:Dockerfile是“应用环境的菜谱”,通过指定基础镜像(如alpine:latest)、安装依赖(RUN apt-get install...)、复制应用代码(COPY . /app)、设置启动命令(CMD node app.js)等指令,构建轻量级镜像。镜像构建后,通过docker build或K8s的BuildConfig(假设平台支持)推送到镜像仓库(如Harbor)。然后K8s部署配置:Deployment是“Pod副本控制器”,负责管理Pod的创建、更新和删除,确保应用可用性;Service是“虚拟IP+负载均衡器”,为Deployment提供稳定的服务访问入口;Ingress是“入口控制器”,通过规则将外部请求路由到Service,实现多服务统一访问。监控与扩缩容:监控通过Prometheus采集指标(如CPU、内存、请求延迟),告警工具(如Alertmanager)触发告警;扩缩容通过HPA根据监控指标(如CPU利用率超过80%)自动调整Deployment的replicas数量,实现弹性伸缩。
3) 【对比与适用场景】
| 资源对象 | 定义 | 特性 | 使用场景 | 注意点 |
|---|---|---|---|---|
| Deployment | 管理无状态应用的Pod副本 | 自动扩缩容、滚动更新、回滚 | 无状态微服务(如API网关、计算服务) | 需配合Service访问,无状态数据 |
| StatefulSet | 管理有状态应用的Pod副本 | 带有序列ID、持久化存储、稳定网络 | 有状态应用(如数据库、消息队列) | 需手动配置持久化卷 |
4) 【示例】假设微服务是一个简单的Node.js API服务,代码结构:/app/app.js(处理请求)。Dockerfile内容:
# 使用轻量基础镜像
FROM node:18-alpine
# 设置工作目录
WORKDIR /app
# 复制package.json和package-lock.json
COPY package*.json ./
# 安装依赖
RUN npm install
# 复制应用代码
COPY . .
# 暴露端口
EXPOSE 3000
# 设置启动命令
CMD ["node", "app.js"]
K8s Deployment配置(YAML):
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-service-deployment
spec:
replicas: 3
selector:
matchLabels:
app: my-service
template:
metadata:
labels:
app: my-service
spec:
containers:
- name: my-service-container
image: harbor.example.com/my-service:latest
ports:
- containerPort: 3000
resources:
requests:
cpu: "100m"
memory: "128Mi"
limits:
cpu: "500m"
memory: "512Mi"
livenessProbe:
httpGet:
path: /health
port: 3000
initialDelaySeconds: 30
periodSeconds: 10
readinessProbe:
httpGet:
path: /ready
port: 3000
initialDelaySeconds: 5
periodSeconds: 5
K8s Service配置(YAML):
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
selector:
app: my-service
ports:
- protocol: TCP
port: 80
targetPort: 3000
type: ClusterIP
K8s Ingress配置(YAML):
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-service-ingress
spec:
rules:
- host: my-service.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: my-service
port:
number: 80
监控与扩缩容:HPA配置(YAML):
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: my-service-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: my-service-deployment
minReplicas: 2
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 70
5) 【面试口播版答案】在科大讯飞云平台中,将微服务容器化部署到Kubernetes的流程是:首先通过Dockerfile定义应用环境(比如指定基础镜像、安装依赖、复制代码),然后构建镜像并推送到镜像仓库。接着在K8s中创建Deployment(管理Pod副本,比如设置3个副本),通过Service提供内部负载均衡(ClusterIP类型),再通过Ingress配置外部访问规则(比如将my-service.example.com路由到Service)。监控方面,使用Prometheus采集CPU、内存等指标,告警工具触发告警;扩缩容通过HPA根据CPU利用率(如超过70%)自动调整Deployment的副本数,实现弹性伸缩。整个流程确保应用在云平台中高效、稳定运行。
6) 【追问清单】
7) 【常见坑/雷区】