我的 Skaffold 与本地开发服务器和数据库部署配合良好。我正在尝试处理 create-react-app
前端,但行为极其缓慢且不稳定。
问题
主要问题如下:
- 从运行开始需要五分钟以上
skaffold dev --port-forward --tail
因为它终于开始旋转了。仅运行docker build
耗时不到 30 秒。 - 当它最终开始旋转时,它只是位于
Starting the development server...
再过两分钟。 然后,十有八九,几分钟后我会收到以下错误(有 3 个错误,因为这就是副本的数量):
十分之一,它实际上会进入
Compiled Successfully! You can now view in the browser.
但它从未在 Chrome 中启动。- create-react-app 中 JS 的更改永远不会反射(reflect)在新浏览器中。您必须停止并再次运行 Skaffold。斯卡福德确实说
Syncing 1 files for <image>... Watching for changes...
,但即使刷新后也没有任何变化。
我尝试过的
- 我确实简化了我想要做的事情,以便更轻松地解决这个问题,所以我只使用 OOTB
create-react-app
应用。无论如何,行为都是一样的。 -
minikube delete
和minikube 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
。我将不得不跳过所有这些的安装过程,因为它相当冗长,因此以下步骤假设您已经完成了设置。
创建项目目录:
mkdir project
创建 Kubernetes list 目录并移入其中:
mkdir k8s && cd k8s
创建
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
创建
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
移回父级:
cd ..
创建
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
开始一个新的
create-react-app
项目:npx create-react-app test-app
更改目录:
cd test-app
创建
Dockerfile.dev
并添加以下内容:FROM node:alpine WORKDIR '/app' EXPOSE 3000 CMD ["npm", "run", "start"] COPY package* ./ RUN npm install COPY . .
创建
.dockerignore
文件并添加以下内容:node_modules *.swp
返回父目录:
cd ..
确保
minikube
正在运行:minikube start
运行
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/