1
0
Fork 0
mirror of https://github.com/prometheus-operator/prometheus-operator.git synced 2025-04-21 03:38:43 +00:00

Merge pull request from coreos/extract-po-jsonnet

kube-prometheus: Extract prometheus-operator jsonnet out of contrib
This commit is contained in:
Frederic Branczyk 2018-06-07 09:57:51 +02:00 committed by GitHub
commit e4bef2405f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
29 changed files with 254 additions and 114 deletions

3
.gitignore vendored
View file

@ -9,4 +9,5 @@ requirements.lock
__pycache__
.env/
.history/
.vscode/
.vscode/
tmp

View file

@ -15,7 +15,7 @@ Here is a ready to use manifest of a `ClusterRole` that can be used to start the
[embedmd]:# (../example/rbac/prometheus-operator/prometheus-operator-cluster-role.yaml)
```yaml
apiVersion: rbac.authorization.k8s.io/v1beta1
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: prometheus-operator
@ -25,7 +25,7 @@ rules:
resources:
- customresourcedefinitions
verbs:
- "*"
- '*'
- apiGroups:
- monitoring.coreos.com
resources:
@ -36,31 +36,50 @@ rules:
- servicemonitors
- prometheusrules
verbs:
- "*"
- '*'
- apiGroups:
- apps
resources:
- statefulsets
verbs: ["*"]
- apiGroups: [""]
verbs:
- '*'
- apiGroups:
- ""
resources:
- configmaps
- secrets
verbs: ["*"]
- apiGroups: [""]
verbs:
- '*'
- apiGroups:
- ""
resources:
- pods
verbs: ["list", "delete"]
- apiGroups: [""]
verbs:
- list
- delete
- apiGroups:
- ""
resources:
- services
- endpoints
verbs: ["get", "create", "update"]
- apiGroups: [""]
verbs:
- get
- create
- update
- apiGroups:
- ""
resources:
- nodes
verbs:
- list
- watch
- apiGroups:
- ""
resources:
- namespaces
verbs: ["list", "watch"]
verbs:
- list
- watch
```
> Note: A cluster admin is required to create this `ClusterRole` and create a `ClusterRoleBinding` or `RoleBinding` to the `ServiceAccount` used by the Prometheus Operator `Pod`. The `ServiceAccount` used by the Prometheus Operator `Pod` can be specified in the `Deployment` object used to deploy it.
@ -127,6 +146,7 @@ apiVersion: v1
kind: ServiceAccount
metadata:
name: prometheus-operator
namespace: default
```
Note that the `ServiceAccountName` also has to actually be used in the `PodTemplate` of the `Deployment` of the Prometheus Operator.
@ -135,7 +155,7 @@ And then a `ClusterRoleBinding`:
[embedmd]:# (../example/rbac/prometheus-operator/prometheus-operator-cluster-role-binding.yaml)
```yaml
apiVersion: rbac.authorization.k8s.io/v1beta1
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: prometheus-operator

View file

@ -455,6 +455,7 @@ metadata:
spec:
endpoints:
- bearerTokenFile: /var/run/secrets/kubernetes.io/serviceaccount/token
honorLabels: true
interval: 30s
port: https-metrics
scheme: https

View file

@ -16,7 +16,7 @@ To follow this getting started you will need a Kubernetes cluster you have acces
[embedmd]:# (../../bundle.yaml)
```yaml
apiVersion: rbac.authorization.k8s.io/v1beta1
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: prometheus-operator
@ -29,7 +29,7 @@ subjects:
name: prometheus-operator
namespace: default
---
apiVersion: rbac.authorization.k8s.io/v1beta1
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: prometheus-operator
@ -39,7 +39,7 @@ rules:
resources:
- customresourcedefinitions
verbs:
- "*"
- '*'
- apiGroups:
- monitoring.coreos.com
resources:
@ -50,36 +50,50 @@ rules:
- servicemonitors
- prometheusrules
verbs:
- "*"
- '*'
- apiGroups:
- apps
resources:
- statefulsets
verbs: ["*"]
- apiGroups: [""]
verbs:
- '*'
- apiGroups:
- ""
resources:
- configmaps
- secrets
verbs: ["*"]
- apiGroups: [""]
verbs:
- '*'
- apiGroups:
- ""
resources:
- pods
verbs: ["list", "delete"]
- apiGroups: [""]
verbs:
- list
- delete
- apiGroups:
- ""
resources:
- services
- endpoints
verbs: ["get", "create", "update"]
- apiGroups: [""]
verbs:
- get
- create
- update
- apiGroups:
- ""
resources:
- nodes
verbs:
- list
- watch
- apiGroups:
- ""
resources:
- namespaces
verbs: ["list", "watch"]
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: prometheus-operator
verbs:
- list
- watch
---
apiVersion: apps/v1beta2
kind: Deployment
@ -87,6 +101,7 @@ metadata:
labels:
k8s-app: prometheus-operator
name: prometheus-operator
namespace: default
spec:
replicas: 1
selector:
@ -101,6 +116,7 @@ spec:
- args:
- --kubelet-service=kube-system/kubelet
- --config-reloader-image=quay.io/coreos/configmap-reload:v0.0.1
- --prometheus-config-reloader=quay.io/coreos/prometheus-config-reloader:v0.20.0
image: quay.io/coreos/prometheus-operator:v0.20.0
name: prometheus-operator
ports:
@ -113,10 +129,18 @@ spec:
requests:
cpu: 100m
memory: 50Mi
nodeSelector:
beta.kubernetes.io/os: linux
securityContext:
runAsNonRoot: true
runAsUser: 65534
serviceAccountName: prometheus-operator
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: prometheus-operator
namespace: default
```
## Related resources

View file

@ -68,7 +68,7 @@ po-docgen:
@go install github.com/coreos/prometheus-operator/cmd/po-docgen
docs: embedmd po-docgen
$(GOPATH)/bin/embedmd -w `find Documentation contrib/kube-prometheus/ -name "*.md"`
$(GOPATH)/bin/embedmd -w `find Documentation contrib/kube-prometheus/ -name "*.md" | grep -v vendor`
$(GOPATH)/bin/po-docgen api pkg/client/monitoring/v1/types.go > Documentation/api.md
$(GOPATH)/bin/po-docgen compatibility > Documentation/compatibility.md
@ -101,16 +101,15 @@ generate-bundle:
hack/generate-bundle.sh
generate-kube-prometheus:
# Update the Prometheus Operator version in kube-prometheus
sed -i \
"s/prometheusOperator: 'v.*',/prometheusOperator: 'v$(shell cat VERSION)',/" \
contrib/kube-prometheus/jsonnet/kube-prometheus/prometheus-operator/prometheus-operator.libsonnet;
cd contrib/kube-prometheus; $(MAKE) generate-raw
jsonnet: jb
cd hack/generate; jb install
jsonnet -J hack/generate/vendor hack/generate/prometheus-operator.jsonnet | gojsontoyaml > example/non-rbac/prometheus-operator.yaml
jsonnet -J hack/generate/vendor hack/generate/prometheus-operator-rbac.jsonnet | gojsontoyaml > example/rbac/prometheus-operator/prometheus-operator.yaml
# Update the Prometheus Operator version in kube-prometheus
sed -i \
"s/prometheusOperator: 'v.*',/prometheusOperator: 'v$(shell cat VERSION)',/" \
jsonnet/prometheus-operator/prometheus-operator.libsonnet;
cd hack/generate; jb install;
hack/generate/build-jsonnet.sh
jb:
go get github.com/jsonnet-bundler/jsonnet-bundler/cmd/jb
@ -129,5 +128,9 @@ generate-crd: generate-openapi po-crdgen
po-crdgen alertmanager > example/prometheus-operator-crd/alertmanager.crd.yaml
po-crdgen servicemonitor > example/prometheus-operator-crd/servicemonitor.crd.yaml
po-crdgen prometheusrule > example/prometheus-operator-crd/prometheusrule.crd.yaml
cat example/prometheus-operator-crd/alertmanager.crd.yaml | gojsontoyaml -yamltojson > jsonnet/prometheus-operator/alertmanager-crd.libsonnet
cat example/prometheus-operator-crd/prometheus.crd.yaml | gojsontoyaml -yamltojson > jsonnet/prometheus-operator/prometheus-crd.libsonnet
cat example/prometheus-operator-crd/servicemonitor.crd.yaml | gojsontoyaml -yamltojson > jsonnet/prometheus-operator/servicemonitor-crd.libsonnet
cat example/prometheus-operator-crd/prometheusrule.crd.yaml | gojsontoyaml -yamltojson > jsonnet/prometheus-operator/prometheusrule-crd.libsonnet
.PHONY: all build crossbuild test format check-license container e2e-test e2e-status e2e clean-e2e embedmd apidocgen docs generate-crd jb

View file

@ -1,4 +1,4 @@
apiVersion: rbac.authorization.k8s.io/v1beta1
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: prometheus-operator
@ -11,7 +11,7 @@ subjects:
name: prometheus-operator
namespace: default
---
apiVersion: rbac.authorization.k8s.io/v1beta1
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: prometheus-operator
@ -21,7 +21,7 @@ rules:
resources:
- customresourcedefinitions
verbs:
- "*"
- '*'
- apiGroups:
- monitoring.coreos.com
resources:
@ -32,36 +32,50 @@ rules:
- servicemonitors
- prometheusrules
verbs:
- "*"
- '*'
- apiGroups:
- apps
resources:
- statefulsets
verbs: ["*"]
- apiGroups: [""]
verbs:
- '*'
- apiGroups:
- ""
resources:
- configmaps
- secrets
verbs: ["*"]
- apiGroups: [""]
verbs:
- '*'
- apiGroups:
- ""
resources:
- pods
verbs: ["list", "delete"]
- apiGroups: [""]
verbs:
- list
- delete
- apiGroups:
- ""
resources:
- services
- endpoints
verbs: ["get", "create", "update"]
- apiGroups: [""]
verbs:
- get
- create
- update
- apiGroups:
- ""
resources:
- nodes
verbs:
- list
- watch
- apiGroups:
- ""
resources:
- namespaces
verbs: ["list", "watch"]
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: prometheus-operator
verbs:
- list
- watch
---
apiVersion: apps/v1beta2
kind: Deployment
@ -69,6 +83,7 @@ metadata:
labels:
k8s-app: prometheus-operator
name: prometheus-operator
namespace: default
spec:
replicas: 1
selector:
@ -83,6 +98,7 @@ spec:
- args:
- --kubelet-service=kube-system/kubelet
- --config-reloader-image=quay.io/coreos/configmap-reload:v0.0.1
- --prometheus-config-reloader=quay.io/coreos/prometheus-config-reloader:v0.20.0
image: quay.io/coreos/prometheus-operator:v0.20.0
name: prometheus-operator
ports:
@ -95,7 +111,15 @@ spec:
requests:
cpu: 100m
memory: 50Mi
nodeSelector:
beta.kubernetes.io/os: linux
securityContext:
runAsNonRoot: true
runAsUser: 65534
serviceAccountName: prometheus-operator
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: prometheus-operator
namespace: default

View file

@ -7,13 +7,7 @@ generate: image
@echo ">> Compiling assets and generating Kubernetes manifests"
docker run --rm -u=$(shell id -u $(USER)):$(shell id -g $(USER)) -v $(shell dirname $(dir $(abspath $(dir $$PWD)))):/go/src/github.com/coreos/prometheus-operator/ --workdir /go/src/github.com/coreos/prometheus-operator/contrib/kube-prometheus po-jsonnet make generate-raw
crdtojsonnet:
cat ../../example/prometheus-operator-crd/alertmanager.crd.yaml | gojsontoyaml -yamltojson > jsonnet/kube-prometheus/prometheus-operator/alertmanager-crd.libsonnet
cat ../../example/prometheus-operator-crd/prometheus.crd.yaml | gojsontoyaml -yamltojson > jsonnet/kube-prometheus/prometheus-operator/prometheus-crd.libsonnet
cat ../../example/prometheus-operator-crd/servicemonitor.crd.yaml | gojsontoyaml -yamltojson > jsonnet/kube-prometheus/prometheus-operator/servicemonitor-crd.libsonnet
cat ../../example/prometheus-operator-crd/prometheusrule.crd.yaml | gojsontoyaml -yamltojson > jsonnet/kube-prometheus/prometheus-operator/prometheusrule-crd.libsonnet
generate-raw: crdtojsonnet fmt
generate-raw: fmt
jb install
./build.sh

View file

@ -29,6 +29,16 @@
}
},
"version": "master"
},
{
"name": "prometheus-operator",
"source": {
"git": {
"remote": "https://github.com/coreos/prometheus-operator",
"subdir": "jsonnet/prometheus-operator"
}
},
"version": "extract-po-jsonnet"
}
]
}

View file

@ -306,6 +306,7 @@ local k = import 'ksonnet/ksonnet.beta.3/k.libsonnet';
port: 'https-metrics',
scheme: 'https',
interval: '30s',
honorLabels: true,
tlsConfig: {
insecureSkipVerify: true,
},

View file

@ -4707,6 +4707,9 @@ data:
},
"lines": true,
"linewidth": 1,
"links": [
],
"nullPointMode": "null",
"percentage": false,
"pointradius": 5,
@ -4795,6 +4798,9 @@ data:
},
"lines": true,
"linewidth": 1,
"links": [
],
"nullPointMode": "null",
"percentage": false,
"pointradius": 5,
@ -4911,6 +4917,9 @@ data:
},
"lines": true,
"linewidth": 1,
"links": [
],
"nullPointMode": "null",
"percentage": false,
"pointradius": 5,
@ -5114,6 +5123,9 @@ data:
},
"lines": true,
"linewidth": 1,
"links": [
],
"nullPointMode": "null",
"percentage": false,
"pointradius": 5,
@ -5317,6 +5329,9 @@ data:
},
"lines": true,
"linewidth": 1,
"links": [
],
"nullPointMode": "null",
"percentage": false,
"pointradius": 5,
@ -5405,6 +5420,9 @@ data:
},
"lines": true,
"linewidth": 1,
"links": [
],
"nullPointMode": "null",
"percentage": false,
"pointradius": 5,
@ -5609,6 +5627,9 @@ data:
},
"lines": true,
"linewidth": 1,
"links": [
],
"nullPointMode": "null",
"percentage": false,
"pointradius": 5,
@ -5725,6 +5746,9 @@ data:
},
"lines": true,
"linewidth": 1,
"links": [
],
"nullPointMode": "null",
"percentage": false,
"pointradius": 5,
@ -5827,6 +5851,9 @@ data:
},
"lines": true,
"linewidth": 1,
"links": [
],
"nullPointMode": "null",
"percentage": false,
"pointradius": 5,
@ -6668,6 +6695,9 @@ data:
},
"lines": true,
"linewidth": 1,
"links": [
],
"nullPointMode": "null",
"percentage": false,
"pointradius": 5,

View file

@ -8,6 +8,7 @@ metadata:
spec:
endpoints:
- bearerTokenFile: /var/run/secrets/kubernetes.io/serviceaccount/token
honorLabels: true
interval: 30s
port: https-metrics
scheme: https

View file

@ -4,6 +4,7 @@ metadata:
labels:
k8s-app: prometheus-operator
name: prometheus-operator
namespace: default
spec:
replicas: 1
selector:
@ -18,6 +19,7 @@ spec:
- args:
- --kubelet-service=kube-system/kubelet
- --config-reloader-image=quay.io/coreos/configmap-reload:v0.0.1
- --prometheus-config-reloader=quay.io/coreos/prometheus-config-reloader:v0.20.0
image: quay.io/coreos/prometheus-operator:v0.20.0
name: prometheus-operator
ports:
@ -30,6 +32,9 @@ spec:
requests:
cpu: 100m
memory: 50Mi
nodeSelector:
beta.kubernetes.io/os: linux
securityContext:
runAsNonRoot: true
runAsUser: 65534
serviceAccountName: ""

View file

@ -1,4 +1,4 @@
apiVersion: rbac.authorization.k8s.io/v1beta1
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: prometheus-operator

View file

@ -1,4 +1,4 @@
apiVersion: rbac.authorization.k8s.io/v1beta1
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: prometheus-operator
@ -8,7 +8,7 @@ rules:
resources:
- customresourcedefinitions
verbs:
- "*"
- '*'
- apiGroups:
- monitoring.coreos.com
resources:
@ -19,28 +19,47 @@ rules:
- servicemonitors
- prometheusrules
verbs:
- "*"
- '*'
- apiGroups:
- apps
resources:
- statefulsets
verbs: ["*"]
- apiGroups: [""]
verbs:
- '*'
- apiGroups:
- ""
resources:
- configmaps
- secrets
verbs: ["*"]
- apiGroups: [""]
verbs:
- '*'
- apiGroups:
- ""
resources:
- pods
verbs: ["list", "delete"]
- apiGroups: [""]
verbs:
- list
- delete
- apiGroups:
- ""
resources:
- services
- endpoints
verbs: ["get", "create", "update"]
- apiGroups: [""]
verbs:
- get
- create
- update
- apiGroups:
- ""
resources:
- nodes
verbs:
- list
- watch
- apiGroups:
- ""
resources:
- namespaces
verbs: ["list", "watch"]
verbs:
- list
- watch

View file

@ -4,6 +4,7 @@ metadata:
labels:
k8s-app: prometheus-operator
name: prometheus-operator
namespace: default
spec:
replicas: 1
selector:
@ -18,6 +19,7 @@ spec:
- args:
- --kubelet-service=kube-system/kubelet
- --config-reloader-image=quay.io/coreos/configmap-reload:v0.0.1
- --prometheus-config-reloader=quay.io/coreos/prometheus-config-reloader:v0.20.0
image: quay.io/coreos/prometheus-operator:v0.20.0
name: prometheus-operator
ports:
@ -30,6 +32,8 @@ spec:
requests:
cpu: 100m
memory: 50Mi
nodeSelector:
beta.kubernetes.io/os: linux
securityContext:
runAsNonRoot: true
runAsUser: 65534

View file

@ -2,3 +2,4 @@ apiVersion: v1
kind: ServiceAccount
metadata:
name: prometheus-operator
namespace: default

12
hack/generate/build-jsonnet.sh Executable file
View file

@ -0,0 +1,12 @@
#!/usr/bin/env bash
rm -rf tmp
mkdir tmp
jsonnet -J hack/generate/vendor hack/generate/prometheus-operator-rbac.jsonnet > tmp/po.json
mapfile -t files < <(jq -r 'keys[]' tmp/po.json)
for file in "${files[@]}"
do
jq -r ".[\"${file}\"]" tmp/po.json | gojsontoyaml > "example/rbac/prometheus-operator/${file}"
done
jsonnet -J hack/generate/vendor hack/generate/prometheus-operator-non-rbac.jsonnet | gojsontoyaml > example/non-rbac/prometheus-operator.yaml

View file

@ -9,6 +9,16 @@
}
},
"version": "master"
},
{
"name": "prometheus-operator",
"source": {
"git": {
"remote": "https://github.com/coreos/prometheus-operator",
"subdir": "jsonnet/prometheus-operator"
}
},
"version": "extract-po-jsonnet"
}
]
}

View file

@ -0,0 +1,6 @@
local po = (import 'prometheus-operator/prometheus-operator.libsonnet').prometheusOperator;
local k = import 'ksonnet/ksonnet.beta.3/k.libsonnet';
local deployment = k.apps.v1beta2.deployment;
po.deployment +
deployment.mixin.spec.template.spec.withServiceAccountName('')

View file

@ -1,9 +1,8 @@
local k = import "ksonnet/ksonnet.beta.3/k.libsonnet";
local deployment = k.apps.v1beta2.deployment;
local po = (import 'prometheus-operator/prometheus-operator.libsonnet').prometheusOperator;
local po = import "./prometheus-operator.jsonnet";
local operatorDeployment = po +
deployment.mixin.spec.template.spec.withServiceAccountName("prometheus-operator");
operatorDeployment
{
'prometheus-operator-cluster-role-binding.yaml': po.clusterRoleBinding,
'prometheus-operator-cluster-role.yaml': po.clusterRole,
'prometheus-operator-service-account.yaml': po.serviceAccount,
'prometheus-operator-deployment.yaml': po.deployment,
}

View file

@ -1,27 +0,0 @@
local k = import "ksonnet/ksonnet.beta.3/k.libsonnet";
local rawVersion = importstr "../../VERSION";
local removeLineBreaks = function(str) std.join("", std.filter(function(c) c != "\n", std.stringChars(str)));
local version = removeLineBreaks(rawVersion);
local deployment = k.apps.v1beta2.deployment;
local container = k.apps.v1beta2.deployment.mixin.spec.template.spec.containersType;
local containerPort = container.portsType;
local targetPort = 8080;
local podLabels = {"k8s-app": "prometheus-operator"};
local operatorContainer =
container.new("prometheus-operator", "quay.io/coreos/prometheus-operator:v" + version) +
container.withPorts(containerPort.newNamed("http", targetPort)) +
container.withArgs(["--kubelet-service=kube-system/kubelet", "--config-reloader-image=quay.io/coreos/configmap-reload:v0.0.1"]) +
container.mixin.resources.withRequests({cpu: "100m", memory: "50Mi"}) +
container.mixin.resources.withLimits({cpu: "200m", memory: "100Mi"});
local operatorDeployment = deployment.new("prometheus-operator", 1, operatorContainer, podLabels) +
deployment.mixin.spec.selector.withMatchLabels(podLabels) +
deployment.mixin.metadata.withLabels(podLabels) +
deployment.mixin.spec.template.spec.securityContext.withRunAsNonRoot(true) +
deployment.mixin.spec.template.spec.securityContext.withRunAsUser(65534);
operatorDeployment

View file

@ -41,6 +41,7 @@ func MakeDeployment(pathToYaml string) (*appsv1.Deployment, error) {
}
func CreateDeployment(kubeClient kubernetes.Interface, namespace string, d *appsv1.Deployment) error {
d.Namespace = namespace
_, err := kubeClient.AppsV1beta2().Deployments(namespace).Create(d)
if err != nil {
return errors.Wrap(err, fmt.Sprintf("failed to create deployment %s", d.Name))

View file

@ -120,7 +120,7 @@ func (f *Framework) setupPrometheusOperator(opImage string) error {
return errors.Wrap(err, "failed to create prometheus cluster role")
}
deploy, err := MakeDeployment("../../example/rbac/prometheus-operator/prometheus-operator.yaml")
deploy, err := MakeDeployment("../../example/rbac/prometheus-operator/prometheus-operator-deployment.yaml")
if err != nil {
return err
}

View file

@ -27,6 +27,7 @@ func CreateServiceAccount(kubeClient kubernetes.Interface, namespace string, rel
if err != nil {
return finalizerFn, err
}
serviceAccount.Namespace = namespace
_, err = kubeClient.CoreV1().ServiceAccounts(namespace).Create(serviceAccount)
if err != nil {
return finalizerFn, err