繁体   English   中英

create-react-app 和 Skaffold kubernetes 行为不稳定且缓慢

[英]Erratic and slow behavior with create-react-app and Skaffold kubernetes

我让 Skaffold 与本地开发服务器和数据库部署配合得很好。 我正在尝试create-react-app前端,但这种行为非常缓慢且不稳定。

问题

主要问题如下:

  1. 运行skaffold dev --port-forward --tail需要五分钟以上,它最终开始旋转。 仅运行docker build只需不到 30 秒。
  2. 当它最终开始旋转时,它只是在Starting the development server...再等两分钟。
  3. 然后,十分之九,几分钟后我得到以下错误(有三个,因为那是有多少副本): 在此处输入图像描述

    十分之一的时候,它实际上会 go 进入Compiled Successfully. You can now view in the browser. Compiled Successfully. You can now view in the browser. 但它永远不会在 Chrome 中启动。

  4. create-react-app 中对 JS 的更改永远不会反映在新浏览器中。 您必须停止并再次运行 Skaffold。 Skaffold 确实说 Syncing Syncing 1 files for <image>... Watching for changes... ,但即使刷新后也没有任何变化。

我试过的

  1. 我真的简化了我正在尝试做的事情,以便更容易解决这个问题,所以我只使用了一个 OOTB create-react-app应用程序。 无论如何,行为都是相同的。
  2. minikube deleteminikube start几次(这样做是因为即使服务器部署在尝试create-react-app后也开始出现异常行为)

重现的代码和步骤

我在 macOS Mojave (10.14.6) 上使用 Docker for Mac、Kubernetes (v1.16.0)、minikube (v1.4.0)、Skaffold (v0.39.0) 和create-react-app 我将不得不跳过所有这些的安装过程,因为它相当长,所以以下步骤假设您已经设置了这个。

  1. 创建一个项目目录:

    mkdir project

  2. 创建一个 Kubernetes 清单目录并进入它:

    mkdir k8s && cd k8s

  3. 制作一个client-deployment.yaml并添加以下内容:

     apiVersion: apps/v1 kind: Deployment metadata: name: client-deployment spec: replicas: 3 selector: matchLabels: component: web template: metadata: labels: component: web spec: containers: - name: client image: testapp/client ports: - containerPort: 3000
  4. 制作一个client-cluster-ip-service.yaml并添加以下内容:

     apiVersion: v1 kind: Service metadata: name: client-cluster-ip-service spec: type: ClusterIP selector: component: web ports: - port: 3000 targetPort: 3000
  5. 移回父级:

    cd..

  6. 创建一个skaffold.yaml并添加以下内容:

     apiVersion: skaffold/v1beta15 kind: Config build: local: push: false artifacts: - image: testapp/client context: web docker: dockerfile: Dockerfile.dev sync: manual: - src: "**/*.js" dest: . - src: "**/*.html" dest: . - src: "**/*.css" dest: . deploy: kubectl: manifests: - k8s/client-deployment.yaml - k8s/client-cluster-ip-service.yaml portForward: - resourceType: service resourceName: client-cluster-ip-service port: 3000 localPort: 3000
  7. 启动一个新的create-react-app项目:

    npx create-react-app test-app

  8. 切换到目录:

    cd test-app

  9. 创建Dockerfile.dev并添加以下内容:

     FROM node:alpine WORKDIR '/app' EXPOSE 3000 CMD ["npm", "run", "start"] COPY package*./ RUN npm install COPY. .
  10. 创建一个.dockerignore文件并添加以下内容:

     node_modules *.swp
  11. Go 回到父目录:

    cd..

  12. 确保minikube正在运行:

    minikube start

  13. 运行skaffold.yaml

    skaffold dev --port-forward --tail

这就是给我带来问题的原因。

好的。 漠视。 从一个副本开始,它运行良好。 两个工作得很好。 如果skaffold已经在运行,则三个工作,但不是来自新的skaffold dev --port-forward --tail

skaffold ssh然后做了一个top 内存用完了……利用率为 86%。 将其从默认的 2GB 增加到 8GB,现在它可以正常工作了。

首先使用minikube delete删除虚拟机,然后使用minikube start --memory='8g'创建一个新虚拟机。 现在一切都好。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM