Skip to content

Latest commit

 

History

History
54 lines (41 loc) · 2.92 KB

DEVELOPMENT.md

File metadata and controls

54 lines (41 loc) · 2.92 KB

Developer Guide

Want to add a new feature (or fix bugs) in the operator? This document will help you understand how to build, test, and deploy the operator.

Prerequisites

Before you begin, ensure you have have a development environment well suited for Go and Kubernetes development:

  • Install Go version 1.20 or higher. We recommend using an interactive development environment (IDE) that supports go, such as GoLand or VSCode.
  • Install a container engine that can build and run container images. We recommend docker or podman.
  • Obtain access to a Kubernetes cluster that you have administrative permissions on. This can be a "micro" distribution such as kind, or a fully managed cluster like GKE. We recommend kind for local development.

Operator Foundations

This project builds a Kubernetes operator for Shipwright projects, such as build. It is scaffolded with Operator SDK and its related Kubernetes development framework, kubebuilder. Those who are new to Kubernetes concepts like controllers and custom resources are encouraged to try the Operator SDK go tutorial first.

Operator SDK and kubebuilder are strongly opinionated when it comes to project structure. Contributors should use operator-sdk commands or kubebuilder commands when adding new custom resources or controllers. Code within the pkg/ directory is generally safe from these generators and should be reserved for core reconciliation logic ("business logic").

This project also generates an operator bundle, which is used to deploy the operator on a cluster with Operator Lifecycle Manager (OLM). Refer to the OLM core tasks for the steps needed to deploy an operator with OLM.

Development Flows

Most features and bug fixes only require the operator and its related custom resource definitions to be deployed on Kubernetes. The local development guide describes how to build, deploy, and test your changes against a Kubernetes cluster.

Changes that modify the bundle directory, however, may require the operator to be packaged and deployed with Operator Lifecycle Manager. Refer to the OLM development guide for instructions on how to build, deploy, and test the operator with OLM.