this k8s operator allows you to run a 2.1 couchdb cluster on top of k8s.
- operator
- RBAC support
- CRD (CouchDB)
- definition
- management custom object add (spawn cluster)
- management custom object update (update cluster)
- management custom object delete (delete cluster)
- deployment template (port, readyness, livelyness)
- cluster management
- credentials from configMap, secrets
- pod anti affinity
- node selection via labels
- custom labels
- new pod -> join cluster
- old pod gone -> leave cluster
- operator definition
- README
see 7 principles taken from coreOS post: https://coreos.com/blog/introducing-operators.html and https://github.com/kubernetes/community/blob/master/contributors/devel/controllers.md
- k8s >= 1.7.0
$ kubectl apply -f k8s/resource-type.yml
$ kubectl apply -f k8s/deployment.yml
now, you can deploy a couchdb cluster like this:
apiVersion: "stable.couchdb.org/v1"
kind: CouchDB
metadata:
name: my-couchdb-cluster
spec:
version: "2.1.0"
image: "nicolai86/couchdb"
replicas: 3
the operator takes care of spawning the necessary pods and joining them into a single cluster.
required: golang 1.9+, kubernetes cluster (minikube, GKE, Azure...). To get a working operator locally, assuming kubectl is setup correctly:
$ go get -u github.com/golang/dep/cmd/dep
$ go get -du github.com/nicolai86/couchdb-operator
$ cd $(go env GOPATH)/src/github.com/nicolai86/couchdb-operator
$ dep ensure
$ OPERATOR_NAMESPACE=couchdb-operator
$ OPERATOR_NAME=couchdb-operator
$ KUBECONFIG=~/.kube/config
$ go run main.go