4

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

问题

主要问题如下:

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

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

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

我试过的

  1. 我真的简化了我正在尝试做的事情,以便更容易解决这个问题,所以我只使用了一个 OOTBcreate-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. 回到父目录:

    cd ..

  12. 确保minikube正在运行:

    minikube start

  13. 运行skaffold.yaml

    skaffold dev --port-forward --tail

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

4

1 回答 1

3

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

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

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

于 2019-10-15T02:05:45.307 回答