Skaffold 与 Rancher Desktop

Skaffold 是一个命令行工具,用于 Kubernetes 原生应用程序的持续开发。Skaffold 处理构建、推送和部署应用程序的工作流,并提供用于创建 CI/CD 流水线的构建块。它能让你专注于在本地迭代你的应用程序,Skaffold 则能持续部署到你的本地或远程 Kubernetes 集群。要了解有关 Skaffold 的更多信息,请参阅 Skaffold 项目文档

为了演示使用 Rancher Desktop 设置 Skaffold 的步骤,Rancher Desktop 文档在此处提供了一个 nodejs 应用程序示例。

重要提示:Skaffold 仅适用于 dockerd (Moby)。因此,请确保在 Rancher Desktop UI 的 Kubernetes Settings 面板中选择了 dockerd 作为运行时。

  1. 访问 https://skaffold.dev/docs/install/ 安装 Skaffold。

  2. 克隆 Rancher Desktop 文档仓库并在终端中导航到 express-sample,如下所示:

    1. cd docs.rancherdesktop.io/assets/express-sample
  3. 运行 skaffold init

    根据 Skaffold 文档 的介绍,skaffold init 会遍历你的项目目录并查找 build 配置文件(例如 Dockerfilebuild.gradle /pom.xmlpackage.jsonrequirements.txtgo.mod)。

    在我们的示例中,我们将选择 Dockerfilepackage.json。这将生成你可以修改的初始配置文件。出现提示时,选择 yes 将你的配置写入 skaffold.yaml

  4. 在你的编辑器中,查看你的 app.jsmanifests.yaml 文件。请注意,在 manifests.yaml 中,你将拥有一个 deployment 配置和一个 service 配置。在测试场景下,仅需要 1 个 replica 即可。

  5. 回到你的终端,你会注意到你有两个选项,分别是 skaffold run(允许你构建和部署)和 skaffold dev (允许你进入开发模式自动重新部署)。在此示例中,我们将使用 skaffold dev

    你需要具有向镜像仓库推送的权限。你可以使用 Docker 登录、设置本地镜像仓库或在本地构建仓库,而不需要推送到镜像仓库:

  • Docker Hub
  • 本地镜像仓库
  • 本地构建

在运行 skaffold dev 之前,如果你有 Docker Hub 账号,请使用你的 docker 登录。然后,在文件 skaffold.yamlmanifests.yaml 中,将 matamagu/express-sample 替换为 YOUR_DOCKER_HUB_USERNAME/express-sample,这是因为 skaffold dev 会将构建的镜像推送到 DockerHub。

你可以先运行以下命令来设置本地镜像仓库:

  1. docker run -d -p 5000:5000 --restart=always --name registry registry:2

然后:

  1. skaffold dev --default-repo=localhost:5000

你可以通过在 manifests.yaml 文件中将工作负载 imagePullPolicy 设置为 IfNotPresent 在本地进行构建,而无需推送到镜像仓库。你还需要使用以下变量更新 skaffold.yaml 以实现此更改,如下所示:

Details

示例 YAML

  1. apiVersion: skaffold/v2beta29
  2. kind: Config
  3. metadata:
  4. name: skaffold
  5. build:
  6. local:
  7. push: false
  8. useDockerCLI: true

在进行开发时,Skaffold 将检测所有更改,并会自动再次执行构建和部署的过程。你将能够看到集群中的任何更改。

  1. 在浏览器中访问 localhost:3000,你将看到 express-sample 界面。