docker - 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
解决方案
你的清单中有两个错别字被准入控制器拒绝。
首先是拼写错误的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
推荐阅读
- automation - Ansible 不正确的行为与 when
- c - 如果 FLT_HAS_SUBNORM 为 -1,那么 1.0f / FLT_MAX 是否会产生次正规数或导致未定义行为(UB)?
- oracle - DBMS_RLS.add_policy:object_name 不工作
- php - WooCommerce - 添加到购物车时忽略未选择的变体
- r - 在 R 中的 ggplot2 中添加渐变
- jenkins - Jenkins 没有读取启动配置,https 和 jenkins 的问题
- continuous-integration - 如何使用 GitLab 作为本地构建和部署工具?
- mysql - 如果数据存在于第一个表中,如何从第二个表中获取价格?
- php - 在 mpdf 中导入 css 的样式内容
- excel - 无法在 Onedrive 位置添加和保存新工作簿