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

标签 reactjs docker kubernetes minikube skaffold

我的 Skaffold 与本地开发服务器和数据库部署配合良好。我正在尝试处理 create-react-app前端,但行为极其缓慢且不稳定。

问题

主要问题如下:

  1. 从运行开始需要五分钟以上 skaffold dev --port-forward --tail因为它终于开始旋转了。仅运行 docker build耗时不到 30 秒。
  2. 当它最终开始旋转时,它只是位于 Starting the development server...再过两分钟。
  3. 然后,十有八九,几分钟后我会收到以下错误(有 3 个错误,因为这就是副本的数量): enter image description here

    十分之一,它实际上会进入 Compiled Successfully! You can now view in the browser.但它从未在 Chrome 中启动。

  4. create-react-app 中 JS 的更改永远不会反射(reflect)在新浏览器中。您必须停止并再次运行 Skaffold。斯卡福德确实说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 list 目录并移入其中:

    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. 返回父目录:

    cd ..

  12. 确保 minikube正在运行:

    minikube start

  13. 运行skaffold.yaml :

    skaffold dev --port-forward --tail

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

最佳答案

好的。漠视。从一个复制品开始,效果很好。两个工作得很好。如果 skaffold 已经运行,但不是来自新的 skaffold dev --port-forward --tail ,则三个可以工作。

skaffold ssh,然后执行top。 RAM 即将耗尽……利用率为 86%。将其从默认的 2GB 增加到 8GB,现在工作正常。

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

关于reactjs - create-react-app 和 Skaffold kubernetes 的行为不稳定且缓慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58384322/

相关文章:

javascript - 如何在 Next.js 中将路径名从 _document 传递到 _app

docker - chown : changing ownership of '/var/lib/mysql/' : Operation not permitted

scala - 如何在可执行文件之前将 Java_opts 传递到 dockerfile 中的入口点?

azure - Jenkins - 无法创建用户数据目录 :/var/lib/jenkins/snap/docker/: Read-only file system

kubernetes - 使用 kubectl 的用户访问

reactjs - 将规范化器与 ReduxForm 一起使用会导致表单始终脏乱

reactjs - `react-scripts build'正在使用1+ GB的RAM

javascript - 如何在 React 中删除 Ant design Tabs 组件的焦点边框?

java - HBase 1.2.1 standalone in Docker 无法连接

kubernetes - 如何更改 RKE 中的 kubelet 选项,例如 Rancher 中的 eviction-hard(nodefs.available、imagefs.available 等)?