Autobucket Operator
November 19, 2020 ยท View on GitHub
Kubernetes Operator that automatically creates and manages Cloud Buckets (Object Storage) for k8s Deployments. Built with Go and Operator SDK.
This repository is a companion repo for the article: Autobucket Operator: Building a Cloud Storage Kubernetes Operator with Go and Operator SDK
THIS SOFTWARE IS WORK IN PROGRESS / ALPHA RELEASE AND IS NOT MEANT FOR USAGE IN PRODUCTION SYSTEMS
Tests
To run tests:
$ make test
Run locally
# install the k8s resources
$ make install
# run the operator locally
$ make run
Deploy (GCP example)
Authenticate to GCP
gcloud auth login
Create a new gcp project (choose a unique GCP_PROJECT)
gcloud projects create $GCP_PROJECT
Create a service account for the operator
SERVICE_ACCOUNT=autobucket-operator
gcloud iam service-accounts create $SERVICE_ACCOUNT \
--project $GCP_PROJECT
Grant Storage Admin role to the service account
gcloud projects add-iam-policy-binding $GCP_PROJECT \
--member=serviceAccount:$SERVICE_ACCOUNT@$GCP_PROJECT.iam.gserviceaccount.com \
--role=roles/storage.admin \
--project $GCP_PROJECT
Create Service Account keys
gcloud iam service-accounts keys create sa-operator.json \
--iam-account $SERVICE_ACCOUNT@$GCP_PROJECT.iam.gserviceaccount.com \
--project $GCP_PROJECT
Make sure you KUBECONFIG is set before continuing, the deployment will use your current context
Create a Kubernetes secret for the service account credentials
kubectl create secret generic autobucket-gcp-credentials --from-file=sa-operator.json=sa-operator.json -n autobucket-operator-system
Deploy resources and controller manager
# install the k8s resources
$ make install
# deploy the controller manager
$ GCP_PROJECT=$GCP_PROJECT make deploy
Usage
Deployment annotations sample:
apiVersion: apps/v1
kind: Deployment
metadata:
name: sample-deployment
annotations:
ab.leclouddev.com/cloud: gcp
ab.leclouddev.com/name-prefix: ab
ab.leclouddev.com/on-delete-policy: destroy
ab.leclouddev.com/cloud: cloud where the storage bucket is created. Valid options: "gcp". If this annotation is missing or empty, no bucket is created for the deployment.ab.leclouddev.com/name-prefix: storage bucket name prefix. Default: "ab" (short name for autobucket).ab.leclouddev.com/on-delete-policy: bucket deletion policy when the deployment is deleted. Valid options: "ignore" (do nothing), "destroy" (delete the storage bucket).
The full name format for the created storage buckets is "{prefix}-{namespace}-{deployment-name}"
For example, the previous deployment, when deployed to the default namespace will automatically create a GCP Bucket: "ab-default-sample-deployment"
TODO
- Add AWS S3 Support
- Additional Bucket configuration options
- Helm chart for simpler deployment