我让 Skaffold 与本地开发服务器和数据库部署配合得很好。我正在尝试在create-react-app
前端工作,但这种行为非常缓慢且不稳定。
问题
主要问题如下:
- 从运行开始需要超过五分钟
skaffold dev --port-forward --tail
,它最终开始旋转。运行只需docker build
不到 30 秒。 - 当它最终开始旋转时,它又
Starting the development server...
静置了两分钟。 然后,十分之九,几分钟后我得到以下错误(有三个,因为那是有多少副本):
十分之一的时候,它实际上会进入
Compiled Successfully! You can now view in the browser.
它永远不会在 Chrome 中启动。- create-react-app 中对 JS 的更改永远不会反映在新浏览器中。您必须停止并再次运行 Skaffold。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 清单目录并进入其中:
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
这就是给我带来问题的原因。