Fabric8 Documentation

General Questions

What is the license?

fabric8 uses the Apache 2.0 License.

What is it?

Fabric8 is an integrated open source DevOps and Integration Platform which works out of the box on any Kubernetes or OpenShift environment and provides Continuous Delivery, Management, ChatOps and a Chaos Monkey.

What does fabric8 do?

Fabric8 (pronounced fabricate) gives you out of the box services that assist you when building Microservices, monoliths or any application in a linux container (Docker/Rocket) environment and is built on top of Kubernetes.

How does fabric8 compare to openshift.io?

Red Hat recently announced openshift.io at the Summit keynote. You can find out more about openshift.io in this overview video.

openshift.io is a free hosted development platform which uses that lets developers plan, create, edit, run, debug and CI / CD applications that are hosted on OpenShift Online with a fully integrated console, IDE and deep analytics.

The upstream project of openshift.io is fabric8. So you can think of openshift.io as fabric8 as a service :).

At the time of writing there are quite a few differences between the upstream fabric8 distribution and openshift.io which we are hoping to reduce ASAP. The differences today are:

  • openshift.io delegates to keycloak as the SSO service for all applications and users to use as well as to unify identities between opesnhift.io, github and the openshift online cluster. We have not yet integrated keycloak into the upstream distro - instead we just delegate to openshift OAuth (or don't provide OAuth on kubernetes). Hopefully soon we can integrate keycloak into the fabric8 distro.
  • we've been working on a new shiny angular 4 based console. The core fabric8-runtime-console will be included in the fabric8 upstream distro soon. Then there is the much larger fabric8-ui console which builds on fabric8-runtime-console to add additional capabilities:
    • planning, kanban board and issue tracking
    • analytics integration
    • integration with Eclipse Che
  • fabric8-planner provides a front end and back end for planning, kanban board and issue tracking. We'd like to add this into the fabric8 distribution ASAP
  • fabric8-analytics provides analytics about projects, libraries, dependencies and so forth. As you can see in the openshift.io demo this can be used to generate reports on each build or inside an IDE like Eclipse Che to warn about using dependencies which have security vulnerabilities together with providing feedback on which version to migrate to. All the source code is upstream at the github fabric8-analytics organisation but given the data plus all the cloud based infrastructure involved in this large complex project which is currently very AWS centric; we've no immediate plans to include it inside the fabric8 distribution. Its trivial however to reuse fabric8 analytics from fabric8 or openshift.io via the REST API.
  • eclipse che. We need to include this in the upstream distribution ASAP. The current app is here though I suspect it will need work to run upstream.
  • fabric8-init-tenant is a SaaS service which we use to initialise and update users tenant namespaces (e.g. the namespaces running the users Jenkins + Che services) and keep them updated. We'd like to port this so folks can use it upstream to manage the versions of developer tools that users run.

So its going to take a little while for us to get a fabric8 distrition thats easy to install and run on any kubernetes or openshift cluster that mimicks the functionality of openshift.io but we will get there in the end.

At the same time in parallel we hope to make openshift.io work with different openshift clusters for building applications and using different environments; so that might be the fastest way to get an openshift.io experience either on premise or on your own kubernetes or openshift cluster in the cloud.

How does Fabric8 relate to other open source projects?

Fabric8 provides upstream innovation on concepts and features, once validated, make their way into other open source projects such as OpenShift Origin, Kubernetes and Jenkins (as examples). Fabric8 contributors work in the various other open source communities to align a unified developer experience.

What is Kubernetes?

Kubernetes provides a Docker based Container As A Service (orchestrates docker containers)

What is the overlap with oc/kubectl/webconsole and fabric8-maven-plugin?

None!

oc/kubectl/webconsole are all great tools that end up operating on the same resources through the Kubernetes/OpenShift API. They can be used at any point to help manage your applications. The fabric8-maven-plugin is intended for Java developers developing applications "pre git-commit" on their laptops. It gives Java developers a familiar way of building/deploying their applications as well as logging, debugging, and live-reloading their applications using Kubernetes as an application cloud. Developers can use their favorite IDE which typically has great Maven integration. The sweet spot of Kubernetes/OpenShift is dealing with the build, deploy, and management of applications after a git commit/push. The CLI/webconsole is great at working with API resources, import projects from git, or spin up new projects from a template.

The fabric8-maven-plugin helps Java developers migrate existing Maven projects to Kubernetes/OpenShift as well. We're all busy Java developers and although it would be great to learn the ins/outs of kubectl, oc, Docker, Rkt, CNCF, OCI, Kubernetes, etc, the fabric8-maven-plugin helps abstract some of that away so we can be productive using tooling similar to others (any application-server maven plugin, spring-boot plugin, etc. fabric8-maven-plugin feels just like those others)

How should we create the Kubernetes/OpenShift manifest files?

However you'd like. The fabric8-maven-plugin does help automatically generate this for you as part of your builds and even attach these resource files as build artifacts so they can be versioned and pushed to a central artifact repository.

The fabric8-maven-plugin generates the JSON/YAML resource files and can be customized using Maven configurations. See the documentation for fabric8-maven-plugin for more details. It can also introspect your projects and be a lot smarter about what resources to include (eg, health/liveness checks can automatically be enabled in the Kubernetes resource files if you've got, for example, spring-boot actuator or some other http endpoint that can expose liveness information).

What value does fabric8 add over OpenShift?

Is Fabric8 Java centric?

The short answer is no ;).

  • Fabric8 Management works with any Docker images on Kubernetes - so its completely language, framework and runtime agnostic. The console has added extra introspection and visualisation for Java docker containers which contain a Jolokia but we hope to add more deep introspection tools for other languages. Certainly you can always use any language, framework or runtime specific diagnostic or visualiation tools on Kubernetes directly
  • Microservices Platform focusses on working with any project with any build mechanism running Docker images on Kubernetes. So any language, framework and runtime is supported with any build tooling. Whether thats using OpenShift's Source to image build mechanism, or our preferred Continuous Delivery using Jenkins Workflow.
  • Fabric8 iPaaS (Integration Platform is more Java centric in the sense that integration flows tend to be implemented using Apache Camel which runs inside a Java virtual machine (JVM) but the services that Camel integrates with can be any technology, language, runtime, on premise or SaaS etc.
  • Fabric8 API Management works with any API implemented in any language or runtime; currently only HTTP based APIs are supported though.

Having said all that; with the Fabric8 iPaaS) focus, we have optimised Fabric8 so that folks who do use Java have an optimised experience of working with Docker, Kubernetes, OpenShift and Fabric8. Though we hope to continue to improve tooling, management and visualisation for other languages and runtimes too.

Is Jenkins Pipeline Java centric?

Our preferred tool for Continuous Delivery is to use the Jenkins Pipeline plugin with Jenkins.

Jenkins Pipeline provides a domain specific language for orchestrating long running build tasks such as building, testing, approving, promoting and deploying steps using the Groovy programming language.

The preferred approach to using Jenkins Pipeline is to reuse docker images for all your build and testing tools; so that most of the details in your Jenkinsfile tends to be running commands inside docker images. So your CD pipeline definition is usually a list of commands using whatever tools you use (Maven, Grunt, Gulp, Make, bash, python, ruby, whatever) which is completely language, tool and framework agnostic.

Can Microservices Platform work with my CI server?

Our preferred tool for Continuous Delivery is to use the Jenkins Pipeline plugin with Jenkins.

However this is for orchestrating delivery pipelines which typically involves many tasks such as building, testing, approving, promoting and deploying. How each of those parts work is completely up to you.

For example you can reuse your existing CI server (Jenkins, Bamboo, TeamCity or whatever) to build your code then use a Jenkins Pipeline pipeline to move the build through environments, orchestrate system tests, soak tests, acceptance tests, approvals, promotions and so forth.

Our preferred approach is to use Jenkins Pipeline pipelines as the core orchestration layer when trying to implement Continuous Delivery, Continous Deployment or Continous Improvement then for that pipeline to trigger whatever is required to complete the pipeline; whether its one or more builds in an existing CI server, triggering OpenShift Source to Image builds or other existing build or test services then orchestrating those along with approval and promotion through Jenkins workflow. It also then means its easier to get a holistic view of your CD pipelines across all projects; irrespective of how each build or test works or what tools are used to build or test projects etc.

Where do I look for the source code?

Fabric8 is comprised of a collection of projects written in Java and Golang and packaged up as Docker containers. The git repos for each of these projects/containers can be found in detail in the project documentation pages

Are Docker and Kubernetes required to run Fabric8?

Fabric8 is designed to work best on top of Kubernetes and Docker; it means fabric8 will work very well in any environment providing the Kubernetes platform such as OpenShift, Google Compute Engine, Azure etc.

Is Windows supported

We recommend using a linux based system for production; preferably if you want a fully managed platform use Docker and Kubernetes or OpenShift Origin V3.

Windows is currently only partially supported. Windows users may consider using Docker so that all the fabric8 technologies run inside a linux VM in lightweight containers.

How do I configure a HTTP proxy?

If you are behind a corporate firewall then maven builds may fail to download jars from maven central.

This guide describes how to configure maven to use HTTP proxies.

To configure a HTTP Proxy in fabric8 open the [fabric8 console(console.html) then:

  • click on your Team page
  • now select the Runtime page on the left tab
  • select Secrets then the jenkins-maven-settings secret
  • edit this file - its the ~/.m2/settings.xml used by default on all maven builds in Jenkins - based on the this document
  • once you've saved your changes re-run your build in Jenkins

What maven plugin goals are available?

See the list of maven plugin goals

What Java versions are supported?

fabric8's Java code uses Java 8 but any docker image can use any version of any language, runtime or framework it wishes

Does Fabric8 use ZooKeeper runtime registry?

No, not anymore. Fabric8 1.x used ZooKeeper to share the runtime information between applications and to discover services. Kubernetes comes with the etcd internally which serves much of the same purpose and has support for the services binding, so Fabric8 v2 doesn't need ZooKeeper registry anymore for general purpose provisioning of containers and services.

However certain services will still require master slave election and partitioning functionality (such as running clusters of ActiveMQ); where either etcd or Apache ZooKeeper is required. If a Kubernetes environment allows it then fabric8 could reuse the underlying etcd cluster; otherwise an etcd or ZK clusters is required for things like ActiveMQ clustering.

Does Fabric8 still use profiles to configure application deployment?

No, not anymore. Starting from v2 Fabric8 uses app JSON files (i.e. Kubernetes extension proposed by OpenShift 3) to configure deployment of the managed application. More detailed configuration (like properties or YAML files) can be added to the file system of the application's Docker image.

Is Git repository still used to store the applications' configuration?

Applications' configuration isn't stored in Git repository as it used to be in Fabric8 v1. As Fabric8 v2 doesn't use profiles (but app templates instead), the Git repository is not needed anymore. You can just store application's configuration (app file) in the Maven project and use the Fabric8 Maven plugin to start the application in Kubernetes without keeping the configuration in any central repository (like Git).

However keeping app files in Git for easier configuration management is recommended. That's why fabric8 has integrated with Gogs for on premise git repository hosting. This comes from the fabric8 DevOps features.

Is Fabric8 server required to provision applications?

No. Kubernetes is responsible for providing the runtime registry for the managed applications. It means that you don't have to start any dedicated Fabric8 software in production.

Tools like Fabric8 Maven plugin or the fabric8 developer console can connect directly to the Kubernetes and deploy/manage it.

If there is no Fabric8 server, how can I use Fabric8 shell?

For the Fabric8 v2 development activities, the recommended tool is JBoss Forge with the Fabric8 add-on.

For provisioning purposes (like creating containers/services or changing the replica sizes) you can use the Fabric8 add-on or use the shell from OpenShift/Kubernetes.

Kubernetes will be included in Red Hat Enterprise Linux and OpenShift V3 and is the standard shell for provisioning any kind of the container.

Deprecations

FAB (Fuse Application Bundles) has been deprecated for the 1.2 release and removed from 2.x.