fabric8:掌舵目标如何工作?

时间:2018-08-10 12:17:36

标签: fabric8

我们正在使用fabric8 maven插件来将maven项目构建和部署到kubernetes中。

我不太清楚如何使用fabric8:helm目标。

我试图获得有关其确切功能的详细信息,但我不太了解:

$ mvn help:describe -Dgoal=helm -DgroupId=io.fabric8 -DartifactId=fabric8-maven-plugin -Ddetail

这是输出:

fabric8:helm
  Description: Generates a Helm chart for the kubernetes resources
  Implementation: io.fabric8.maven.plugin.mojo.build.HelmMojo
  Language: java
  Bound to phase: pre-integration-test

  Available parameters:

    helm
      (no description available)

    kubernetesManifest (Default:
    ${basedir}/target/classes/META-INF/fabric8/kubernetes.yml)
      User property: fabric8.kubernetesManifest
      The generated kubernetes YAML file

    kubernetesTemplate (Default:
    ${basedir}/target/classes/META-INF/fabric8/k8s-template.yml)
      User property: fabric8.kubernetesTemplate
      The generated kubernetes YAML file

    skip (Default: false)
      User property: fabric8.skip
      (no description available)

    ...

在我们的项目中,我们在src/main/fabric8中没有工件。该文件夹的内容为:

tree src/main/fabric8
src/main/fabric8
├── forum-configmap.yaml
├── forum-deployment.yaml
├── forum-route.yaml
└── forum-service.yaml

这些是仅与kubernetes相关的文件。

我在那边找不到任何代码段

  1. 我需要在项目中添加哪种文件?头盔文件?
  2. 该目标到底是哪个输出?

1 个答案:

答案 0 :(得分:1)

只是为了解决这个问题,我抓取了一个具有Web依赖关系的基本spring boot项目和一个用spring initializr创建的RestController。 fabric8 plugin docs说首先要运行资源目标,所以我进入了项目的基本目录并运行了mvn -B io.fabric8:fabric8-maven-plugin:3.5.41:resource。在/target/classes/META-INF/fabric8/下为我的项目生成了kubernetes描述符。

因此,我运行了mvn -B io.fabric8:fabric8-maven-plugin:3.5.41:resource io.fabric8:fabric8-maven-plugin:3.5.41:helm。刚开始我遇到一个错误:

target/classes/META-INF/fabric8/k8s-template does not exist so cannot make chart <project_name>. Probably you need run 'mvn fabric8:resource' before.

但是描述符确实存在于/target/classes/META-INF/fabric8/kubernetes/下,所以我只是将该目录重命名为k8s-template并再次运行。然后,它在/target/fabric8/helm/kubernetes/目录中为我创建了一个舵图。

所以我跟随the docs literally,然后跑了helm install target/fabric8/helm/kubernetes/。那抱怨没有Chart.yaml。那时,我意识到我太在乎文档,因此需要运行helm install target/fabric8/helm/kubernetes/<project_name>。确实确实创建了头盔版本并将我的项目安装到kubernetes。它没有启动,因为我还没有创建任何docker映像。它似乎默认为图像名称<groupId>/<artifactId>:<version/snapshot-number>。如果我还要运行'build' goalpush目标并且让我的kubernetes可以访问Docker注册表,那么大概就在那里。

因此,简而言之,掌舵目标会生成基本的掌舵表。我相信,如果您的应用程序需要使用注入的URL或凭据访问共享资源(例如,用于数据库,消息代理或身份验证系统),或者您的应用程序公开了多个端口,或者您需要需要initContainers或自定义启动参数。大概您正在尝试自定义这些生成的资源,并通过将文件放在/ src / fabric8 /中来进行自定义。如果您要馈送的是k8s文件,那么我猜它们必须进入/src/fabric8/kubernetes/才能馈送到预期的/target/目录中,并且也被命名为{{1} }和<project-name>-deployment.yml

我想生成的图表至少是一个起点,并且如果将所有插件都添加到pom并进行所有设置而不是运行单个目标,则体验可能会比我的实验要流畅一些。