Skip to content

Instantly share code, notes, and snippets.

@Andor
Created December 29, 2022 10:11
Show Gist options
  • Save Andor/ae3abb57c97af5d5d30edc5a48a61581 to your computer and use it in GitHub Desktop.
Save Andor/ae3abb57c97af5d5d30edc5a48a61581 to your computer and use it in GitHub Desktop.
qbec victoriametrics via helm
local p = import '../../params.libsonnet';
local params = p.components.victoriametrics;
local k = import '1.21/main.libsonnet';
local vm = importstr 'data://victoriametrics/github.com/VictoriaMetrics/helm-charts/raw/e075725ccd48f81e7794efb8119372f178be132f/packages/victoria-metrics-cluster-0.9.23.tgz';
local resources = {
local ns = k.core.v1.namespace,
namespace::
ns.new(params.namespace)
+ ns.metadata.withAnnotationsMixin({
'owner': 'ops',
})
+ ns.metadata.withLabelsMixin({
app: 'victoriametrics',
}),
local s = k.core.v1.secret,
ingressSecret:
s.new(params.ingress.auth['secret-name'], {
auth: std.base64(params.ingress.auth.auth),
}) +
s.metadata.withNamespace(params.namespace),
resources: [
$.namespace,
std.native('parseYaml')(vm),
$.ingressSecret,
],
}.resources;
if std.objectHas(params, 'enabled') && params.enabled then resources
// this file has the baseline default parameters
{
components: {
victoriametrics: {
namespace: 'victoriametrics',
ingress: {
host: error 'host must be specified',
auth: {
'secret-name': error 'secret-name must be specified',
auth: error 'auth must be specified',
},
},
local vmIngress(path, annotations={}) = {
enabled: $.components.victoriametrics.ingress.enabled,
hosts: [{
name: $.components.victoriametrics.ingress.host,
path: path,
port: 'http',
}],
tls: [{
hosts: [$.components.victoriametrics.ingress.host],
secretName: '%s-tls' % (std.strReplace($.components.victoriametrics.ingress.host, '.', '-')),
}],
annotations: {
'cert-manager.io/cluster-issuer': $.components['cluster-issuer'].name,
'nginx.ingress.kubernetes.io/auth-type': 'basic',
'nginx.ingress.kubernetes.io/auth-secret': $.components.victoriametrics.ingress.auth['secret-name'],
'nginx.ingress.kubernetes.io/auth-realm': 'Authentication Required',
} + annotations,
},
values: {
vminsert: {
fullnameOverride: 'vminsert',
serviceMonitor: {
enabled: true,
namespace: $.components.victoriametrics.namespace,
},
ingress: vmIngress('/insert', {
'nginx.ingress.kubernetes.io/client-body-buffer-size': '256k',
}),
extraArgs: {
replicationFactor: 2,
},
resources: {
limits: {
cpu: '1000m',
memory: '1Gi',
},
requests: {
cpu: '1000m',
memory: '1Gi',
},
},
},
vmselect: {
fullnameOverride: 'vmselect',
serviceMonitor: {
enabled: true,
namespace: $.components.victoriametrics.namespace,
},
ingress: vmIngress('/select'),
extraArgs: {
'dedup.minScrapeInterval': '100ms',
replicationFactor: 2,
'memory.allowedPercent': 90,
'search.maxConcurrentRequests': 5,
},
resources: {
limits: {
cpu: '2000m',
memory: '4Gi',
},
requests: {
cpu: '2000m',
memory: '4Gi',
},
},
},
vmstorage: {
fullnameOverride: 'vmstorage',
replicaCount: 3,
retentionPeriod: 4, // 4 months
persistentVolume: {
size: '300Gi',
},
serviceMonitor: {
enabled: true,
namespace: $.components.victoriametrics.namespace,
},
extraArgs: {
'dedup.minScrapeInterval': '10s',
},
resources: {
limits: {
cpu: '1000m',
memory: '8Gi',
},
requests: {
cpu: '1000m',
memory: '8Gi',
},
},
},
rbac: {
namespaced: true,
pspEnabled: false, // deprecated api
},
},
},
},
}
apiVersion: qbec.io/v1alpha1
kind: App
metadata:
name: myapp
spec:
vars:
computed:
- name: victoriametrics
code: |
{
local p = (import './params.libsonnet').components.victoriametrics,
command: 'sh',
args: [
'-c',
('helm --kube-version 1.21 template "${__DS_NAME__}" "https:/${__DS_PATH__}" -n ' + p.namespace + ' -f-')
],
inheritEnv: true,
stdin: std.manifestJson(p.values),
}
dataSources:
- exec://victoriametrics?configVar=victoriametrics
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment