Catalogd is a Kubernetes extension that unpacks file-based catalog (FBC) content for on-cluster clients. Currently, catalogd unpacks FBC content that is packaged and distributed as container images. The catalogd road map includes plans for unpacking other content sources, such as Git repositories and OCI artifacts. For more information, see the catalogd issues page.
Catalogd helps customers discover installable content by hosting catalog metadata for Kubernetes extensions, such as Operators and controllers. For more information on the Operator Lifecycle Manager (OLM) v1 suite of microservices, see the documentation for the Operator Controller.
NOTE: Procedure steps marked with an asterisk (*
) are likely to change with future API updates.
-
To install catalogd, navigate to the releases page, and follow the install instructions included in the release you want to install.
-
Create a
Catalog
object that points to the OperatorHub Community catalog by running the following command:$ kubectl apply -f - << EOF apiVersion: catalogd.operatorframework.io/v1alpha1 kind: Catalog metadata: name: operatorhubio spec: source: type: image image: ref: quay.io/operatorhubio/catalog:latest EOF
-
Verify the
Catalog
object was created successfully by running the following command:$ kubectl describe catalog/operatorhubio
Example output
Name: operatorhubio Namespace: Labels: <none> Annotations: <none> API Version: catalogd.operatorframework.io/v1alpha1 Kind: Catalog Metadata: Creation Timestamp: 2023-06-23T18:35:13Z Generation: 1 Managed Fields: API Version: catalogd.operatorframework.io/v1alpha1 Fields Type: FieldsV1 fieldsV1: f:metadata: f:annotations: .: f:kubectl.kubernetes.io/last-applied-configuration: f:spec: .: f:source: .: f:image: .: f:ref: f:type: Manager: kubectl-client-side-apply Operation: Update Time: 2023-06-23T18:35:13Z API Version: catalogd.operatorframework.io/v1alpha1 Fields Type: FieldsV1 fieldsV1: f:status: .: f:conditions: f:phase: Manager: manager Operation: Update Subresource: status Time: 2023-06-23T18:35:43Z Resource Version: 1397 UID: 709cee9d-c669-46e1-97d0-e97dcce8f388 Spec: Source: Image: Ref: quay.io/operatorhubio/catalog:latest Type: image Status: Conditions: Last Transition Time: 2023-06-23T18:35:13Z Message: Reason: Unpacking Status: False Type: Unpacked Phase: Unpacking Events: <none>
-
Port forward the
catalogd-catalogserver
service in thecatalogd-system
namespace:$ kubectl -n catalogd-system port-forward svc/catalogd-catalogserver 8080:80
-
Run the following command to get a list of packages:
$ curl http://localhost:8080/catalogs/operatorhubio/all.json | jq -s '.[] | select(.schema == "olm.package") | .name'
Example output
% Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 110M 100 110M 0 0 112M 0 --:--:-- --:--:-- --:--:-- 112M "ack-acm-controller" "ack-apigatewayv2-controller" "ack-applicationautoscaling-controller" "ack-cloudtrail-controller" "ack-cloudwatch-controller" "ack-dynamodb-controller" "ack-ec2-controller" "ack-ecr-controller" "ack-eks-controller" "ack-elasticache-controller" "ack-emrcontainers-controller" "ack-eventbridge-controller" "ack-iam-controller" "ack-kinesis-controller" ...
-
Run the following command to get a list of channels for the
ack-acm-controller
package:$ curl http://localhost:8080/catalogs/operatorhubio/all.json | jq -s '.[] | select(.schema == "olm.channel") | select(.package == "ack-acm-controller") | .name'
Example output
% Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 110M 100 110M 0 0 115M 0 --:--:-- --:--:-- --:--:-- 116M "alpha"
-
Run the following command to get a list of bundles belonging to the
ack-acm-controller
package:$ curl http://localhost:8080/catalogs/operatorhubio/all.json | jq -s '.[] | select(.schema == "olm.bundle") | select(.package == "ack-acm-controller") | .name'
Example output
% Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 110M 100 110M 0 0 122M 0 --:--:-- --:--:-- --:--:-- 122M "ack-acm-controller.v0.0.1" "ack-acm-controller.v0.0.2" "ack-acm-controller.v0.0.4" "ack-acm-controller.v0.0.5" "ack-acm-controller.v0.0.6" "ack-acm-controller.v0.0.7"
Thanks for your interest in contributing to catalogd
!
catalogd
is in the very early stages of development and a more in depth contributing guide will come in the near future.
In the mean time, it is assumed you know how to make contributions to open source projects in general and this guide will only focus on how to manually test your changes (no automated testing yet).
If you have any questions, feel free to reach out to us on the Kubernetes Slack channel #olm-dev or create an issue
Prerequisites
Local (not on cluster)
Note: This will work only for the controller
- Create a cluster:
kind create cluster
- Install CRDs and run the controller locally:
kubectl apply -f config/crd/bases/ && make run
On Cluster
- Build the images locally:
make docker-build-controller && make docker-build-server
- Create a cluster:
kind create cluster
- Load the images onto the cluster:
kind load docker-image quay.io/operator-framework/catalogd-controller:latest && kind load docker-image quay.io/operator-framework/catalogd-server:latest
- Install cert-manager:
make cert-manager
- Install the CRDs
kubectl apply -f config/crd/bases/
- Deploy the apiserver, etcd, and controller:
kubectl apply -f config/
- Create the sample Catalog (this will trigger the reconciliation loop):
kubectl apply -f config/samples/core_v1alpha1_catalog.yaml