【问题标题】:kubernetes deployment failed with skaffoldKubernetes 部署因 skaffold 失败
【发布时间】:2021-11-14 00:50:59
【问题描述】:

我正在开发由 docker、kubernetes 和 skaffold 开发的微服务应用程序 这是我的 skaffold 配置文件

apiVersion: skaffold/v2alpha3
kind: Config
deploy:
  kubectl:
    manifests:
      - ./infra/k8s/*
build:
  local:
    push: false
  artifacts:
    - image: mohamedl3zb/auth
      context: auth
      docker:
        dockerfile: Dockerfile
      sync:
        manual:
          - src: "src/**/*.ts"
            dest: .
    - image: mohamedl3zb/tickets
      context: tickets
      docker:
        dockerfile: Dockerfile
      sync:
        manual:
          - src: "src/**/*.ts"
            dest: .

我收到此错误

exiting dev mode because first deploy failed: kubectl create: running [kubectl --context docker-desktop create --dry-run=client -oyaml -f C:\Users\Mohamed Salah\Desktop\ticket-app\infra\k8s\auth-depl.yaml -f C:\Users\Mohamed Salah\Desktop\ticket-app\infra\k8s\auth-mongo-depl.yaml -f C:\Users\Mohamed Salah\Desktop\ticket-app\infra\k8s\ingress-srv.yaml -f C:\Users\Mohamed Salah\Desktop\ticket-app\infra\k8s\nats-depl.yaml -f C:\Users\Mohamed Salah\Desktop\ticket-app\infra\k8s\tickets-depl.yaml -f C:\Users\Mohamed Salah\Desktop\ticket-app\infra\k8s\tickets-mongo.depl.yaml]
 - stdout: "apiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: auth-depl\n  namespace: default\nspec:\n  replicas: 1\n  selector:\n    matchLabels:\n      app: auth\n  template:\n    metadata:\n      labels:\n        app: auth\n    spec:\n      containers:\n      - env:\n        - name: MONGO_URI\n  
        value: mongodb://auth-mongo-srv:27017/auth\n        - name: JWT_KEY\n          valueFrom:\n            secretKeyRef:\n              key: JWT_KEY\n              name: jwt-secret-key\n        image: mohamedl3zb/auth\n        name: auth\n---\napiVersion: v1\nkind: Service\nmetadata:\n  name: auth-srv\n  namespace: default\nspec:\n  ports:\n  - name: auth\n    port: 3000\n    protocol: TCP\n    targetPort: 3000\n  selector:\n    app: auth\n---\napiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: auth-mongo-depl\n  namespace: default\nspec:\n  replicas: 1\n  selector:\n    matchLabels:\n      app: auth-mongo\n  template:\n    metadata:\n      labels:\n        app: auth-mongo\n    spec:\n      containers:\n      - image: mongo\n        name: auth-mongo\n---\napiVersion: v1\nkind: Service\nmetadata:\n  name: auth-mongo-srv\n  namespace: default\nspec:\n  ports:\n  - name: db\n    port: 27017\n    protocol: TCP\n    targetPort: 27017\n  selector:\n    app: auth-mongo\n---\napiVersion: extensions/v1beta1\nkind: Ingress\nmetadata:\n  annotations:\n    kubernetes.io/ingress.class: nginx\n    nginx.ingress.kubernetes.io/use-regex: \"true\"\n  name: ingress-service\n  namespace: default\nspec:\n  rules:\n  - host: ticketing.dev\n    http:\n      paths:\n      - backend:\n          serviceName: auth-srv\n          servicePort: 3000\n        path: /api/users/?(.*)\n      - backend:\n          serviceName: tickets-srv\n          servicePort: 3000\n        path: /api/tickets/?(.*)\n      - backend:\n          serviceName: orders-srv\n          servicePort: 3000\n        path: /api/orders/?(.*)\n      - backend:\n          serviceName: payments-srv\n          servicePort: 3000\n        path: /api/payments/?(.*)\n      - backend:\n          serviceName: client-srv\n          servicePort: 3000\n        path: /?(.*)\n---\napiVersion: v1\nkind: Service\nmetadata:\n  name: nats-srv\n  namespace: default\nspec:\n  ports:\n  - name: clients\n    port: 4222\n    protocol: TCP\n  
  targetPort: 4222\n  - name: monitoring\n    port: 8222\n    protocol: TCP\n    targetPort: 8222\n  selector:\n    app: nats\n---\napiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: tickets-mongo-depl\n  namespace: default\nspec:\n  replicas: 1\n  selector:\n    matchLabels:\n      app: tickets-mongo\n  template:\n    metadata:\n      labels:\n        app: tickets-mongo\n    spec:\n      containers:\n      - image: mongo\n        name: tickets-mongo\n---\napiVersion: v1\nkind: Service\nmetadata:\n  name: tickets-mongo-srv\n  namespace: default\nspec:\n  ports:\n  - name: db\n    port: 27017\n    protocol: TCP\n    targetPort: 27017\n  selector:\n    app: tickets-mongo\n"
 - stderr: "unable to recognize \"C:\\\\Users\\\\Mohamed Salah\\\\Desktop\\\\ticket-app\\\\infra\\\\k8s\\\\nats-depl.yaml\": no matches for kind \"Deplyment\" in version \"apps/v1\"\nerror validating \"C:\\\\Users\\\\Mohamed Salah\\\\Desktop\\\\ticket-app\\\\infra\\\\k8s\\\\tickets-depl.yaml\": error validating data: ValidationError(Deployment.spec.template.spec.containers[0].env[4].valueFrom): unknown field \"fielsRef\" in io.k8s.api.core.v1.EnvVarSource; if you choose to ignore these errors, turn validation off with --validate=false\n"
 - cause: exit status 1

我正在使用 docker 桌面和 kubernetes

【问题讨论】:

  • 看起来像是错字:unknown field \"fielsRef\"
  • 我已经修复了它,但仍然给我这个错误
  • 所以不固定?
  • 您的 Kubernetes 清单中似乎存在许多验证错误。免费的 Google Cloud Shell Editor (ide.cloud.google.com) 提供 Kubernetes 清单验证并与 Skaffold 集成。通过 Cloud Code (cloud.google.com/code) 扩展(也是免费的),此支持也可用于 VS Code 和 IntelliJ。

标签: docker kubernetes skaffold


【解决方案1】:

您的清单中有两个拼写错误被准入控制器拒绝。

第一个是nats-depl.yaml,其中Deployment 拼写错误。

您提到的第二个已经在评论中修复,但为了完整起见,我将在此处留下错误的相关部分:

"C:\\\\Users\\\\Mohamed Salah\\\\Desktop\\\\ticket-app\\\\infra\\\\k8s\\\\tickets-depl.yaml\": error validating data: ValidationError(Deployment.spec.template.spec.containers[0].env[4].valueFrom): unknown field \"fielsRef\" in io.k8s.api.core.v1.EnvVarSource

【讨论】:

  • 修复了它,但仍然给我同样的错误
  • 如果您仍然收到与拼写错误完全相同的错误。您可能应该仔细检查确切的错误消息,因为清单文件可能存在其他问题,这些问题会产生类似错误但输出略有不同。该消息应该非常明确地说明问题所在的位置,就像之前的错误一样。
【解决方案2】:

错误似乎是这样 “io.k8s.api.core.v1.EnvVarSource 中的未知字段“fielsRef””

【讨论】:

    猜你喜欢
    • 2020-01-10
    • 1970-01-01
    • 1970-01-01
    • 2020-08-03
    • 1970-01-01
    • 1970-01-01
    • 2021-08-11
    • 2019-10-17
    • 1970-01-01
    相关资源
    最近更新 更多