首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Skaffold 1.4.0:“由于同步错误而跳过部署:复制文件:”

Skaffold 1.4.0:“由于同步错误而跳过部署:复制文件:”
EN

Stack Overflow用户
提问于 2020-03-03 16:29:01
回答 2查看 887关注 0票数 3

使用:

  • Skaffold 1.4.0
  • minikube 1.6.2
  • kubectl: client 1.15.5和服务器1.17.0
  • Django 3.0.3
  • Python3.8.2H 210F 211

我最近刚开始收到这个错误,因为我正在处理Django API。任何时候,我做了改变后,我都会得到一个:

代码语言:javascript
复制
WARN[0234] Skipping deploy due to sync error: copying files: Running [kubectl --context minikube exec api-deployment-6946878554-n7lc2 --namespace default -c api -i -- tar xmf - -C / --no-same-owner]
 - stdout: 
 - stderr: error: unable to upgrade connection: container not found ("api")
: exit status 1 

不知道是什么改变导致了这一切。我必须做一个CTRL + C来关闭Skaffold并重新启动它以使更改得到反映。

这是我的skaffold.yaml

代码语言:javascript
复制
apiVersion: skaffold/v1beta15
kind: Config
build:
  local:
    push: false
  artifacts:
    - image: postgres
      context: postgres
      docker:
        dockerfile: Dockerfile.dev
      sync:
        manual:
          - src: "***/*.sql"
            dest: .
    - image: testappacr.azurecr.io/test-app-api
      context: api
      docker:
        dockerfile: Dockerfile.dev
      sync:
        manual:
          - src: "***/*.py"
            dest: .
deploy:
  kubectl:
    manifests:
      - manifests/dev-ingress.yaml 
      - manifests/postgres.yaml
      - manifests/api.yaml

也是api.yaml

代码语言:javascript
复制
apiVersion: apps/v1
kind: Deployment
metadata:
  name: api-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      component: api
  template:
    metadata:
      labels:
        component: api
    spec:
      containers:
        - name: api
          image: testappacr.azurecr.io/test-app-api
          ports:
            - containerPort: 5000
          env:
            - name: PGUSER
              valueFrom:
                secretKeyRef:
                  name: test-app-secrets
                  key: PGUSER
            - name: PGHOST
              value: postgres-cluster-ip-service
            - name: PGPORT
              value: "1423"
            - name: PGDATABASE
              valueFrom:
                secretKeyRef:
                  name: test-app-secrets
                  key: PGDATABASE
            - name: PGPASSWORD
              valueFrom:
                secretKeyRef:
                  name: test-app-secrets
                  key: PGPASSWORD
            - name: SECRET_KEY
              valueFrom:
                secretKeyRef:
                  name: test-app-secrets
                  key: SECRET_KEY
            - name: DEBUG
              valueFrom:
                secretKeyRef:
                  name: test-app-secrets
                  key: DEBUG
          livenessProbe:
            tcpSocket:
              port: 5000
            initialDelaySeconds: 2
            periodSeconds: 2
          readinessProbe:
            tcpSocket:
              port: 5000
            initialDelaySeconds: 2
            periodSeconds: 2
          volumeMounts:
          - mountPath: "/mnt/test-app"
            name: file-storage
      volumes:
        - name: file-storage
          persistentVolumeClaim:
            claimName: file-storage
---
apiVersion: v1
kind: Service
metadata:
  name: api-cluster-ip-service
spec:
  type: ClusterIP
  selector:
    component: api
  ports:
    - port: 5000
      targetPort: 5000

对这里可能发生的事有什么建议吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-03-13 15:35:57

发现这个问题是由我的readinessProbelivenessProbeapi.yaml中引起的。

代码语言:javascript
复制
          livenessProbe:
            tcpSocket:
              port: 5000
            initialDelaySeconds: 2
            periodSeconds: 2
          readinessProbe:
            tcpSocket:
              port: 5000
            initialDelaySeconds: 2
            periodSeconds: 2

现在我不明白这个错误了。

但是,我之所以让它们出现在那里,首先是因为skaffold有时会在API之后启动数据库,导致它失败。在我的例子中,这就是权衡:如果没有probes,DB偶尔会在API之后启动,导致失败或出现故障,并且更频繁地导致与此问题相关的错误。

票数 2
EN

Stack Overflow用户

发布于 2021-08-08 16:12:15

对于对Kubernetes完全陌生的其他人,请注意此错误可能只是因为服务器脚本/进程在尝试skaffold-sync命令之前完成;kubernetes将进程的结束解释为失败,因此关闭容器(或至少关闭容器,使skaffold无法调用它应用文件同步)。

更多信息在这里:How can I keep a container running on Kubernetes?

因此,解决方案是“让进程保持活力”,让它运行一个睡眠和日志循环或什么的。即使它没有真正的工作要做,例如。如果您只是编写了一个记录和退出的测试脚本)

NodeJS示例:

代码语言:javascript
复制
console.log("Test server-script started!");

// loop forever, to keep process alive, so kubernetes doesn't kill the container, so skaffold-sync can work
while (true) {
    console.log("Keep-alive loop. Time:", Date.now());
    await new Promise(resolve=>setTimeout(resolve, 1000));
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60511645

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档