我正在尝试使用 Skaffold 和 k3d 创建本地开发环境。
我的环境由多个 Skaffold 模块组成,每个模块都声明一个开发配置文件。主要
skaffold.yaml
由多个 require 语句组成,这些语句指向多个 git 存储库(每个存储库都有自己的 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 run
入口点运行 skaffold.yaml
时提取图像。
可以这样做吗?
谢谢
我想要实现的是当我想在特定模块上运行
时在本地构建,但当我针对我的skaffold dev
入口点运行skaffold run
时提取图像。skaffold.yaml
使用 Skaffold 配置文件,就像您在本地开发问题中所做的那样,是一个好主意,但是您也可以引入一个 additional 配置文件,专门用于在运行主
skaffold.yaml
时从存储库中提取图像。
你会:
dev
配置文件,配置为本地开发,允许使用 push: false
等特定设置进行本地构建。它非常适合处理单个模块。pull-images
配置文件),引入用于处理您想要从存储库拉取图像而不是在本地构建图像的特定情况。该配置文件应在每个模块的 skaffold.yaml
中定义。主要
skaffold.yaml
使用 requires
语句 来包含所有模块。pull-images
时指定 skaffold run -p 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"