From 33e4ff2134f768e65f3c57c2fb1d124fdf583441 Mon Sep 17 00:00:00 2001 From: Damien Lespiau <damien@weave.works> Date: Mon, 1 Oct 2018 18:04:45 +0100 Subject: [PATCH] contrib/kube-prometheus: Document the internal registry support --- README.md | 40 ++++++++++++++++++++++++++++++ examples/internal-registry.jsonnet | 14 +++++++++++ 2 files changed, 54 insertions(+) create mode 100644 examples/internal-registry.jsonnet diff --git a/README.md b/README.md index bd8b587d..9d5cc8c1 100644 --- a/README.md +++ b/README.md @@ -29,6 +29,7 @@ This stack is meant for cluster monitoring, so it is pre-configured to collect m * [Configuration](#configuration) * [Customization Examples](#customization-examples) * [Cluster Creation Tools](#cluster-creation-tools) + * [Internal Registries](#internal-registries) * [NodePorts](#nodeports) * [Prometheus Object Name](#prometheus-object-name) * [node-exporter DaemonSet namespace](#node-exporter-daemonset-namespace) @@ -325,6 +326,45 @@ kops: (import 'kube-prometheus/kube-prometheus-kops.libsonnet') ``` +### Internal Registry + +Some Kubernetes installations source all their images from an internal registry. kube-prometheus supports this use case and helps the user synchronize every image it uses to the internal registry and generate manifests pointing at the internal registry. + +To produce the `docker pull/tag/push` commands that will synchronize upstream images to `internal-registry.com/organization` (after having run the `jb` command to populate the vendor directory): + +```shell +$ jsonnet -J vendor -S --tla-str repository=internal-registry.com/organization sync-to-internal-registry.jsonnet +docker pull quay.io/coreos/addon-resizer:1.0 +docker tag quay.io/coreos/addon-resizer:1.0 internal-registry.com/organization/addon-resizer:1.0 +docker push internal-registry.com/organization/addon-resizer:1.0 +docker pull quay.io/prometheus/alertmanager:v0.15.2 +docker tag quay.io/prometheus/alertmanager:v0.15.2 internal-registry.com/organization/alertmanager:v0.15.2 +docker push internal-registry.com/organization/alertmanager:v0.15.2 +... +``` + +The output of this command can be piped to a shell to be executed by appending `| sh`. + +Then to generate manifests with `internal-registry.com/organization`, use the `withImageRepository` mixin: + +[embedmd]:# (examples/internal-registry.jsonnet) +```jsonnet +local mixin = import 'kube-prometheus/kube-prometheus-config-mixins.libsonnet'; +local kp = (import 'kube-prometheus/kube-prometheus.libsonnet') + { + _config+:: { + namespace: 'monitoring', + }, +} + mixin.withImageRepository('internal-registry.com/organization'); + +{ ['00namespace-' + name]: kp.kubePrometheus[name] for name in std.objectFields(kp.kubePrometheus) } + +{ ['0prometheus-operator-' + name]: kp.prometheusOperator[name] for name in std.objectFields(kp.prometheusOperator) } + +{ ['node-exporter-' + name]: kp.nodeExporter[name] for name in std.objectFields(kp.nodeExporter) } + +{ ['kube-state-metrics-' + name]: kp.kubeStateMetrics[name] for name in std.objectFields(kp.kubeStateMetrics) } + +{ ['alertmanager-' + name]: kp.alertmanager[name] for name in std.objectFields(kp.alertmanager) } + +{ ['prometheus-' + name]: kp.prometheus[name] for name in std.objectFields(kp.prometheus) } + +{ ['grafana-' + name]: kp.grafana[name] for name in std.objectFields(kp.grafana) } +``` + ### NodePorts Another mixin that may be useful for exploring the stack is to expose the UIs of Prometheus, Alertmanager and Grafana on NodePorts: diff --git a/examples/internal-registry.jsonnet b/examples/internal-registry.jsonnet new file mode 100644 index 00000000..f1d1e8ac --- /dev/null +++ b/examples/internal-registry.jsonnet @@ -0,0 +1,14 @@ +local mixin = import 'kube-prometheus/kube-prometheus-config-mixins.libsonnet'; +local kp = (import 'kube-prometheus/kube-prometheus.libsonnet') + { + _config+:: { + namespace: 'monitoring', + }, +} + mixin.withImageRepository('internal-registry.com/organization'); + +{ ['00namespace-' + name]: kp.kubePrometheus[name] for name in std.objectFields(kp.kubePrometheus) } + +{ ['0prometheus-operator-' + name]: kp.prometheusOperator[name] for name in std.objectFields(kp.prometheusOperator) } + +{ ['node-exporter-' + name]: kp.nodeExporter[name] for name in std.objectFields(kp.nodeExporter) } + +{ ['kube-state-metrics-' + name]: kp.kubeStateMetrics[name] for name in std.objectFields(kp.kubeStateMetrics) } + +{ ['alertmanager-' + name]: kp.alertmanager[name] for name in std.objectFields(kp.alertmanager) } + +{ ['prometheus-' + name]: kp.prometheus[name] for name in std.objectFields(kp.prometheus) } + +{ ['grafana-' + name]: kp.grafana[name] for name in std.objectFields(kp.grafana) } -- GitLab