使用create-react-app和Skaffold kubernetes的行为和缓慢行为

问题描述 投票:2回答:1

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

我尝试过的事情

  1. 我确实简化了我要做的工作,以使其更容易解决,所以我只使用了OOTB create-react-app应用程序。无论如何,行为都是相同的。
  2. minikube deleteminikube start多次(这样做是因为甚至在尝试create-react-app之后服务器部署也开始出现异常行为)

代码和复制步骤

我正在使用Mac的Docker,kubernetes(v1.16.0),minikube(v1.4.0),Skaffold(v0.39.0)和create-react-app的macOS Mojave(10.14.6)。由于这相当冗长,因此我将不得不跳过所有这些安装过程,因此以下步骤假定您已经进行了设置。

  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

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

reactjs docker kubernetes minikube skaffold
1个回答
0
投票

好漠视。从一个副本开始,效果很好。两个工作正常。如果skaffold已经在运行,则三个可以工作,但不是从新的skaffold dev --port-forward --tail开始。

skaffold ssh,然后进行了top。内存用完了……利用率高达86%。将其从默认的2GB增加到8GB,现在可以正常使用。

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

© www.soinside.com 2019 - 2024. All rights reserved.