jsonnet: establish convention for components default fields

Signed-off-by: paulfantom <pawel@krupa.net.pl>
This commit is contained in:
paulfantom
2021-11-02 13:58:49 +01:00
parent 33b58ae643
commit 9c959bac74
10 changed files with 98 additions and 77 deletions

View File

@@ -1,6 +1,8 @@
local defaults = { local defaults = {
local defaults = self, local defaults = self,
namespace: error 'must provide namespace', // Convention: Top-level fields related to CRDs are public, other fields are hidden
// If there is no CRD for the component, everything is hidden in defaults.
namespace:: error 'must provide namespace',
image: error 'must provide image', image: error 'must provide image',
version: error 'must provide version', version: error 'must provide version',
resources: { resources: {
@@ -18,9 +20,9 @@ local defaults = {
for labelName in std.objectFields(defaults.commonLabels) for labelName in std.objectFields(defaults.commonLabels)
if !std.setMember(labelName, ['app.kubernetes.io/version']) if !std.setMember(labelName, ['app.kubernetes.io/version'])
}, },
name: error 'must provide name', name:: error 'must provide name',
reloaderPort: 8080, reloaderPort:: 8080,
config: { config:: {
global: { global: {
resolve_timeout: '5m', resolve_timeout: '5m',
}, },
@@ -59,7 +61,7 @@ local defaults = {
], ],
}, },
replicas: 3, replicas: 3,
mixin: { mixin:: {
ruleLabels: {}, ruleLabels: {},
_config: { _config: {
alertmanagerName: '{{ $labels.namespace }}/{{ $labels.pod}}', alertmanagerName: '{{ $labels.namespace }}/{{ $labels.pod}}',

View File

@@ -2,10 +2,12 @@ local krp = import './kube-rbac-proxy.libsonnet';
local defaults = { local defaults = {
local defaults = self, local defaults = self,
namespace: error 'must provide namespace', // Convention: Top-level fields related to CRDs are public, other fields are hidden
version: error 'must provide version', // If there is no CRD for the component, everything is hidden in defaults.
image: error 'must provide version', namespace:: error 'must provide namespace',
resources: { version:: error 'must provide version',
image:: error 'must provide version',
resources:: {
requests: { cpu: '10m', memory: '20Mi' }, requests: { cpu: '10m', memory: '20Mi' },
limits: { cpu: '20m', memory: '40Mi' }, limits: { cpu: '20m', memory: '40Mi' },
}, },
@@ -20,13 +22,13 @@ local defaults = {
for labelName in std.objectFields(defaults.commonLabels) for labelName in std.objectFields(defaults.commonLabels)
if !std.setMember(labelName, ['app.kubernetes.io/version']) if !std.setMember(labelName, ['app.kubernetes.io/version'])
}, },
configmapReloaderImage: error 'must provide version', configmapReloaderImage:: error 'must provide version',
kubeRbacProxyImage: error 'must provide kubeRbacProxyImage', kubeRbacProxyImage:: error 'must provide kubeRbacProxyImage',
port: 9115, port:: 9115,
internalPort: 19115, internalPort:: 19115,
replicas: 1, replicas:: 1,
modules: { modules:: {
http_2xx: { http_2xx: {
prober: 'http', prober: 'http',
http: { http: {
@@ -81,7 +83,7 @@ local defaults = {
}, },
}, },
}, },
privileged: privileged::
local icmpModules = [self.modules[m] for m in std.objectFields(self.modules) if self.modules[m].prober == 'icmp']; local icmpModules = [self.modules[m] for m in std.objectFields(self.modules) if self.modules[m].prober == 'icmp'];
std.length(icmpModules) > 0, std.length(icmpModules) > 0,
}; };

View File

@@ -2,11 +2,13 @@ local kubernetesGrafana = import 'github.com/brancz/kubernetes-grafana/grafana/g
local defaults = { local defaults = {
local defaults = self, local defaults = self,
name: 'grafana', // Convention: Top-level fields related to CRDs are public, other fields are hidden
namespace: error 'must provide namespace', // If there is no CRD for the component, everything is hidden in defaults.
version: error 'must provide version', name:: 'grafana',
image: error 'must provide image', namespace:: error 'must provide namespace',
resources: { version:: error 'must provide version',
image:: error 'must provide image',
resources:: {
requests: { cpu: '100m', memory: '100Mi' }, requests: { cpu: '100m', memory: '100Mi' },
limits: { cpu: '200m', memory: '200Mi' }, limits: { cpu: '200m', memory: '200Mi' },
}, },
@@ -21,7 +23,7 @@ local defaults = {
for labelName in std.objectFields(defaults.commonLabels) for labelName in std.objectFields(defaults.commonLabels)
if !std.setMember(labelName, ['app.kubernetes.io/version']) if !std.setMember(labelName, ['app.kubernetes.io/version'])
}, },
prometheusName: error 'must provide prometheus name', prometheusName:: error 'must provide prometheus name',
}; };
function(params) function(params)

View File

@@ -1,12 +1,14 @@
local relabelings = import '../addons/dropping-deprecated-metrics-relabelings.libsonnet'; local relabelings = import '../addons/dropping-deprecated-metrics-relabelings.libsonnet';
local defaults = { local defaults = {
namespace: error 'must provide namespace', // Convention: Top-level fields related to CRDs are public, other fields are hidden
// If there is no CRD for the component, everything is hidden in defaults.
namespace:: error 'must provide namespace',
commonLabels:: { commonLabels:: {
'app.kubernetes.io/name': 'kube-prometheus', 'app.kubernetes.io/name': 'kube-prometheus',
'app.kubernetes.io/part-of': 'kube-prometheus', 'app.kubernetes.io/part-of': 'kube-prometheus',
}, },
mixin: { mixin:: {
ruleLabels: {}, ruleLabels: {},
_config: { _config: {
cadvisorSelector: 'job="kubelet", metrics_path="/metrics/cadvisor"', cadvisorSelector: 'job="kubelet", metrics_path="/metrics/cadvisor"',
@@ -22,7 +24,7 @@ local defaults = {
hostNetworkInterfaceSelector: 'device!~"veth.+"', hostNetworkInterfaceSelector: 'device!~"veth.+"',
}, },
}, },
kubeProxy: false, kubeProxy:: false,
}; };
function(params) { function(params) {

View File

@@ -1,14 +1,16 @@
local defaults = { local defaults = {
namespace: error 'must provide namespace', // Convention: Top-level fields related to CRDs are public, other fields are hidden
image: error 'must provide image', // If there is no CRD for the component, everything is hidden in defaults.
ports: error 'must provide ports', namespace:: error 'must provide namespace',
secureListenAddress: error 'must provide secureListenAddress', image:: error 'must provide image',
upstream: error 'must provide upstream', ports:: error 'must provide ports',
resources: { secureListenAddress:: error 'must provide secureListenAddress',
upstream:: error 'must provide upstream',
resources:: {
requests: { cpu: '10m', memory: '20Mi' }, requests: { cpu: '10m', memory: '20Mi' },
limits: { cpu: '20m', memory: '40Mi' }, limits: { cpu: '20m', memory: '40Mi' },
}, },
tlsCipherSuites: [ tlsCipherSuites:: [
'TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256', // required by h2: http://golang.org/cl/30721 'TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256', // required by h2: http://golang.org/cl/30721
'TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256', // required by h2: http://golang.org/cl/30721 'TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256', // required by h2: http://golang.org/cl/30721

View File

@@ -2,24 +2,26 @@ local krp = import './kube-rbac-proxy.libsonnet';
local defaults = { local defaults = {
local defaults = self, local defaults = self,
name: 'kube-state-metrics', // Convention: Top-level fields related to CRDs are public, other fields are hidden
namespace: error 'must provide namespace', // If there is no CRD for the component, everything is hidden in defaults.
version: error 'must provide version', name:: 'kube-state-metrics',
image: error 'must provide version', namespace:: error 'must provide namespace',
kubeRbacProxyImage: error 'must provide kubeRbacProxyImage', version:: error 'must provide version',
resources: { image:: error 'must provide version',
kubeRbacProxyImage:: error 'must provide kubeRbacProxyImage',
resources:: {
requests: { cpu: '10m', memory: '190Mi' }, requests: { cpu: '10m', memory: '190Mi' },
limits: { cpu: '100m', memory: '250Mi' }, limits: { cpu: '100m', memory: '250Mi' },
}, },
kubeRbacProxyMain: { kubeRbacProxyMain:: {
resources+: { resources+: {
limits+: { cpu: '40m' }, limits+: { cpu: '40m' },
requests+: { cpu: '20m' }, requests+: { cpu: '20m' },
}, },
}, },
scrapeInterval: '30s', scrapeInterval:: '30s',
scrapeTimeout: '30s', scrapeTimeout:: '30s',
commonLabels:: { commonLabels:: {
'app.kubernetes.io/name': defaults.name, 'app.kubernetes.io/name': defaults.name,
'app.kubernetes.io/version': defaults.version, 'app.kubernetes.io/version': defaults.version,
@@ -31,7 +33,7 @@ local defaults = {
for labelName in std.objectFields(defaults.commonLabels) for labelName in std.objectFields(defaults.commonLabels)
if !std.setMember(labelName, ['app.kubernetes.io/version']) if !std.setMember(labelName, ['app.kubernetes.io/version'])
}, },
mixin: { mixin:: {
ruleLabels: {}, ruleLabels: {},
_config: { _config: {
kubeStateMetricsSelector: 'job="' + defaults.name + '"', kubeStateMetricsSelector: 'job="' + defaults.name + '"',

View File

@@ -2,18 +2,20 @@ local krp = import './kube-rbac-proxy.libsonnet';
local defaults = { local defaults = {
local defaults = self, local defaults = self,
name: 'node-exporter', // Convention: Top-level fields related to CRDs are public, other fields are hidden
namespace: error 'must provide namespace', // If there is no CRD for the component, everything is hidden in defaults.
version: error 'must provide version', name:: 'node-exporter',
image: error 'must provide version', namespace:: error 'must provide namespace',
kubeRbacProxyImage: error 'must provide kubeRbacProxyImage', version:: error 'must provide version',
resources: { image:: error 'must provide version',
kubeRbacProxyImage:: error 'must provide kubeRbacProxyImage',
resources:: {
requests: { cpu: '102m', memory: '180Mi' }, requests: { cpu: '102m', memory: '180Mi' },
limits: { cpu: '250m', memory: '180Mi' }, limits: { cpu: '250m', memory: '180Mi' },
}, },
listenAddress: '127.0.0.1', listenAddress:: '127.0.0.1',
filesystemMountPointsExclude: '^/(dev|proc|sys|var/lib/docker/.+|var/lib/kubelet/pods/.+)($|/)', filesystemMountPointsExclude:: '^/(dev|proc|sys|var/lib/docker/.+|var/lib/kubelet/pods/.+)($|/)',
port: 9100, port:: 9100,
commonLabels:: { commonLabels:: {
'app.kubernetes.io/name': defaults.name, 'app.kubernetes.io/name': defaults.name,
'app.kubernetes.io/version': defaults.version, 'app.kubernetes.io/version': defaults.version,
@@ -25,7 +27,7 @@ local defaults = {
for labelName in std.objectFields(defaults.commonLabels) for labelName in std.objectFields(defaults.commonLabels)
if !std.setMember(labelName, ['app.kubernetes.io/version']) if !std.setMember(labelName, ['app.kubernetes.io/version'])
}, },
mixin: { mixin:: {
ruleLabels: {}, ruleLabels: {},
_config: { _config: {
nodeExporterSelector: 'job="' + defaults.name + '"', nodeExporterSelector: 'job="' + defaults.name + '"',

View File

@@ -1,16 +1,18 @@
local defaults = { local defaults = {
local defaults = self, local defaults = self,
name: 'prometheus-adapter', // Convention: Top-level fields related to CRDs are public, other fields are hidden
namespace: error 'must provide namespace', // If there is no CRD for the component, everything is hidden in defaults.
version: error 'must provide version', name:: 'prometheus-adapter',
namespace:: error 'must provide namespace',
version:: error 'must provide version',
image: error 'must provide image', image: error 'must provide image',
resources: { resources:: {
requests: { cpu: '102m', memory: '180Mi' }, requests: { cpu: '102m', memory: '180Mi' },
limits: { cpu: '250m', memory: '180Mi' }, limits: { cpu: '250m', memory: '180Mi' },
}, },
replicas: 2, replicas:: 2,
listenAddress: '127.0.0.1', listenAddress:: '127.0.0.1',
port: 9100, port:: 9100,
commonLabels:: { commonLabels:: {
'app.kubernetes.io/name': 'prometheus-adapter', 'app.kubernetes.io/name': 'prometheus-adapter',
'app.kubernetes.io/version': defaults.version, 'app.kubernetes.io/version': defaults.version,
@@ -24,14 +26,14 @@ local defaults = {
}, },
// Default range intervals are equal to 4 times the default scrape interval. // Default range intervals are equal to 4 times the default scrape interval.
// This is done in order to follow Prometheus rule of thumb with irate(). // This is done in order to follow Prometheus rule of thumb with irate().
rangeIntervals: { rangeIntervals:: {
kubelet: '4m', kubelet: '4m',
nodeExporter: '4m', nodeExporter: '4m',
windowsExporter: '4m', windowsExporter: '4m',
}, },
prometheusURL: error 'must provide prometheusURL', prometheusURL:: error 'must provide prometheusURL',
config: { config:: {
resourceRules: { resourceRules: {
cpu: { cpu: {
containerQuery: ||| containerQuery: |||
@@ -95,7 +97,7 @@ local defaults = {
window: '5m', window: '5m',
}, },
}, },
tlsCipherSuites: [ tlsCipherSuites:: [
'TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305', 'TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305',
'TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305', 'TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305',
'TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256', 'TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256',

View File

@@ -3,13 +3,15 @@ local prometheusOperator = import 'github.com/prometheus-operator/prometheus-ope
local defaults = { local defaults = {
local defaults = self, local defaults = self,
name: 'prometheus-operator', // Convention: Top-level fields related to CRDs are public, other fields are hidden
namespace: error 'must provide namespace', // If there is no CRD for the component, everything is hidden in defaults.
version: error 'must provide version', name:: 'prometheus-operator',
image: error 'must provide image', namespace:: error 'must provide namespace',
kubeRbacProxyImage: error 'must provide kubeRbacProxyImage', version:: error 'must provide version',
configReloaderImage: error 'must provide config reloader image', image:: error 'must provide image',
resources: { kubeRbacProxyImage:: error 'must provide kubeRbacProxyImage',
configReloaderImage:: error 'must provide config reloader image',
resources:: {
limits: { cpu: '200m', memory: '200Mi' }, limits: { cpu: '200m', memory: '200Mi' },
requests: { cpu: '100m', memory: '100Mi' }, requests: { cpu: '100m', memory: '100Mi' },
}, },
@@ -24,7 +26,7 @@ local defaults = {
for labelName in std.objectFields(defaults.commonLabels) for labelName in std.objectFields(defaults.commonLabels)
if !std.setMember(labelName, ['app.kubernetes.io/version']) if !std.setMember(labelName, ['app.kubernetes.io/version'])
}, },
mixin: { mixin:: {
ruleLabels: { ruleLabels: {
role: 'alert-rules', role: 'alert-rules',
prometheus: defaults.name, prometheus: defaults.name,

View File

@@ -1,15 +1,18 @@
local defaults = { local defaults = {
local defaults = self, local defaults = self,
namespace: error 'must provide namespace', // Convention: Top-level fields related to CRDs are public, other fields are hidden
// If there is no CRD for the component, everything is hidden in defaults.
namespace:: error 'must provide namespace',
version: error 'must provide version', version: error 'must provide version',
image: error 'must provide image', image: error 'must provide image',
resources: { resources: {
requests: { memory: '400Mi' }, requests: { memory: '400Mi' },
}, },
name: error 'must provide name', name:: error 'must provide name',
alertmanagerName: error 'must provide alertmanagerName', //TODO: remove alertmanagerName and convert to plain 'alerting' object
namespaces: ['default', 'kube-system', defaults.namespace], alertmanagerName:: error 'must provide alertmanagerName',
namespaces:: ['default', 'kube-system', defaults.namespace],
replicas: 2, replicas: 2,
externalLabels: {}, externalLabels: {},
enableFeatures: [], enableFeatures: [],
@@ -25,7 +28,7 @@ local defaults = {
if !std.setMember(labelName, ['app.kubernetes.io/version']) if !std.setMember(labelName, ['app.kubernetes.io/version'])
} + { prometheus: defaults.name }, } + { prometheus: defaults.name },
ruleSelector: {}, ruleSelector: {},
mixin: { mixin:: {
ruleLabels: {}, ruleLabels: {},
_config: { _config: {
prometheusSelector: 'job="prometheus-' + defaults.name + '",namespace="' + defaults.namespace + '"', prometheusSelector: 'job="prometheus-' + defaults.name + '",namespace="' + defaults.namespace + '"',
@@ -35,7 +38,7 @@ local defaults = {
}, },
}, },
thanos: null, thanos: null,
reloaderPort: 8080, reloaderPort:: 8080,
}; };