Dynamic Configuration Kuberbetes Configmap Implementation
configmap is also supported as a Dynamic Configuration Center (DCC). To use it, please configure it as follows:
configuration:
selector: ${SW_CONFIGURATION:k8s-configmap}
# [example] (../../../../oap-server/server-configuration/configuration-k8s-configmap/src/test/resources/skywalking-dynamic-configmap.example.yaml)
k8s-configmap:
# Sync period in seconds. Defaults to 60 seconds.
period: ${SW_CONFIG_CONFIGMAP_PERIOD:60}
# Which namespace is configmap deployed in.
namespace: ${SW_CLUSTER_K8S_NAMESPACE:default}
# Labelselector is used to locate specific configmap
labelSelector: ${SW_CLUSTER_K8S_LABEL:app=collector,release=skywalking}
{namespace}
is the k8s namespace to which the configmap belongs.
{labelSelector}
is used to identify which configmaps would be selected.
e.g. These 2 configmaps would be selected by the above config:
apiversion: v1
kind: ConfigMap
metadata:
name: skywalking-dynamic-config
namespace: default
labels:
app: collector
release: skywalking
data:
configKey1: configValue1
configKey2: configValue2
...
apiversion: v1
kind: ConfigMap
metadata:
name: skywalking-dynamic-config2
namespace: default
labels:
app: collector
release: skywalking
data:
configKey3: configValue3
...
Config Storage
The configs are configmap data items, as the above example shows. we can organize the configs in 1 or more configmap files.
Single Config
Under configmap.data:
configKey: configValue
e.g. The config is:
{agent-analyzer.default.slowDBAccessThreshold}:{default:200,mongodb:50}
The config in configmap is:
apiversion: v1
kind: ConfigMap
metadata:
name: skywalking-dynamic-config
namespace: default
labels:
app: collector
release: skywalking
data:
agent-analyzer.default.slowDBAccessThreshold: default:200,mongodb:50
Group Config
The data key
is composited by configKey and subItemKey to identify it is a group config:
configKey.subItemKey1: subItemValue1
configKey.subItemKey2: subItemValue2
...
e.g. The config is:
{core.default.endpoint-name-grouping-openapi}:|{customerAPI-v1}:{value of customerAPI-v1}
|{productAPI-v1}:{value of productAPI-v1}
|{productAPI-v2}:{value of productAPI-v2}
The config can separate into 2 configmaps is:
apiversion: v1
kind: ConfigMap
metadata:
name: skywalking-dynamic-config
namespace: default
labels:
app: collector
release: skywalking
data:
core.default.endpoint-name-grouping-openapi.customerAPI-v1: value of customerAPI-v1
core.default.endpoint-name-grouping-openapi.productAPI-v1: value of productAPI-v1
apiversion: v1
kind: ConfigMap
metadata:
name: skywalking-dynamic-config2
namespace: default
labels:
app: collector
release: skywalking
data:
core.default.endpoint-name-grouping-openapi.productAPI-v2: value of productAPI-v2