【发布时间】:2020-02-11 12:34:10
【问题描述】:
我让 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
这就是给我带来问题的原因。
【问题讨论】:
标签: reactjs docker kubernetes minikube skaffold