【发布时间】:2021-12-06 05:44:17
【问题描述】:
我们正在使用 skaffold 进行 kubernetes 部署,并且不需要为每个微服务构建 docker 容器的功能,因为我们正在从我们的微服务 monorepo 构建基础 docker 映像。
现在,每个服务都有一个 dockerfile,如下所示:
FROM microservice-base-image:latest
WORKDIR <service>
CMD ["node", "."]
这带来了一个问题,即对于我们的基础镜像 skaffold 的每一次更改,都会构建并推送 n 次 docker 镜像,这是基础镜像的大小。
有没有办法告诉 skaffold 只使用我们的基础 docker 镜像,而不为每个微服务构建单独的镜像,以便我们可以调整基础镜像以通过ENTRYPOINT 启动特定索引文件?
我们已经尝试了以下方法,但 skaffold 抱怨无法拉取镜像,即使我们已登录到私有 docker 注册表。
skaffold.yaml
apiVersion: skaffold/v2alpha3
kind: Config
profiles:
- name: localhost
deploy:
kubectl:
manifests:
- ./infra/k8s/tmp/*
- name: staging
deploy:
kubectl:
manifests:
- ./infra/k8s/tmp/*
deploy:
kubectl:
manifests:
- ./infra/k8s/tmp/*
service-1-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: $CI_ENVIRONMENT_PREFIX-service-1-depl
spec:
replicas: 1
selector:
matchLabels:
app: $CI_ENVIRONMENT_PREFIX-service-1
template:
metadata:
labels:
app: $CI_ENVIRONMENT_PREFIX-service-1
spec:
imagePullSecrets:
- name: <our-private-registry-secret>
containers:
- name: $CI_ENVIRONMENT_PREFIX-service-1
image: <accountid>.dkr.ecr.eu-west-1.amazonaws.com/microservice-base-image:latest
skaffold dev 和 skaffold run --default-repo <accountid>.dkr.ecr.eu-west-1.amazonaws.com -p $CI_ENVIRONMENT_PREFIX 的 Skaffold 日志
Waiting for deployments to stabilize...
- deployment/staging-service-1-depl: container staging-service-1 is waiting to start: <accountid>.dkr.ecr.eu-west-1.amazonaws.com/microservice-base-image:latest can't be pulled
- pod/staging-service-1-6bf9b46c68-jpmnt: container staging-service-1 is waiting to start: <accountid>.dkr.ecr.eu-west-1.amazonaws.com/microservice-base-image:latest can't be pulled
- deployment/staging-service-1-depl failed. Error: container staging-service-1 is waiting to start: <accountid>.dkr.ecr.eu-west-1.amazonaws.com/microservice-base-image:latest can't be pulled.
Cleaning up...
【问题讨论】:
标签: kubernetes microservices skaffold