Skip to content

Commit

Permalink
docs: publish user docs using github pages
Browse files Browse the repository at this point in the history
Signed-off-by: Rich Lander <[email protected]>
  • Loading branch information
lander2k2 committed Aug 6, 2024
1 parent f623317 commit 8b091f3
Show file tree
Hide file tree
Showing 8 changed files with 232 additions and 117 deletions.
18 changes: 18 additions & 0 deletions .github/workflows/docs.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
---
name: Docs
on:
push:
tags:
- '*'

jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/[email protected]
- uses: actions/[email protected]
with:
python-version: 3.x
- run: pip install mkdocs-material mkdocs-material-extensions mike
- run: mkdocs gh-deploy --force

129 changes: 12 additions & 117 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,129 +12,24 @@

**Accelerate the development of Kubernetes operators.**

## What is a Kubernetes Operator?
Operator Builder is used to rapidly build operators that manage application
stacks.

A Kubernetes operator takes human operational knowledge for managing workloads
on Kubernetes and encodes it into a piece of software. Operators programmatically
perform the functions that a human engineer would otherwise have to execute in
managing software systems on Kubernetes. In practice, they usually consist of:
See our [documentation website](https://opeator-builder.io/) for more
information.

1. One or more custom resource definitions (CRDs) that extend the Kubernetes API
and provide a data model for defining the desired state of some software
system.
1. A custom Kubernetes controller that watches the custom resource instances and
reconciles the desired state defined in them.
## Developer Docs

You can find more info on the Kubernetes operator pattern in the [Kubernetes
docs](https://kubernetes.io/docs/concepts/extend-kubernetes/operator/).
If you're interested in contributing to Operator Builder, please see our
[Contributing
Guide](https://github.com/nukleros/operator-builder/blob/main/CONTRIBUTING.md)
and the [developer
documentation](https://github.com/nukleros/operator-builder/tree/main/docs/dev).

## Types of Operators

There is a vast amount of functionality that can be implemented in a Kubernetes
operator. You are limited by only by the Kubernetes API and the things you can
do with Go (or your programming language of choice). That said, there are
general categories we can break Kubernetes operators into.

* App Stack Management: This category of operators provide an abstraction for
deploying and managing particular applications. They are most helpful with
sophisticated stateful apps that are relatively involved to operate and those
apps that have multiple workload components. With this kind of operator, a
user often creates, updates and deletes a single custom resource instance that
triggers a Kubernetes controller to create, update and delete all the
Kubernetes resources that constitute that app. The app often consists of
dozens of different resources so this kind of operator is extremely helpful
in reducing operational toil and improving consistency and reliability.
Popular examples include the [Prometheus Operator](
https://github.com/prometheus-operator/prometheus-operator) and
various database operators. These are a very common category of Kubernetes
operator.
![App Stack Management with K8s
Operator](docs/images/KubernetesOperatorAppStackManagement.png)
* External Integrations: This kind of operator uses custom resources to define
resources external to Kubernetes such as cloud provider resources. The [AWS
Controllers for Kubernetes](https://github.com/aws-controllers-k8s/community)
is a good example of this.
* Workload Support Systems: Some operators don't directly manage Kubernetes or
external resources, but instead provide configuration support services for
applications. They often watch resources created by other systems and take
config actions to support different workloads. A good example of this is
[cert-manager](https://cert-manager.io/) which is commonly used to manage TLS
assets based on Ingress resource configurations.

## When to Use Operator Builder

Operator Builder speeds up the development of the first kind of operator:
App Stack Managers. It is a command line tool that ingests Kubernetes manifests
and generates the source code for a working Kubernetes operator based on the
resources defined in those manifests. These are the general steps to
building an app stack management operator with Operator Builder:

* Construct the Kubernetes manifests for the application you want to manage and
test them in a Kubernetes cluster. You can also use Helm and the `helm template`
command to create these resources if a helm chart exists.
* Determine which fields in the manifests need to be mutable and managed by the
operator, then add [markers](docs/markers.md) to the manifests.
* Create a [workload configuration](docs/workloads.md) to give it some details,
such as what you would like to call your custom resource.
* Run the Operator Builder CLI in a new repository and provide to it the marked
up manifests and workload config.

That's it! You will now have a Kubernetes operator that will create, update and
delete the resources that constitute your application in response to creating,
updating or deleting a custom resource instance.

An operator built with Operator Builder has the following features:

* A defined API for a custom resource based on [markers](docs/markers.md) in
static Kubernetes manifests.
* A functioning controller that will create, update and delete child resources
to reconcile the state for the custom resource/s.
* A [companion CLI](docs/companion-cli.md) that helps end users with common
operations.

The custom resource defined in the source code can be cluster-scoped or
namespace-scoped based on the requirements of the project. More info
[here](docs/resource-scope.md).

## Advanced Functionality

Advanced operational capabilities such as backups, restorations, failovers and
upgrades are not included in an operator built by Operator Builder. However,
all the essential CRUD operations are generated for you, accelerating
development and allowing you to get to the advanced functionality much faster.

## Built Atop Kubebuilder

Operator Builder is a [Kubebuilder](https://github.com/kubernetes-sigs/kubebuilder)
plugin. Kubebuilder provides excellent scaffolding for Kubernetes operators but
anyone who has built an app stack management operator using Kubebuilder can
attest to the amount of time and effort required to define the managed resources
in Go, not to mention the logic for creating, updating and deleting those resources.
Operator Builder adds those resource definitions and other code to get you up
and running in short order.

## Documentation

### User Docs

* [Installation](docs/installation.md)
* [Getting Started](docs/getting-started.md)
* [Workloads](docs/workloads.md)
* [Standalone Workloads](docs/standalone-workloads.md)
* [Workload Collections](docs/workload-collections.md)
* [Markers](docs/markers.md)
* [Resource Scope](docs/resource-scope.md)
* [Companion CLI](docs/companion-cli.md)
* [API Updates & Upgrades](docs/api-updates-upgrades.md)
* [License Management](docs/license.md)

### Developer Docs

* [Testing](docs/testing.md)

### License
## License

Copyright 2024 [Nukleros](https://github.com/nukleros) and [Third-party Authors](THIRD-PARTY.md) and maintained
by a [core group of maintainers](MAINTAINERS.md).

The software is available under the [Apache 2.0 License](https://www.apache.org/licenses/LICENSE-2.0).

18 changes: 18 additions & 0 deletions docs/contact.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Contact

If you find a bug or issue, please [open an issue on
Github](https://github.com/nukleros/operator-builder/issues)

If you would like to contribute to Operator Builder:

* Check out the [Contributing
Guide](https://github.com/nukleros/operator-builder/blob/main/CONTRIBUTING.md)
* For simple bug fixes or documentation updates, please [open a
PR](https://github.com/nukleros/operator-builder/pulls)
* For new feature additions or involved changes, please [open an
issue](https://github.com/nukleros/operator-builder/issues) before you
start work.

For general help or questions, hit us up in the [operator-builder channel on
Kubernetes Slack](https://kubernetes.slack.com/archives/C02HQCN3NUB)

7 changes: 7 additions & 0 deletions docs/dev/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# Developer Docs

The documentation here is for developers of Operator Builder.

If you're developing operators using Operator Builder see our [user
documentation](https://opeator-builder.io/).

File renamed without changes.
Binary file added docs/images/operator-builder-logo.ico
Binary file not shown.
113 changes: 113 additions & 0 deletions docs/index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
# Operator Builder

Operator Builder exists to accellerate the development of Kubernetes operators
that manage application stacks.

We believe that Kubernetes operators are under-used by organizations managing
workloads they've built. Operators are commonly used for open source components
but often overlooked by teams when managing applications they've built in-house.
Operator builder exists to lower the barrier to entry in this domain.

## What is a Kubernetes Operator?

A Kubernetes operator takes human operational knowledge for managing workloads
on Kubernetes and encodes it into a piece of software. Operators programmatically
perform the functions that a human engineer would otherwise have to execute in
managing software systems on Kubernetes. In practice, they usually consist of:

1. One or more custom resource definitions (CRDs) that extend the Kubernetes API
and provide a data model for defining the desired state of some software
system.
1. A custom Kubernetes controller that watches the custom resource instances and
reconciles the desired state defined in them.

You can find more info on the Kubernetes operator pattern in the [Kubernetes
docs](https://kubernetes.io/docs/concepts/extend-kubernetes/operator/).

## Types of Operators

There is a vast amount of functionality that can be implemented in a Kubernetes
operator. You are limited by only by the Kubernetes API and the things you can
do with Go (or your programming language of choice). That said, there are
general categories we can break Kubernetes operators into.

* App Stack Management: This category of operators provide an abstraction for
deploying and managing particular applications. They are most helpful with
sophisticated stateful apps that are relatively involved to operate and those
apps that have multiple workload components. With this kind of operator, a
user often creates, updates and deletes a single custom resource instance that
triggers a Kubernetes controller to create, update and delete all the
Kubernetes resources that constitute that app. The app often consists of
dozens of different resources so this kind of operator is extremely helpful
in reducing operational toil and improving consistency and reliability.
Popular examples include the [Prometheus Operator](
https://github.com/prometheus-operator/prometheus-operator) and
various database operators. These are a very common category of Kubernetes
operator.
![App Stack Management with K8s
Operator](images/KubernetesOperatorAppStackManagement.png)
* External Integrations: This kind of operator uses custom resources to define
resources external to Kubernetes such as cloud provider resources. The [AWS
Controllers for Kubernetes](https://github.com/aws-controllers-k8s/community)
is a good example of this.
* Workload Support Systems: Some operators don't directly manage Kubernetes or
external resources, but instead provide configuration support services for
applications. They often watch resources created by other systems and take
config actions to support different workloads. A good example of this is
[cert-manager](https://cert-manager.io/) which is commonly used to manage TLS
assets based on Ingress resource configurations.

## When to Use Operator Builder

Operator Builder speeds up the development of the first kind of operator:
App Stack Managers. It is a command line tool that ingests Kubernetes manifests
and generates the source code for a working Kubernetes operator based on the
resources defined in those manifests. These are the general steps to
building an app stack management operator with Operator Builder:

* Construct the Kubernetes manifests for the application you want to manage and
test them in a Kubernetes cluster. You can also use Helm and the `helm template`
command to create these resources if a helm chart exists.
* Determine which fields in the manifests need to be mutable and managed by the
operator, then add [markers](docs/markers.md) to the manifests.
* Create a [workload configuration](docs/workloads.md) to give it some details,
such as what you would like to call your custom resource.
* Run the Operator Builder CLI in a new repository and provide to it the marked
up manifests and workload config.

That's it! You will now have a Kubernetes operator that will create, update and
delete the resources that constitute your application in response to creating,
updating or deleting a custom resource instance.

An operator built with Operator Builder has the following features:

* A defined API for a custom resource based on [markers](docs/markers.md) in
static Kubernetes manifests.
* A functioning controller that will create, update and delete child resources
to reconcile the state for the custom resource/s.
* A [companion CLI](docs/companion-cli.md) that helps end users with common
operations.

The custom resource defined in the source code can be cluster-scoped or
namespace-scoped based on the requirements of the project. More info
[here](docs/resource-scope.md).

## Advanced Functionality

Advanced operational capabilities such as backups, restorations, failovers and
upgrades are not included in an operator built by Operator Builder. However,
all the essential CRUD operations are generated for you, accelerating
development and allowing you to get to the advanced functionality much faster.

## Built Atop Kubebuilder

Operator Builder is a [Kubebuilder](https://github.com/kubernetes-sigs/kubebuilder)
plugin. Kubebuilder provides excellent scaffolding for Kubernetes operators but
anyone who has built an app stack management operator using Kubebuilder can
attest to the amount of time and effort required to define the managed resources
in Go, not to mention the logic for creating, updating and deleting those resources.
Operator Builder adds those resource definitions and other code to get you up
and running in short order.



64 changes: 64 additions & 0 deletions mkdocs.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
site_name: Operator Builder
site_author: Operator Builder developers
site_description: Documentation for Operator Builder
repo_url: https://github.com/nukleros/operator-builder
repo_name: nukleros/operator-builder
edit_uri: blob/main/docs/

nav:
- Home: 'index.md'
- Install: 'installation.md'
- Getting Started: 'getting-started.md'
- Workloads:
- Workloads: 'workloads.md'
- Standalone Workloads: 'standalone-workloads.md'
- Workload Collections: 'workload-collections.md'
- Workload Collection Tutorial: 'workload-collection-tutorial/workload-collection-tutorial.md'
- Markers: 'markers.md'
- Resource Scope: 'resource-scope.md'
- Companion CLI: 'companion-cli.md'
- License Management: 'license.md'
- API Updates & Upgrades: 'api-updates-upgrades.md'
- Contact: 'contact.md'

theme:
name: material
favicon: images/operator-builder-logo.ico
logo: images/operator-builder-logo.png
features:
- content.code.copy
palette:
- scheme: default
primary: blue
accent: blue
toggle:
icon: material/brightness-7
name: Switch to dark mode
- scheme: slate
primary: blue
accent: blue
toggle:
icon: material/brightness-4
name: Switch to light mode

plugins:
- search

extra:
social:
- icon: fontawesome/brands/github
link: https://github.com/threeport/threeport

markdown_extensions:
- admonition
- attr_list
- pymdownx.details
- pymdownx.highlight:
linenums: true
- pymdownx.superfences
- pymdownx.tabbed
- toc:
permalink: true

copyright: Copyright &copy; 2022-2024 Operator Builder

0 comments on commit 8b091f3

Please sign in to comment.