Loading... # 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**: ```bash curl -Lo skaffold https://storage.googleapis.com/skaffold/releases/latest/skaffold-linux-amd64 chmod +x skaffold sudo mv skaffold /usr/local/bin ``` **安装 minikube**(本地 Kubernetes 集群): ```bash curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 chmod +x minikube sudo mv minikube /usr/local/bin ``` **安装 kubectl**: ```bash 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. 验证安装 ```bash skaffold version minikube version kubectl version --client ``` # 三、核心概念 ## 1. 基本术语 - **skaffold.yaml**:Skaffold 配置文件,定义构建、部署和测试流程 - **Builder**:构建器,负责构建容器镜像(Docker、Jib、Buildpacks 等) - **Deployer**:部署器,负责部署到 Kubernetes(kubectl、Helm、kpt 等) - **Renderer**:渲染器,负责生成 Kubernetes 清单文件 - **Tester**:测试器,负责运行容器测试 ## 2. 工作原理 ```mermaid graph LR A[源代码] --> B[skaffold dev] B --> C{检测变更} C -->|代码变更| D[构建镜像] C -->|配置变更| E[渲染清单] D --> F[推送镜像] E --> G[部署到 K8s] F --> G G --> H[同步文件] H --> I[运行测试] ```   ## 3. 架构图 ```mermaid 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 ```   # 四、快速上手 ## 1. 获取示例项目 ```bash # 克隆 Skaffold 仓库 git clone https://github.com/GoogleContainerTools/skaffold # 进入示例目录 cd skaffold/examples/buildpacks-node-tutorial ``` ## 2. 初始化 Skaffold 配置 ```bash # 运行初始化命令 skaffold init ``` 初始化过程中会提示: 1. 选择构建器(默认 Docker) 2. 选择要创建 Kubernetes 资源的构建器 3. 确认写入 skaffold.yaml 配置文件 ## 3. 查看生成的配置文件 生成的 skaffold.yaml 包含: - **build**:定义如何构建容器镜像 - **manifest**:定义 Kubernetes 清单文件位置 ```mermaid graph TD A[skaffold.yaml] --> B[build] A --> C[manifest] B --> D[构建器配置] C --> E[K8s 清单] ```   # 五、持续开发 ## 1. 启动 minikube ```bash # 启动 minikube minikube start --profile custom # 配置 Skaffold 使用本地集群 skaffold config set --global local-cluster true # 配置 Docker 环境变量 eval $(minikube -p custom docker-env) ``` ## 2. 运行开发模式 ```bash # 启动持续开发 skaffold dev ``` Skaffold 会自动: 1. 构建容器镜像 2. 部署到 Kubernetes 3. 启动文件监听 4. 显示应用日志 ## 3. 访问应用 ```bash # 打开隧道 minikube tunnel -p custom # 浏览器访问 open http://localhost:3000 ``` ## 4. 热重载演示 修改代码文件 src/index.js 第 10 行: ```javascript app.listen(port, () => console.log(`Example app listening on port ${port}! This is version 2.`)) ``` Skaffold 会自动检测文件变更并重新部署。 ```mermaid 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: 显示结果 ```   ## 5. 退出开发模式 按 Ctrl+C 停止,Skaffold 会自动清理部署的资源。 # 六、持续集成 ## 1. 构建镜像 ```bash # 获取 Git 提交简写 export STATE=$(git rev-list -1 HEAD --abbrev-commit) # 构建并输出到 JSON 文件 skaffold build --file-output build-$STATE.json ``` ## 2. 配置测试 在 skaffold.yaml 中添加测试配置: ```yaml test: - image: skaffold-buildpacks-node custom: - command: echo "This is a custom test command!" ``` ## 3. 运行测试 ```bash skaffold test --build-artifacts build-$STATE.json ``` ```mermaid graph LR A[构建产物] --> B[skaffold test] B --> C[容器结构测试] B --> D[自定义测试] C --> E[测试报告] D --> E ```   # 七、持续交付 ## 1. 单步部署 ```bash # 使用构建产物直接部署 skaffold deploy -a build-$STATE.json ``` ## 2. GitOps 工作流 ### A. 渲染清单 ```bash # 生成水合清单文件 skaffold render -a build-$STATE.json --output render.yaml --digest-source local ``` ### B. 检查清单 查看 render.yaml 文件,确认镜像标签已正确替换。 ### C. 应用清单 ```bash # 应用水合清单 skaffold apply render.yaml ``` ```mermaid 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 集群] ```   # 八、常用命令 ## 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 日 © 允许规范转载 赞 如果觉得我的文章对你有用,请随意赞赏