Skaffold 快速入门指南

一、概述

1. 简介

A. 是什么

Skaffold 是一个命令行工具,用于 Kubernetes 应用的持续开发、持续集成和持续交付。它自动化构建、推送和部署流程,让开发者专注于代码而非运维操作。

B. 为什么学

  • 自动化 Kubernetes 部署流程,提高开发效率
  • 支持热重载,代码更改即时生效
  • 统一的开发、测试、部署工作流
  • 兼容多种构建工具和部署方式

C. 学完能做什么

  • 使用 Skaffold 配置 Kubernetes 应用的开发流程
  • 实现代码变更自动构建和部署
  • 集成 Skaffold 到 CI/CD 流水线
  • 使用 GitOps 工作流进行应用交付

2. 前置知识

A. 必备技能

  • 基本 Linux 命令操作
  • 了解 Kubernetes 基础概念
  • 了解 Docker 容器基础

B. 推荐知识

  • 了解 kubectl 基本用法
  • 了解 YAML 配置文件格式

二、环境准备

1. 系统要求

  • Linux、macOS 或 Windows
  • 至少 2GB 可用内存
  • 已安装 kubectl 命令行工具

2. 安装步骤

安装 Skaffold

curl -Lo skaffold https://storage.googleapis.com/skaffold/releases/latest/skaffold-linux-amd64
chmod +x skaffold
sudo mv skaffold /usr/local/bin

安装 minikube(本地 Kubernetes 集群):

curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
chmod +x minikube
sudo mv minikube /usr/local/bin

安装 kubectl

curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
chmod +x kubectl
sudo mv kubectl /usr/local/bin

3. 验证安装

skaffold version
minikube version
kubectl version --client

三、核心概念

1. 基本术语

  • skaffold.yaml:Skaffold 配置文件,定义构建、部署和测试流程
  • Builder:构建器,负责构建容器镜像(Docker、Jib、Buildpacks 等)
  • Deployer:部署器,负责部署到 Kubernetes(kubectl、Helm、kpt 等)
  • Renderer:渲染器,负责生成 Kubernetes 清单文件
  • Tester:测试器,负责运行容器测试

2. 工作原理

graph LR
    A[源代码] --> B[skaffold dev]
    B --> C{检测变更}
    C -->|代码变更| D[构建镜像]
    C -->|配置变更| E[渲染清单]
    D --> F[推送镜像]
    E --> G[部署到 K8s]
    F --> G
    G --> H[同步文件]
    H --> I[运行测试]

mermaid

Skaffold 工作原理

3. 架构图

graph TB
    subgraph 开发阶段
        A[skaffold dev] --> B[构建]
        B --> C[部署]
        C --> D[文件同步]
        D --> E[日志跟踪]
    end
    subgraph CI 阶段
        F[skaffold build] --> G[skaffold test]
    end
    subgraph CD 阶段
        H[skaffold render] --> I[skaffold apply]
        J[skaffold deploy] --> I
    end
    G --> J

mermaid

Skaffold 架构图

四、快速上手

1. 获取示例项目

# 克隆 Skaffold 仓库
git clone https://github.com/GoogleContainerTools/skaffold

# 进入示例目录
cd skaffold/examples/buildpacks-node-tutorial

2. 初始化 Skaffold 配置

# 运行初始化命令
skaffold init

初始化过程中会提示:

  1. 选择构建器(默认 Docker)
  2. 选择要创建 Kubernetes 资源的构建器
  3. 确认写入 skaffold.yaml 配置文件

3. 查看生成的配置文件

生成的 skaffold.yaml 包含:

  • build:定义如何构建容器镜像
  • manifest:定义 Kubernetes 清单文件位置
graph TD
    A[skaffold.yaml] --> B[build]
    A --> C[manifest]
    B --> D[构建器配置]
    C --> E[K8s 清单]

mermaid

配置文件结构

五、持续开发

1. 启动 minikube

# 启动 minikube
minikube start --profile custom

# 配置 Skaffold 使用本地集群
skaffold config set --global local-cluster true

# 配置 Docker 环境变量
eval $(minikube -p custom docker-env)

2. 运行开发模式

# 启动持续开发
skaffold dev

Skaffold 会自动:

  1. 构建容器镜像
  2. 部署到 Kubernetes
  3. 启动文件监听
  4. 显示应用日志

3. 访问应用

# 打开隧道
minikube tunnel -p custom

# 浏览器访问
open http://localhost:3000

4. 热重载演示

修改代码文件 src/index.js 第 10 行:

app.listen(port, () => console.log(`Example app listening on port ${port}! This is version 2.`))

Skaffold 会自动检测文件变更并重新部署。

sequenceDiagram
    participant D as 开发者
    participant S as Skaffold
    participant K as Kubernetes
    participant C as 容器

    D->>S: 修改代码
    S->>S: 检测变更
    S->>K: 重建/同步文件
    K->>C: 热重载
    C->>S: 输出日志
    S->>D: 显示结果

mermaid

热重载流程

5. 退出开发模式

按 Ctrl+C 停止,Skaffold 会自动清理部署的资源。

六、持续集成

1. 构建镜像

# 获取 Git 提交简写
export STATE=$(git rev-list -1 HEAD --abbrev-commit)

# 构建并输出到 JSON 文件
skaffold build --file-output build-$STATE.json

2. 配置测试

在 skaffold.yaml 中添加测试配置:

test:
  - image: skaffold-buildpacks-node
    custom:
      - command: echo "This is a custom test command!"

3. 运行测试

skaffold test --build-artifacts build-$STATE.json
graph LR
    A[构建产物] --> B[skaffold test]
    B --> C[容器结构测试]
    B --> D[自定义测试]
    C --> E[测试报告]
    D --> E

mermaid

测试流程

七、持续交付

1. 单步部署

# 使用构建产物直接部署
skaffold deploy -a build-$STATE.json

2. GitOps 工作流

A. 渲染清单

# 生成水合清单文件
skaffold render -a build-$STATE.json --output render.yaml --digest-source local

B. 检查清单

查看 render.yaml 文件,确认镜像标签已正确替换。

C. 应用清单

# 应用水合清单
skaffold apply render.yaml
graph TB
    A[构建产物] --> B[skaffold render]
    B --> C[render.yaml]
    C --> D{GitOps 流程}
    D -->|提交到 Git| E[代码审查]
    D -->|直接应用| F[skaffold apply]
    E --> F
    F --> G[Kubernetes 集群]

mermaid

GitOps 交付流程

八、常用命令

1. 开发命令

命令说明
skaffold init初始化配置文件
skaffold dev启动持续开发模式
skaffold run构建并部署一次
skaffold debug启动调试模式

2. 构建命令

命令说明
skaffold build仅构建镜像
skaffold test运行测试
skaffold render渲染清单文件

3. 部署命令

命令说明
skaffold deploy部署应用
skaffold apply应用清单文件
skaffold delete删除部署

九、最佳实践

1. 配置管理

  • 使用 Profile 区分不同环境
  • 利用 --profile 参数切换环境配置
  • 将敏感信息存储在 Kubernetes Secret 中

2. 构建优化

  • 使用本地缓存加速构建
  • 选择合适的构建器(Docker、Jib、Buildpacks)
  • 利用多阶段构建减小镜像体积

3. 部署策略

  • 使用健康检查确保应用就绪
  • 配置资源限制避免资源耗尽
  • 利用滚动更新实现零停机部署

十、常见问题

1. 构建失败

问题:镜像构建失败
解决

  • 检查 Dockerfile 语法
  • 确认 Docker daemon 运行正常
  • 检查网络连接和镜像仓库访问

2. 部署失败

问题:部署到 Kubernetes 失败
解决

  • 检查 kubectl 上下文配置
  • 确认集群资源充足
  • 查看 kubectl describe pod 输出

3. 文件同步不工作

问题:代码变更没有自动同步
解决

  • 确认使用支持的构建器
  • 检查文件路径配置
  • 查看日志确认同步状态

参考资料

最后修改:2026 年 01 月 18 日
如果觉得我的文章对你有用,请随意赞赏