首页 > 解决方案 > Kubernetes 部署因 skaffold 失败

问题描述

我正在开发 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 desktop 和 kubernetes

标签: dockerkubernetesskaffold

解决方案


你的清单中有两个错别字被准入控制器拒绝。

首先是拼写错误的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


推荐阅读