Configuration
Configuring M3DB
By default the operator will apply a configmap with basic M3DB options and settings for the coordinator to direct Prometheus reads/writes to the cluster. This template can be found here. To apply custom a configuration for the M3DB cluster, one can set the configMapName parameter of the cluster spec to an existing configmap. Environment Warning If providing a custom config map, the env you specify in your config must be $NAMESPACE/$NAME, where $NAMESPACE is the Kubernetes namespace your cluster is in and $NAME is the name of the cluster.
Pod Identity
Motivation M3DB assumes that if a process is started and owns sealed shards marked as Available that its data for those shards is valid and does not have to be fetched from peers. Consequentially this means it will begin serving reads for that data. For more background on M3DB topology, see the M3DB topology docs. In most environments in which M3DB has been deployed in production, it has been on a set of hosts predetermined by whomever is managing the cluster.
Namespaces
M3DB uses the concept of namespaces to determine how metrics are stored and retained. The M3DB operator allows a user to define their own namespaces, or to use a set of presets we consider to be suitable for production use cases. Namespaces are configured as part of an m3dbcluster spec. Presets 10s:2d This preset will store metrics at 10 second resolution for 2 days. For example, in your cluster spec:
Node Affinity & Cluster Topology
Node Affinity Kubernetes allows pods to be assigned to nodes based on various critera through node affinity. M3DB was built with failure tolerance as a core feature. M3DB’s isolation groups allow shards to be placed across failure domains such that the loss of no single domain can cause the cluster to lose quorum. More details on M3DB’s resiliency can be found in the deployment docs. By leveraging Kubernetes’ node affinity and M3DB’s isolation groups, the operator can guarantee that M3DB pods are distributed across failure domains.
Node Endpoint
M3DB stores an endpoint field on placement instances that is used for communication between DB nodes and from other components such as the coordinator. The operator allows customizing the format of this endpoint by setting the nodeEndpointFormat field on a cluster spec. The format of this field uses Go templates, with the following template fields currently supported: Field Description PodName Name of the pod M3DBService Name of the generated M3DB service PodNamespace Namespace the pod is in Port Port M3DB is serving RPCs on The default format is: