docker 运行skaffold dev时从pull image更改为本地构建

bihw5rsg  于 2023-11-17  发布在  Docker
关注(0)|答案(1)|浏览(136)

bounty将在9小时后过期。回答此问题可获得+50声望奖励。TheGorgeousSeal希望引起更多关注此问题。

我正在尝试用Skaffold和K3D创建一个本地开发环境。
我的环境由多个Skaffold模块组成,每个模块都声明了一个dev profile。主skaffold.yaml由多个requires语句组成,这些语句指向多个git repo(每个repo都有自己的skaffold配置)。
为了准备集群,当我使用k3d创建集群时,我运行skaffold run -p dev
每个skaffold模块都声明了一个这样的配置文件:

profiles:
  - name: dev
    build:
      local:
        push: false
        useDockerCLI: false
      artifacts:
        - image: my-org/my-image
          docker: {}
          sync:
            infer:
              - '**/*.ts'

字符串
如果我想在一个特定的模块上开发,这个配置文件很有用,但是当我想设置整个集群时,skaffold将构建所有的镜像,而不是从仓库中提取它们。
我想要实现的是当我想在特定模块上运行skaffold dev时在本地构建,但是当我在skaffold.yaml入口点上运行skaffold run时拉取图像。
有可能做到吗?
谢谢

0s7z1bwu

0s7z1bwu1#

我想要实现的是当我想在特定模块上运行skaffold dev时在本地构建,但是当我在skaffold.yaml入口点上运行skaffold run时拉取图像。
使用Skaffold profile,就像你在本地开发的问题中所做的那样,是一个好主意,但是你也可以引入一个 * 额外的 * 配置文件,专门用于在运行主skaffold.yaml时从存储库中提取图像。
你会有:

  • 每个模块中现有的dev配置文件,配置为本地开发,允许使用特定设置(如push: false)进行本地构建。它非常适合处理单个模块。
  • 一个新的用于拉取图像的配置文件(pull-images配置文件),用于处理从存储库中拉取图像而不是在本地构建图像的特定情况。该配置文件应在每个模块的skaffold.yaml中定义。

skaffold.yaml使用requires语句来包含所有模块。
通过在运行skaffold run -p pull-images时指定pull-images配置文件,它告诉Skaffold为每个模块使用pull-images配置文件。这导致为整个集群设置拉取映像,而不是构建映像。
这将允许您区分两种情况:

  • 本地开发(skaffold dev):在处理单个模块时,使用dev配置文件在本地构建映像。
  • 集群设置(skaffold run):在设置整个集群时,使用pull-images配置文件从存储库中提取所有模块的映像。
┌──────────────────────────────┐   ┌──────────────────────────────┐
│ Individual Module Development│   │        Cluster Setup         │
└──────────────────────────────┘   └──────────────────────────────┘
            │                                        │            
            │                                        │            
            ▼                                        ▼            
┌──────────────────────────────┐   ┌──────────────────────────────┐
│       skaffold dev           │   │ skaffold run -p pull-images  │
└──────────────────────────────┘   └──────────────────────────────┘
            │                                        │            
            │                                        │            
            ▼                                        ▼            
┌──────────────────────────────┐   ┌──────────────────────────────┐
│          dev profile         │   │       pull-images profile    │
│      (Build Locally)         │   │    (Pull from Repository)    │
└──────────────────────────────┘   └──────────────────────────────┘

字符串
您的模块Skaffold配置将是:

profiles:
  - name: dev
    # Your existing dev profile configuration
  - name: pull-images
    build:
      artifacts:
        - image: my-org/my-image
          docker:
            buildArgs:
              PULL_IMAGE: "true"


在您的主skaffold.yaml中:

requires:
  - path: ./path-to-module
    profiles: [pull-images]


将这些更改应用到示例模块的skaffold.yaml

profiles:
  - name: dev
    build:
      local:
        push: false
        useDockerCLI: false
      artifacts:
        - image: my-org/my-image
          docker: {}
          sync:
            infer:
              - '**/*.ts'
  - name: pull-images
    build:
      artifacts:
        - image: my-org/my-image
          docker:
            buildArgs:
              PULL_IMAGE: "true"

相关问题