梗概
前端部署到Kubernetes的核心流程可概括为四件套:容器镜像 + [use::Deployment] + [use::Service] + (可选)[use::Ingress]。实现这一流程的关键在于正确的前端镜像构建、资源配置和服务暴露,以确保前端应用能够在Kubernetes集群中稳定、高效地运行并被外部访问。
详细说明
1. 容器化前端应用
基础Dockerfile
FROM nginx:alpine
COPY build/ /usr/share/nginx/html
EXPOSE 80这个简单的Dockerfile完成了以下工作:
- 使用轻量级的[use::Nginx]:alpine作为基础镜像
- 将构建好的前端静态文件复制到Nginx的默认目录
- 暴露80端口供HTTP访问
关于Docker镜像的运行详情,可参考[use::运行docker镜像]。
构建与推送镜像
# 构建镜像
docker build -t your-registry/your-image:v1 .
# 推送到镜像仓库
docker push your-registry/your-image:v12. 创建Kubernetes资源
Deployment配置
[use::Deployment]定义了如何部署和管理前端应用的实例:
apiVersion: apps/v1
kind: Deployment
metadata:
name: frontend
labels:
app: frontend
spec:
replicas: 3 # 副本数,根据流量需求调整
selector:
matchLabels:
app: frontend
template:
metadata:
labels:
app: frontend
spec:
containers:
- name: frontend
image: your-registry/your-image:v1
ports:
- containerPort: 80
env:
- name: API_URL # 后端地址环境变量
value: "http://backend-service"
livenessProbe: # 健康检查
httpGet:
path: /
port: 80
initialDelaySeconds: 10
periodSeconds: 30这里的每个[use::Pod]将在集群中的[use::Node]节点上运行,参见[use::pod与node的关系]。
Service配置
[use::Service]将前端应用暴露为网络服务,可被集群内或集群外访问:
apiVersion: v1
kind: Service
metadata:
name: frontend-service
spec:
type: LoadBalancer # 外部访问类型
selector:
app: frontend # 关联到Deployment中的Pod
ports:
- port: 80 # 服务端口
targetPort: 80 # 容器端口3. 路由配置(可选)
Ingress配置
[use::Ingress]提供基于HTTP的路由,支持通过域名访问前端应用,常使用[use::Nginx]作为实现:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: app-ingress
spec:
rules:
- host: your-domain.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: frontend-service
port:
number: 804. 部署执行
# 应用Deployment配置
kubectl apply -f deployment.yaml
# 应用Service配置
kubectl apply -f service.yaml
# 应用Ingress配置(如果需要)
kubectl apply -f ingress.yaml5. 验证部署
# 检查Pod状态
kubectl get pods
# 获取Service外部IP
kubectl get svc frontend-service
# 测试访问
curl http://<EXTERNAL-IP>最佳实践
- 镜像版本管理:使用语义化版本,避免使用latest标签
- 环境变量注入:通过env字段注入API_URL等环境变量,便于不同环境配置
- 健康检查:配置合适的liveness和readiness探针,确保服务可用性
- 资源限制:为容器设置resources.limits和resources.requests,避免资源争抢
- 多阶段构建:使用Docker多阶段构建减小最终镜像体积
常见问题
- 跨域问题:确保[use::Nginx]配置中包含正确的CORS头部设置
- 缓存控制:为静态资源设置合理的缓存策略
- 配置热更新:使用ConfigMap存储Nginx配置,支持热更新
- 安全考虑:使用非root用户运行容器,配置网络策略限制访问
father:: kubernetes