【问题标题】:skaffold using external docker image without build使用外部 docker 映像的 skaffold 无需构建
【发布时间】: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 devskaffold run --default-repo &lt;accountid&gt;.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


    【解决方案1】:

    Skaffold 仅对其构建的图像进行图像替换。您的skaffold.yaml 中没有配置图像,因此不会发生图像替换。

    Skaffold 确实提供了表达图像之间的依赖关系,因此您可以说one image requires another image as a base image

    除了构建 N 个只设置 WORKDIR 的微服务映像之外,您还可以只使用基本映像作为唯一映像并在 Kubernetes 清单中设置 container.workingDir 来决定应该使用哪个微服务。

    也就是说,您当前的图像设置有一个缺点,即单个微服务的更改将需要重新部署您的所有微服务。让每个映像仅包含其直接要求意味着仅重新部署更改的映像,从而加快重新部署速度。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-24
      • 1970-01-01
      • 2020-05-21
      • 2020-11-02
      • 2021-03-17
      • 2021-10-17
      • 1970-01-01
      相关资源
      最近更新 更多