A newer version of this documentation is available.

View Latest

Listing And Describing Resources

    +

    When a Couchbase cluster is deployed, additional Kubernetes resources such as pods and services are created by the Operator to facilitate its deployment. All resources originating from the Couchbase Operator are labeled in order to make it easy to list and describe resources belonging to a specific cluster. The following sections list and explain the resources created by the Operator when the cluster is running.

    Note that each of the commands below use kubectl with the default namespace kubectl -n default ... when using Kubernetes. If you’ve deployed your cluster using a different namespace, you will need to explicitly provide the namespace where your cluster is deployed. Similarly, if you are using OpenShift, the commands oc use the default namespace oc -n default ....

    Operator Deployment

    The Operator is started as a deployment resource. The name of the object will match the name provided in your deployment specification. (See Prerequisites and Setup for details.) The Operator deployment can be listed and described as follows:

    On Kubernetes:

    $ kubectl get deployments couchbase-operator
    NAME                 DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
    couchbase-operator   1         1         1            1           27m
    
    $ kubectl describe deployments couchbase-operator
    Name:			couchbase-operator
    Namespace:		default
    Labels:			name=couchbase-operator
    Replicas:		1 desired | 1 updated | 1 total | 1 available | 0 unavailable
    Pod Template:
      Labels:	name=couchbase-operator
      Containers:
       couchbase-operator:
        Image:	couchbase/couchbase-operator:v1
        Port:	8080/TCP
        ...

    On OpenShift:

    $ oc get deployments couchbase-operator
    NAME                 DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
    couchbase-operator   1         1         1            1           27m
    
    $ oc describe deployments couchbase-operator
    Name:			couchbase-operator
    Namespace:		default
    Labels:			name=couchbase-operator
    Replicas:		1 desired | 1 updated | 1 total | 1 available | 0 unavailable
    Pod Template:
      Labels:	name=couchbase-operator
      Containers:
       couchbase-operator:
        Image:	couchbase/couchbase-operator:v1
        Port:	8080/TCP
        ...

    Notice that the deployment resource manages a ReplicaSet, which means it’s important to check that the desired number of replicas match the total number of available replicas when describing the Operator deployment.

    Additional information about the ReplicaSets and pods created by the Operator deployment can be described using the deployment name as a label selector.

    On Kubernetes:

    # replicasets created by couchbase-operator deployment
    $ kubectl describe rs -lapp=couchbase-operator
    
    # pods created by the deployments replicaset
    $ kubectl describe pods -lapp=couchbase-operator
    Name:		couchbase-operator-1917615544-8kgw9
    Status:		Running
    IP:		172.17.0.3
    Created By:	ReplicaSet/couchbase-operator-1917615544
    Containers:
      couchbase-operator:
        Image:		couchbase/couchbase-operator:v1
        ...

    On OpenShift:

    # replicasets created by couchbase-operator deployment
    $ oc describe rs -lapp=couchbase-operator
    
    # pods created by the deployments replicaset
    $ oc describe pods -lapp=couchbase-operator
    Name:		couchbase-operator-1917615544-8kgw9
    Status:		Running
    IP:		172.17.0.3
    Created By:	ReplicaSet/couchbase-operator-1917615544
    Containers:
      couchbase-operator:
        Image:		couchbase/couchbase-operator:v1
        ...

    Server Pods

    Couchbase pods can be listed using the -lapp=couchbase label.

    On Kubernetes:

    $ kubectl get po -l app=couchbase
    NAME                  READY     STATUS    RESTARTS   AGE
    cb-development-0000   1/1       Running   0          1h
    cb-development-0001   1/1       Running   0          1h
    cb-production-0000    1/1       Running   0          1h
    cb-production-0001    1/1       Running   0          1h

    On OpenShift, use the following command:

    $ oc get po -l app=couchbase

    The pods are also labeled by cluster and according to Couchbase service, which makes it possible to get only the pods providing a specific service for a specific cluster. For example, the following command gets only the pods providing the query service on the cb-development cluster.

    On Kubernetes:

    # query pods on dev deployment
    $ kubectl get po -l couchbase_cluster=cb-development,couchbase_service_query
    NAME                  READY     STATUS    RESTARTS   AGE
    cb-development-0000   1/1       Running   0          1h
    cb-development-0001   1/1       Running   0          1h

    On OpenShift, use the following command:

    # query pods on dev deployment
    $ oc get po -l couchbase_cluster=cb-development,couchbase_service_query

    After listing the pods, additional information can be collecting using kubectl describe on Kubernetes as follows:

    $ kubectl describe po cb-development-0000
    Name:		cb-development-0000
    Namespace:	default
    Node:		minikube/192.168.99.100
    Start Time:	Tue, 23 Jan 2018 07:49:38 -0700
    Labels:		app=couchbase
    		couchbase_cluster=cb-development
    ...
    Containers:
      couchbase-server:
        Container ID:	docker://6b7aeb66cb540c6904b8e514776c180f7fbbea25656e6175972c408042db5713
        Image:		couchbase/server:enterprise-6.0.1

    On OpenShift, use the following command:

    $ oc describe po cb-development-0000

    Services

    Services are created to facilitate both pod to pod communication and connections from external clients to the internal cluster. The former is established using a headless ClusterIP service, and the latter via the NodePort service. You can read more about the Kubernetes services here. When listing the services, the name of the ClusterIP service will match the name provided in the CouchbaseCluster spec. The NodePort service is also named after the CouchbaseCluster name, except with a '-ui' suffix.

    Services belonging to the Operator can be listed as follows:

    On Kubernetes:

    # all services managed by the operator
    $ kubectl get service -lapp=couchbase
    NAME                CLUSTER-IP   EXTERNAL-IP   PORT(S)                          AGE
    cb-development      None         <none>        8091/TCP,18091/TCP               2m
    cb-development-ui   10.0.0.7     <nodes>       8091:31822/TCP,18091:30155/TCP   2m
    cb-production       None         <none>        8091/TCP,18091/TCP               1m
    cb-production-ui    10.0.0.216   <nodes>       8091:30139/TCP,18091:30461/TCP   1m
    
    # only services used by cb-production cluster
    $ kubectl get service -lcouchbase_cluster=cb-production
    NAME               CLUSTER-IP   EXTERNAL-IP   PORT(S)                          AGE
    cb-production      None         <none>        8091/TCP,18091/TCP               2m
    cb-production-ui   10.0.0.216   <nodes>       8091:30139/TCP,18091:30461/TCP   2m

    On OpenShift, use the following commands:

    # all services managed by the operator
    $ oc get service -lapp=couchbase
    NAME                CLUSTER-IP   EXTERNAL-IP   PORT(S)                          AGE
    cb-development      None         <none>        8091/TCP,18091/TCP               2m
    cb-development-ui   10.0.0.7     <nodes>       8091:31822/TCP,18091:30155/TCP   2m
    cb-production       None         <none>        8091/TCP,18091/TCP               1m
    cb-production-ui    10.0.0.216   <nodes>       8091:30139/TCP,18091:30461/TCP   1m
    
    # only services used by cb-production cluster
    $ oc get service -lcouchbase_cluster=cb-production
    NAME               CLUSTER-IP   EXTERNAL-IP   PORT(S)                          AGE
    cb-production      None         <none>        8091/TCP,18091/TCP               2m
    cb-production-ui   10.0.0.216   <nodes>       8091:30139/TCP,18091:30461/TCP   2m

    Describing services

    After listing the services, additional information about ports and endpoints can be gathered on Kubernetes using kubectl describe as follows:

    $ kubectl describe service cb-production
    
    Name:			cb-production
    Namespace:		default
    Labels:			app=couchbase
    			couchbase_cluster=cb-production
    Annotations:		service.alpha.kubernetes.io/tolerate-unready-endpoints=true
    Selector:		app=couchbase,couchbase_cluster=cb-production
    Type:			ClusterIP
    IP:			None
    Port:			cb-admin	8091/TCP
    Endpoints:		172.17.0.10:8091,172.17.0.9:8091
    Port:			cb-admin-ssl	18091/TCP
    Endpoints:		172.17.0.10:18091,172.17.0.9:18091
    Session Affinity:	None
    Events:			<none>

    On OpenShift, use the following command:

    $ oc describe service cb-production

    You should expect that all pods within a cluster also exist as an endpoint to each service.

    Listing Custom Resources

    Custom resources are extensions of the Kubernetes API. The Couchbase Operator creates custom resources of type CouchbaseCluster for each cluster being deployed. Custom resources can be listed and described using kubectl just as other built-in resources.

    On Kubernetes:

    $ kubectl get couchbasecluster
    NAME             KIND
    cb-development   CouchbaseCluster.v1.couchbase.com
    cb-production    CouchbaseCluster.v1.couchbase.com
    
    $ kubectl describe couchbasecluster cb-production
    Name:		cb-production
    Namespace:	default
    Labels:		<none>
    Annotations:	kubectl.kubernetes.io/last-applied-configuration={"apiVersion":"couchbase.com/v1","kind":"CouchbaseCluster","metadata":{"annotations":{},"name":"cb-production","namespace":"def...
    API Version:	couchbase.com/v1
    Kind:		CouchbaseCluster
    ...

    On OpenShift:

    $ oc get couchbasecluster
    NAME             KIND
    cb-development   CouchbaseCluster.v1.couchbase.com
    cb-production    CouchbaseCluster.v1.couchbase.com
    
    $ oc describe couchbasecluster cb-production
    Name:		cb-production
    Namespace:	default
    Labels:		<none>
    Annotations:	kubectl.kubernetes.io/last-applied-configuration={"apiVersion":"couchbase.com/v1","kind":"CouchbaseCluster","metadata":{"annotations":{},"name":"cb-production","namespace":"def...
    API Version:	couchbase.com/v1
    Kind:		CouchbaseCluster
    ...

    Describing the cluster resource returns the deployed specification and its active status. For more information about the response returned from the describe command, see Cluster Status Guide.