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