skaffold从入门到放弃
scofield 菜鸟运维杂谈
简介
Skaffold是一个命令行工具,可促进Kubernetes应用程序的持续开发。你可以在本地迭代应用程序源代码,然后部署到本地或远程Kubernetes集群。Skaffold处理构建,推送和部署应用程序的工作流程。还提供了构建块并描述了CI / CD管道的自定义项。
架构示意图
该架构允许您将Skaffold与您喜欢的工具一起使用。 Skaffold为以下工具提供内置支持:
- 构建
- 本地Dockerfile,与kaniko集成在集群中
- 使用Jib Maven and Jib Gradle构建
- 本地使用Bazel
- 使用Cloud Native Buildpacks locally 或者 Google Cloud Build
- 使用本地或群集中的自定义脚本构建
- 测试
- container-structure-test
- **Tag方 **
- Git tagger
- Sha256 tagger
- Env Template tagger
- DateTime tagger
- 部署方式
- kubectl
- Helm
- kustomize
使用前提
已经安装好以下
minikube或者kubernetes集群
Skaffold
kubectl
开始实战
克隆skaffold项目到本地
git clone https://github.com/GoogleContainerTools/skaffold
cd skaffold/examples/getting-started
运行skaffold dev以连续构建和部署你的应用程序。输出信息如下:
Listing files to watch...
- skaffold-example
Generating tags...
- skaffold-example -> skaffold-example:v1.1.0-113-g4649f2c16
Checking cache...
- skaffold-example: Not found. Building
Found [docker-desktop] context, using local docker daemon.
Building [skaffold-example]...
Sending build context to Docker daemon 3.072kB
Step 1/6 : FROM golang:1.12.9-alpine3.10 as builder
---> e0d646523991
Step 2/6 : COPY main.go .
---> Using cache
---> e4788ffa88e7
Step 3/6 : RUN go build -o /app main.go
---> Using cache
---> 686396d9e9cc
Step 4/6 : FROM alpine:3.10
---> 965ea09ff2eb
Step 5/6 : CMD ["./app"]
---> Using cache
---> be0603b9d79e
Step 6/6 : COPY --from=builder /app .
---> Using cache
---> c827aa5a4b12
Successfully built c827aa5a4b12
Successfully tagged skaffold-example:v1.1.0-113-g4649f2c16
Tags used in deployment:
- skaffold-example -> skaffold-example:c827aa5a4b12e707163842b803d666eda11b8ec20c7a480198960cfdcb251042
local images can't be referenced by digest. They are tagged and referenced by a unique ID instead
Starting deploy...
- pod/getting-started created
Watching for changes...
[getting-started] Hello world!
[getting-started] Hello world!
[getting-started] Hello world!
从输出可以看到,项目已经成功运行了。
说明
现在我们进去到examples/getting-started目录下,看看这个项目都有什么文件
scofield@MacBook-Pro getting-started % ls -al
-rw-r--r-- 1 scofield staff 383 7 15 2020 Dockerfile
-rw-r--r-- 1 scofield staff 296 7 15 2020 README.md
-rw-r--r-- 1 scofield staff 156 7 15 2020 k8s-pod.yaml
-rw-r--r-- 1 scofield staff 128 7 15 2020 main.go
-rw-r--r-- 1 scofield staff 231 7 17 2020 skaffold.yaml
这里可以看出,除了main.go是真正的代码文件以外,其他几个文件都是分别是
- Dockerfile构建镜像必须的文件
- k8s-pod.yaml部署到kubernetes集群的文件
- skaffold.yaml skaffold必备的配置文件 更多信息见官方文档
PS:文章会同步到dev.kubeops.net