梗概

前端部署到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:v1

2. 创建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: 80

4. 部署执行

# 应用Deployment配置
kubectl apply -f deployment.yaml
 
# 应用Service配置
kubectl apply -f service.yaml
 
# 应用Ingress配置(如果需要)
kubectl apply -f ingress.yaml

5. 验证部署

# 检查Pod状态
kubectl get pods
 
# 获取Service外部IP
kubectl get svc frontend-service
 
# 测试访问
curl http://<EXTERNAL-IP>

最佳实践

  1. 镜像版本管理:使用语义化版本,避免使用latest标签
  2. 环境变量注入:通过env字段注入API_URL等环境变量,便于不同环境配置
  3. 健康检查:配置合适的liveness和readiness探针,确保服务可用性
  4. 资源限制:为容器设置resources.limits和resources.requests,避免资源争抢
  5. 多阶段构建:使用Docker多阶段构建减小最终镜像体积

常见问题

  1. 跨域问题:确保[use::Nginx]配置中包含正确的CORS头部设置
  2. 缓存控制:为静态资源设置合理的缓存策略
  3. 配置热更新:使用ConfigMap存储Nginx配置,支持热更新
  4. 安全考虑:使用非root用户运行容器,配置网络策略限制访问

father:: kubernetes