You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
166 lines
5.4 KiB
166 lines
5.4 KiB
3 months ago
|
// Custom metrics API allows the HPA v2 to scale based on arbirary metrics.
|
||
|
// For more details on usage visit https://github.com/DirectXMan12/k8s-prometheus-adapter#quick-links
|
||
|
|
||
|
{
|
||
|
values+:: {
|
||
|
prometheusAdapter+: {
|
||
|
namespace: $.values.common.namespace,
|
||
|
// Rules for custom-metrics
|
||
|
config+:: {
|
||
|
rules+: [
|
||
|
{
|
||
|
seriesQuery: '{__name__=~"^container_.*",container!="POD",namespace!="",pod!=""}',
|
||
|
seriesFilters: [],
|
||
|
resources: {
|
||
|
overrides: {
|
||
|
namespace: { resource: 'namespace' },
|
||
|
pod: { resource: 'pod' },
|
||
|
},
|
||
|
},
|
||
|
name: { matches: '^container_(.*)_seconds_total$', as: '' },
|
||
|
metricsQuery: 'sum(rate(<<.Series>>{<<.LabelMatchers>>,container!="POD"}[1m])) by (<<.GroupBy>>)',
|
||
|
},
|
||
|
{
|
||
|
seriesQuery: '{__name__=~"^container_.*",container!="POD",namespace!="",pod!=""}',
|
||
|
seriesFilters: [
|
||
|
{ isNot: '^container_.*_seconds_total$' },
|
||
|
],
|
||
|
resources: {
|
||
|
overrides: {
|
||
|
namespace: { resource: 'namespace' },
|
||
|
pod: { resource: 'pod' },
|
||
|
},
|
||
|
},
|
||
|
name: { matches: '^container_(.*)_total$', as: '' },
|
||
|
metricsQuery: 'sum(rate(<<.Series>>{<<.LabelMatchers>>,container!="POD"}[1m])) by (<<.GroupBy>>)',
|
||
|
},
|
||
|
{
|
||
|
seriesQuery: '{__name__=~"^container_.*",container!="POD",namespace!="",pod!=""}',
|
||
|
seriesFilters: [
|
||
|
{ isNot: '^container_.*_total$' },
|
||
|
],
|
||
|
resources: {
|
||
|
overrides: {
|
||
|
namespace: { resource: 'namespace' },
|
||
|
pod: { resource: 'pod' },
|
||
|
},
|
||
|
},
|
||
|
name: { matches: '^container_(.*)$', as: '' },
|
||
|
metricsQuery: 'sum(<<.Series>>{<<.LabelMatchers>>,container!="POD"}) by (<<.GroupBy>>)',
|
||
|
},
|
||
|
{
|
||
|
seriesQuery: '{namespace!="",__name__!~"^container_.*"}',
|
||
|
seriesFilters: [
|
||
|
{ isNot: '.*_total$' },
|
||
|
],
|
||
|
resources: { template: '<<.Resource>>' },
|
||
|
name: { matches: '', as: '' },
|
||
|
metricsQuery: 'sum(<<.Series>>{<<.LabelMatchers>>}) by (<<.GroupBy>>)',
|
||
|
},
|
||
|
{
|
||
|
seriesQuery: '{namespace!="",__name__!~"^container_.*"}',
|
||
|
seriesFilters: [
|
||
|
{ isNot: '.*_seconds_total' },
|
||
|
],
|
||
|
resources: { template: '<<.Resource>>' },
|
||
|
name: { matches: '^(.*)_total$', as: '' },
|
||
|
metricsQuery: 'sum(rate(<<.Series>>{<<.LabelMatchers>>}[1m])) by (<<.GroupBy>>)',
|
||
|
},
|
||
|
{
|
||
|
seriesQuery: '{namespace!="",__name__!~"^container_.*"}',
|
||
|
seriesFilters: [],
|
||
|
resources: { template: '<<.Resource>>' },
|
||
|
name: { matches: '^(.*)_seconds_total$', as: '' },
|
||
|
metricsQuery: 'sum(rate(<<.Series>>{<<.LabelMatchers>>}[1m])) by (<<.GroupBy>>)',
|
||
|
},
|
||
|
],
|
||
|
},
|
||
|
},
|
||
|
},
|
||
|
|
||
|
prometheusAdapter+: {
|
||
|
customMetricsApiService: {
|
||
|
apiVersion: 'apiregistration.k8s.io/v1',
|
||
|
kind: 'APIService',
|
||
|
metadata: {
|
||
|
name: 'v1beta1.custom.metrics.k8s.io',
|
||
|
},
|
||
|
spec: {
|
||
|
service: {
|
||
|
name: $.prometheusAdapter.service.metadata.name,
|
||
|
namespace: $.values.prometheusAdapter.namespace,
|
||
|
},
|
||
|
group: 'custom.metrics.k8s.io',
|
||
|
version: 'v1beta1',
|
||
|
insecureSkipTLSVerify: true,
|
||
|
groupPriorityMinimum: 100,
|
||
|
versionPriority: 100,
|
||
|
},
|
||
|
},
|
||
|
customMetricsApiServiceV1Beta2: {
|
||
|
apiVersion: 'apiregistration.k8s.io/v1',
|
||
|
kind: 'APIService',
|
||
|
metadata: {
|
||
|
name: 'v1beta2.custom.metrics.k8s.io',
|
||
|
},
|
||
|
spec: {
|
||
|
service: {
|
||
|
name: $.prometheusAdapter.service.metadata.name,
|
||
|
namespace: $.values.prometheusAdapter.namespace,
|
||
|
},
|
||
|
group: 'custom.metrics.k8s.io',
|
||
|
version: 'v1beta2',
|
||
|
insecureSkipTLSVerify: true,
|
||
|
groupPriorityMinimum: 100,
|
||
|
versionPriority: 200,
|
||
|
},
|
||
|
},
|
||
|
customMetricsClusterRoleServerResources: {
|
||
|
apiVersion: 'rbac.authorization.k8s.io/v1',
|
||
|
kind: 'ClusterRole',
|
||
|
metadata: {
|
||
|
name: 'custom-metrics-server-resources',
|
||
|
},
|
||
|
rules: [{
|
||
|
apiGroups: ['custom.metrics.k8s.io'],
|
||
|
resources: ['*'],
|
||
|
verbs: ['*'],
|
||
|
}],
|
||
|
},
|
||
|
customMetricsClusterRoleBindingServerResources: {
|
||
|
apiVersion: 'rbac.authorization.k8s.io/v1',
|
||
|
kind: 'ClusterRoleBinding',
|
||
|
metadata: {
|
||
|
name: 'custom-metrics-server-resources',
|
||
|
},
|
||
|
roleRef: {
|
||
|
apiGroup: 'rbac.authorization.k8s.io',
|
||
|
kind: 'ClusterRole',
|
||
|
name: 'custom-metrics-server-resources',
|
||
|
},
|
||
|
subjects: [{
|
||
|
kind: 'ServiceAccount',
|
||
|
name: $.prometheusAdapter.serviceAccount.metadata.name,
|
||
|
namespace: $.values.prometheusAdapter.namespace,
|
||
|
}],
|
||
|
},
|
||
|
customMetricsClusterRoleBindingHPA: {
|
||
|
apiVersion: 'rbac.authorization.k8s.io/v1',
|
||
|
kind: 'ClusterRoleBinding',
|
||
|
metadata: {
|
||
|
name: 'hpa-controller-custom-metrics',
|
||
|
},
|
||
|
roleRef: {
|
||
|
apiGroup: 'rbac.authorization.k8s.io',
|
||
|
kind: 'ClusterRole',
|
||
|
name: 'custom-metrics-server-resources',
|
||
|
},
|
||
|
subjects: [{
|
||
|
kind: 'ServiceAccount',
|
||
|
name: 'horizontal-pod-autoscaler',
|
||
|
namespace: 'kube-system',
|
||
|
}],
|
||
|
},
|
||
|
},
|
||
|
}
|