2

几个月来一直工作正常,两天前就辞职了。不记得更改.yamls.

基本上,当我启动时create-react-appcreate-react-app客户端只是启动、失败并重新启动。

我试过了:

  • 在工作时恢复到以前的提交
  • 降级/升级skaffold
  • 降级/升级minikube
  • 降级/升级kubectl
  • 测试 Ubuntu 19.10、macOS 10.15.3 和 Windows 10 (WSL2),问题仍然存在

这似乎是一个问题,skaffold因为create-react-app以下仍然可以正常工作:

  • 和pod 仍然可以正常启动和api运行postgres
  • 以下工作正常,对我来说,这表明这不是create-react-app问题:
cd client
npm install
npm start
  • 以下也正常工作,对我来说,这表明这不是docker问题:
cd client
docker build -f Dockerfile.dev .
docker run -it -p 3000:3000 <image_id>
  • 我认为这不是 Kubernetes 问题。我推送到我的暂存分支,触发暂存 CI/CD 管道,通过构建和部署,它在我的暂存 URL 上正常运行。

这就是我的配置:

# client.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: client-deployment-dev
spec:
  replicas: 1
  selector:
    matchLabels:
      component: client
  template:
    metadata:
      labels:
        component: client
    spec:
      containers:
        - name: client
          image: client
          ports:
            - containerPort: 3000
---
apiVersion: v1
kind: Service
metadata:
  name: client-cluster-ip-service-dev
spec:
  type: ClusterIP
  selector:
    component: client
  ports:
    - port: 3000
      targetPort: 3000
#skaffold.yaml

apiVersion: skaffold/v1beta15
kind: Config
build:
  local:
    push: false
  artifacts:
    - image: client
      context: client
      docker:
        dockerfile: Dockerfile.dev
      sync:
        manual:
          - src: "***/*.js"
            dest: .
          - src: "***/*.jsx"
            dest: .
          - src: "***/*.json"
            dest: .
          - src: "***/*.html"
            dest: .
          - src: "***/*.css"
            dest: .
          - src: "***/*.scss"
            dest: .
deploy:
  kubectl:
    manifests:
      - manifests/dev/client.yaml
# Dockerfile.dev

FROM node:13-alpine
WORKDIR /app
COPY ./package.json ./
RUN npm install
COPY . .
CMD ["npm", "start"]

-v DEBUG日志:

 $ skaffold dev -v DEBUG
INFO[0000] starting gRPC server on port 50051           
INFO[0000] starting gRPC HTTP server on port 50052      
INFO[0000] Skaffold &{Version:v1.6.0-docs ConfigVersion:skaffold/v2beta1 GitVersion: GitCommit:b74e2f94f628b16a866abddc2ba8f05ce0bf956c GitTreeState:clean BuildDate:2020-03-25T00:09:12Z GoVersion:go1.14 Compiler:gc Platform:linux/amd64} 
DEBU[0000] config version (skaffold/v1beta15) out of date: upgrading to latest (skaffold/v2beta1) 
DEBU[0000] validating yamltags of struct SkaffoldConfig 
DEBU[0000] validating yamltags of struct Metadata       
DEBU[0000] validating yamltags of struct Pipeline       
DEBU[0000] validating yamltags of struct BuildConfig    
DEBU[0000] validating yamltags of struct Artifact       
DEBU[0000] validating yamltags of struct Sync           
DEBU[0000] validating yamltags of struct SyncRule       
DEBU[0000] validating yamltags of struct SyncRule       
DEBU[0000] validating yamltags of struct SyncRule       
DEBU[0000] validating yamltags of struct SyncRule       
DEBU[0000] validating yamltags of struct SyncRule       
DEBU[0000] validating yamltags of struct SyncRule       
DEBU[0000] validating yamltags of struct ArtifactType   
DEBU[0000] validating yamltags of struct DockerArtifact 
DEBU[0000] validating yamltags of struct TagPolicy      
DEBU[0000] validating yamltags of struct GitTagger      
DEBU[0000] validating yamltags of struct BuildType      
DEBU[0000] validating yamltags of struct LocalBuild     
DEBU[0000] validating yamltags of struct DeployConfig   
DEBU[0000] validating yamltags of struct DeployType     
DEBU[0000] validating yamltags of struct KubectlDeploy  
DEBU[0000] validating yamltags of struct KubectlFlags   
INFO[0000] Using kubectl context: minikube              
DEBU[0000] Using builder: local                         
DEBU[0000] Running command: [minikube docker-env --shell none] 
DEBU[0000] Command output: [DOCKER_TLS_VERIFY=1
DOCKER_HOST=tcp://192.168.39.184:2376
DOCKER_CERT_PATH=/home/eoxdev/.minikube/certs
MINIKUBE_ACTIVE_DOCKERD=minikube
] 
DEBU[0000] setting Docker user agent to skaffold-v1.6.0-docs 
Listing files to watch...
 - client
DEBU[0000] Found dependencies for dockerfile: [{package.json /app true} {. /app true}] 
DEBU[0000] Skipping excluded path: node_modules         
INFO[0000] List generated in 1.684217ms                 
Generating tags...
 - client -> DEBU[0000] Running command: [git describe --tags --always] 
DEBU[0000] Command output: [3403aa6
]                   
DEBU[0000] Running command: [git status . --porcelain]  
DEBU[0000] Command output: []                           
client:3403aa6
INFO[0000] Tags generated in 3.085635ms                 
Checking cache...
DEBU[0000] Found dependencies for dockerfile: [{package.json /app true} {. /app true}] 
DEBU[0000] Skipping excluded path: node_modules         
 - client: Found Locally
INFO[0000] Cache check complete in 6.098469ms           
Tags used in deployment:
 - client -> client:1319b715976becb303bd077717e754e52beaef72d44c7b09f5b6835b1afacae2
   local images can't be referenced by digest. They are tagged and referenced by a unique ID instead
Starting deploy...
DEBU[0000] Running command: [kubectl version --client -ojson] 
DEBU[0000] Command output: [{
  "clientVersion": {
    "major": "1",
    "minor": "18",
    "gitVersion": "v1.18.0",
    "gitCommit": "9e991415386e4cf155a24b1da15becaa390438d8",
    "gitTreeState": "clean",
    "buildDate": "2020-03-25T14:58:59Z",
    "goVersion": "go1.13.8",
    "compiler": "gc",
    "platform": "linux/amd64"
  }
}
] 
DEBU[0000] Running command: [kubectl --context minikube create --dry-run -oyaml -f /home/eoxdev/Projects/issues/skaffold-cra-error/manifests/dev/client.yaml] 
DEBU[0000] Command output: [apiVersion: apps/v1
kind: Deployment
metadata:
  name: client-deployment-dev
  namespace: default
spec:
  replicas: 1
  selector:
    matchLabels:
      component: client
  template:
    metadata:
      labels:
        component: client
    spec:
      containers:
      - image: client
        name: client
        ports:
        - containerPort: 3000
---
apiVersion: v1
kind: Service
metadata:
  name: client-cluster-ip-service-dev
  namespace: default
spec:
  ports:
  - port: 3000
    targetPort: 3000
  selector:
    component: client
  type: ClusterIP
], stderr: W0327 08:49:50.543847   16516 helpers.go:535] --dry-run is deprecated and can be replaced with --dry-run=client. 
DEBU[0000] manifests with tagged images: apiVersion: apps/v1
kind: Deployment
metadata:
  name: client-deployment-dev
  namespace: default
spec:
  replicas: 1
  selector:
    matchLabels:
      component: client
  template:
    metadata:
      labels:
        component: client
    spec:
      containers:
      - image: client:1319b715976becb303bd077717e754e52beaef72d44c7b09f5b6835b1afacae2
        name: client
        ports:
        - containerPort: 3000
---
apiVersion: v1
kind: Service
metadata:
  name: client-cluster-ip-service-dev
  namespace: default
spec:
  ports:
  - port: 3000
    targetPort: 3000
  selector:
    component: client
  type: ClusterIP 
DEBU[0000] manifests with labels apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app.kubernetes.io/managed-by: skaffold-v1.6.0-docs
    skaffold.dev/builder: local
    skaffold.dev/cleanup: "true"
    skaffold.dev/deployer: kubectl
    skaffold.dev/docker-api-version: "1.40"
    skaffold.dev/run-id: 2ee04f07-3f07-4e75-bdba-dfac76d18bf0
    skaffold.dev/tag-policy: git-commit
    skaffold.dev/tail: "true"
  name: client-deployment-dev
  namespace: default
spec:
  replicas: 1
  selector:
    matchLabels:
      component: client
  template:
    metadata:
      labels:
        app.kubernetes.io/managed-by: skaffold-v1.6.0-docs
        component: client
        skaffold.dev/builder: local
        skaffold.dev/cleanup: "true"
        skaffold.dev/deployer: kubectl
        skaffold.dev/docker-api-version: "1.40"
        skaffold.dev/run-id: 2ee04f07-3f07-4e75-bdba-dfac76d18bf0
        skaffold.dev/tag-policy: git-commit
        skaffold.dev/tail: "true"
    spec:
      containers:
      - image: client:1319b715976becb303bd077717e754e52beaef72d44c7b09f5b6835b1afacae2
        name: client
        ports:
        - containerPort: 3000
---
apiVersion: v1
kind: Service
metadata:
  labels:
    app.kubernetes.io/managed-by: skaffold-v1.6.0-docs
    skaffold.dev/builder: local
    skaffold.dev/cleanup: "true"
    skaffold.dev/deployer: kubectl
    skaffold.dev/docker-api-version: "1.40"
    skaffold.dev/run-id: 2ee04f07-3f07-4e75-bdba-dfac76d18bf0
    skaffold.dev/tag-policy: git-commit
    skaffold.dev/tail: "true"
  name: client-cluster-ip-service-dev
  namespace: default
spec:
  ports:
  - port: 3000
    targetPort: 3000
  selector:
    component: client
  type: ClusterIP 
DEBU[0000] 2 manifests to deploy. 2 are updated or new  
DEBU[0000] Running command: [kubectl --context minikube apply -f - --force --grace-period=0] 
 - deployment.apps/client-deployment-dev created
 - service/client-cluster-ip-service-dev created
INFO[0000] Deploy complete in 391.276171ms              
Waiting for deployments to stabilize
DEBU[0000] getting client config for kubeContext: ``    
DEBU[0000] checking status default:deployment/client-deployment-dev 
DEBU[0000] Running command: [kubectl --context minikube rollout status deployment client-deployment-dev --namespace default --watch=false] 
DEBU[0000] Command output: [Waiting for deployment "client-deployment-dev" rollout to finish: 0 of 1 updated replicas are available...
] 
DEBU[0001] Running command: [kubectl --context minikube rollout status deployment client-deployment-dev --namespace default --watch=false] 
 - default:deployment/client-deployment-dev Waiting for deployment "client-deployment-dev" rollout to finish: 0 of 1 updated replicas are available...
DEBU[0001] Command output: [Waiting for deployment "client-deployment-dev" rollout to finish: 0 of 1 updated replicas are available...
] 
DEBU[0001] Running command: [kubectl --context minikube rollout status deployment client-deployment-dev --namespace default --watch=false] 
DEBU[0001] Command output: [Waiting for deployment "client-deployment-dev" rollout to finish: 0 of 1 updated replicas are available...
] 
DEBU[0001] Running command: [kubectl --context minikube rollout status deployment client-deployment-dev --namespace default --watch=false] 
DEBU[0001] Command output: [Waiting for deployment "client-deployment-dev" rollout to finish: 0 of 1 updated replicas are available...
] 
DEBU[0001] Running command: [kubectl --context minikube rollout status deployment client-deployment-dev --namespace default --watch=false] 
DEBU[0001] Command output: [Waiting for deployment "client-deployment-dev" rollout to finish: 0 of 1 updated replicas are available...
] 
DEBU[0002] Running command: [kubectl --context minikube rollout status deployment client-deployment-dev --namespace default --watch=false] 
DEBU[0002] Command output: [Waiting for deployment "client-deployment-dev" rollout to finish: 0 of 1 updated replicas are available...
] 
DEBU[0002] Running command: [kubectl --context minikube rollout status deployment client-deployment-dev --namespace default --watch=false] 
DEBU[0002] Command output: [deployment "client-deployment-dev" successfully rolled out
] 
 - default:deployment/client-deployment-dev is ready.
Deployments stabilized in 1.818029816s
DEBU[0002] getting client config for kubeContext: ``    
INFO[0002] Streaming logs from pod: client-deployment-dev-58bdbf5664-fcc7k container: client 
DEBU[0002] Running command: [kubectl --context minikube logs --since=3s -f client-deployment-dev-58bdbf5664-fcc7k -c client --namespace default] 
[client-deployment-dev-58bdbf5664-fcc7k client] 
[client-deployment-dev-58bdbf5664-fcc7k client] > client@0.1.0 start /app
[client-deployment-dev-58bdbf5664-fcc7k client] > react-scripts start
[client-deployment-dev-58bdbf5664-fcc7k client] 
DEBU[0002] Found dependencies for dockerfile: [{package.json /app true} {. /app true}] 
DEBU[0002] Change detected <nil>                        
DEBU[0002] Skipping excluded path: node_modules         
Watching for changes...
[client-deployment-dev-58bdbf5664-fcc7k client] ℹ 「wds」: Project is running at http://172.17.0.8/
[client-deployment-dev-58bdbf5664-fcc7k client] ℹ 「wds」: webpack output is served from 
[client-deployment-dev-58bdbf5664-fcc7k client] ℹ 「wds」: Content not from webpack is served from /app/public
[client-deployment-dev-58bdbf5664-fcc7k client] ℹ 「wds」: 404s will fallback to /
[client-deployment-dev-58bdbf5664-fcc7k client] Starting the development server...
[client-deployment-dev-58bdbf5664-fcc7k client] 
DEBU[0003] Found dependencies for dockerfile: [{package.json /app true} {. /app true}] 
DEBU[0003] Skipping excluded path: node_modules         
INFO[0004] Streaming logs from pod: client-deployment-dev-58bdbf5664-fcc7k container: client 
DEBU[0004] Running command: [kubectl --context minikube logs --since=4s -f client-deployment-dev-58bdbf5664-fcc7k -c client --namespace default] 
[client-deployment-dev-58bdbf5664-fcc7k client] 
[client-deployment-dev-58bdbf5664-fcc7k client] > client@0.1.0 start /app
[client-deployment-dev-58bdbf5664-fcc7k client] > react-scripts start
[client-deployment-dev-58bdbf5664-fcc7k client] 
[client-deployment-dev-58bdbf5664-fcc7k client] ℹ 「wds」: Project is running at http://172.17.0.8/
[client-deployment-dev-58bdbf5664-fcc7k client] ℹ 「wds」: webpack output is served from 
[client-deployment-dev-58bdbf5664-fcc7k client] ℹ 「wds」: Content not from webpack is served from /app/public
[client-deployment-dev-58bdbf5664-fcc7k client] ℹ 「wds」: 404s will fallback to /
[client-deployment-dev-58bdbf5664-fcc7k client] Starting the development server...
[client-deployment-dev-58bdbf5664-fcc7k client] 
INFO[0019] Streaming logs from pod: client-deployment-dev-58bdbf5664-fcc7k container: client 
DEBU[0019] Running command: [kubectl --context minikube logs --since=20s -f client-deployment-dev-58bdbf5664-fcc7k -c client --namespace default] 
[client-deployment-dev-58bdbf5664-fcc7k client] 
[client-deployment-dev-58bdbf5664-fcc7k client] > client@0.1.0 start /app
[client-deployment-dev-58bdbf5664-fcc7k client] > react-scripts start
[client-deployment-dev-58bdbf5664-fcc7k client] 
[client-deployment-dev-58bdbf5664-fcc7k client] ℹ 「wds」: Project is running at http://172.17.0.8/
[client-deployment-dev-58bdbf5664-fcc7k client] ℹ 「wds」: webpack output is served from 
[client-deployment-dev-58bdbf5664-fcc7k client] ℹ 「wds」: Content not from webpack is served from /app/public
[client-deployment-dev-58bdbf5664-fcc7k client] ℹ 「wds」: 404s will fallback to /
[client-deployment-dev-58bdbf5664-fcc7k client] Starting the development server...
[client-deployment-dev-58bdbf5664-fcc7k client] 
^CCleaning up...
DEBU[0021] Running command: [kubectl --context minikube create --dry-run -oyaml -f /home/eoxdev/Projects/issues/skaffold-cra-error/manifests/dev/client.yaml] 
DEBU[0021] Command output: [apiVersion: apps/v1
kind: Deployment
metadata:
  name: client-deployment-dev
  namespace: default
spec:
  replicas: 1
  selector:
    matchLabels:
      component: client
  template:
    metadata:
      labels:
        component: client
    spec:
      containers:
      - image: client
        name: client
        ports:
        - containerPort: 3000
---
apiVersion: v1
kind: Service
metadata:
  name: client-cluster-ip-service-dev
  namespace: default
spec:
  ports:
  - port: 3000
    targetPort: 3000
  selector:
    component: client
  type: ClusterIP
], stderr: W0327 08:50:11.709935   16770 helpers.go:535] --dry-run is deprecated and can be replaced with --dry-run=client. 
DEBU[0021] Running command: [kubectl --context minikube delete --ignore-not-found=true -f -] 
 - deployment.apps "client-deployment-dev" deleted
 - service "client-cluster-ip-service-dev" deleted
INFO[0021] Cleanup complete in 187.851194ms  

我在这里有一个测试仓库,如果您愿意,可以尝试:

https://github.com/eox-dev/skaffold-cra-error

希望这是我忽略的事情,但就像我说过的那样,我已经将应用程序恢复到我知道它正在工作并且问题仍然存在的时候。

编辑 4/1v1.6.0-docs当我在发行说明 中读到这个时,我充满希望:

注意:此版本附带一个新的配置版本v2beta1。要升级您的skaffold.yaml,请使用skaffold fix. 如果您选择不升级,skaffold将尽可能自动升级。

但是,仍然有同样的问题。

4

2 回答 2

7

这是由于facebook/create-react-app的变化,特别是#8739#8688。如果您在没有分配 TTY 的情况下运行,您会注意到您的容器会立即从 docker 中退出:

$ docker run --rm client; echo ">> $?"

> client@0.1.0 start /app
> react-scripts start

ℹ 「wds」: Project is running at http://172.17.0.4/
ℹ 「wds」: webpack output is served from 
ℹ 「wds」: Content not from webpack is served from /app/public
ℹ 「wds」: 404s will fallback to /
Starting the development server...

>> 0

有一个解决方法发布到这个问题,CI=true在你的 Dockerfile 中设置:

--- client/Dockerfile.dev
+++ client/Dockerfile.dev
@@ -1,6 +1,7 @@
 FROM node:13-alpine
 WORKDIR /app
 COPY ./package.json ./
+ENV CI=true
 RUN npm install
 COPY . .
于 2020-04-11T15:41:37.860 回答
3
    $ docker run --rm client; echo ">> $?"

> client@0.1.0 start /app
> react-scripts start

ℹ 「wds」: Project is running at http://172.17.0.4/
ℹ 「wds」: webpack output is served from 
ℹ 「wds」: Content not from webpack is served from /app/public
ℹ 「wds」: 404s will fallback to /
Starting the development server...

>> 0

然后这个

--- client/Dockerfile.dev
+++ client/Dockerfile.dev
@@ -1,6 +1,7 @@
 FROM node:13-alpine
 WORKDIR /app
 COPY ./package.json ./
+ENV CI=true
 RUN npm install
 COPY . .
于 2020-04-11T15:44:20.223 回答