将Docker-Compose部署的Node.js应用迁移至Kubernetes的方法咨询
将Next.js + Nginx架构从Docker Compose迁移到Kubernetes
前置准备
首先得把你的两个镜像推到容器镜像仓库(比如Docker Hub、私有Harbor等),Kubernetes集群需要能拉取到这些镜像。假设你已经给镜像打上标签:
- Next.js镜像:
your-registry/nextjs-app:v1 - Nginx镜像:
your-registry/nginx-proxy:v1
1. 部署Next.js应用(Deployment + Service)
创建nextjs-deployment.yaml:
apiVersion: apps/v1 kind: Deployment metadata: name: nextjs-deployment spec: replicas: 2 # 可根据业务需求调整副本数量 selector: matchLabels: app: nextjs template: metadata: labels: app: nextjs spec: containers: - name: nextjs image: your-registry/nextjs-app:v1 # 替换为你的实际镜像地址 ports: - containerPort: 3000 resources: requests: cpu: "100m" memory: "128Mi" limits: cpu: "500m" memory: "256Mi"
创建nextjs-service.yaml(ClusterIP类型,仅集群内部可访问):
apiVersion: v1 kind: Service metadata: name: nextjs-service spec: selector: app: nextjs ports: - port: 3000 targetPort: 3000
2. 部署Nginx代理(Deployment + Service)
注意:你的Nginx配置文件里的proxy_pass必须修改为Kubernetes内部的Service地址,也就是http://nextjs-service:3000——K8s的Service会通过集群DNS自动解析这个内部域名。
创建nginx-deployment.yaml:
apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment spec: replicas: 2 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: your-registry/nginx-proxy:v1 # 替换为你的实际镜像地址 ports: - containerPort: 80 resources: requests: cpu: "100m" memory: "64Mi" limits: cpu: "200m" memory: "128Mi"
创建nginx-service.yaml(根据集群环境选择类型):
apiVersion: v1 kind: Service metadata: name: nginx-service spec: selector: app: nginx ports: - port: 80 targetPort: 80 type: NodePort # 裸金属集群可用NodePort;云环境可改用LoadBalancer
3. 用Ingress暴露服务(推荐方案)
如果你的集群已经部署了Ingress Controller(比如NGINX Ingress Controller),可以直接用Ingress替代单独的Nginx Deployment,这更符合Kubernetes最佳实践:
创建ingress.yaml:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: nextjs-ingress annotations: nginx.ingress.kubernetes.io/rewrite-target: / spec: rules: - host: your-domain.com # 替换为你的业务域名 http: paths: - path: / pathType: Prefix backend: service: name: nextjs-service port: number: 3000
4. 执行部署
运行以下命令将所有资源部署到Kubernetes集群:
kubectl apply -f nextjs-deployment.yaml kubectl apply -f nextjs-service.yaml kubectl apply -f nginx-deployment.yaml kubectl apply -f nginx-service.yaml # 若使用Ingress方案,执行: kubectl apply -f ingress.yaml
5. 验证部署状态
- 查看Pod运行状态:
kubectl get pods - 查看Service信息:
kubectl get svc - 访问验证:
- NodePort方案:
http://<集群节点IP>:<NodePort端口> - LoadBalancer方案:访问云厂商分配的外部负载均衡IP
- Ingress方案:配置域名解析后,直接访问你的业务域名
- NodePort方案:
内容的提问来源于stack exchange,提问作者CaptainPy
相关产品推荐
相关产品推荐

