1
0
Fork 0
mirror of https://github.com/prometheus-operator/prometheus-operator.git synced 2025-04-21 11:48:53 +00:00

Add replica, version, and baseImage option

This commit is contained in:
Fabian Reinartz 2016-10-26 20:39:15 +02:00
parent 928c2a9836
commit 83e3bcaab7
4 changed files with 45 additions and 15 deletions

View file

@ -5,6 +5,8 @@ metadata:
labels:
prometheus: "main"
spec:
replicas: 2
version: v1.3.0-beta.0
serviceMonitors:
- selector:
matchLabels:

View file

@ -17,6 +17,7 @@ import (
apierrors "k8s.io/client-go/1.5/pkg/api/errors"
"k8s.io/client-go/1.5/pkg/api/unversioned"
"k8s.io/client-go/1.5/pkg/api/v1"
"k8s.io/client-go/1.5/pkg/apis/extensions/v1beta1"
extensionsobj "k8s.io/client-go/1.5/pkg/apis/extensions/v1beta1"
"k8s.io/client-go/1.5/pkg/labels"
utilruntime "k8s.io/client-go/1.5/pkg/util/runtime"
@ -223,19 +224,22 @@ func (c *Controller) reconcile(p *spec.Prometheus) error {
// Ensure we have a replica set running Prometheus deployed.
// XXX: Selecting by ObjectMeta.Name gives an error. So use the label for now.
selector, err := labels.Parse("prometheus.coreos.com/type=prometheus,prometheus.coreos.com/name=" + p.Name)
deplQ := &v1beta1.Deployment{}
deplQ.Namespace = p.Namespace
deplQ.Name = p.Name
_, exists, err = c.deplInf.GetStore().Get(deplQ)
if err != nil {
return err
}
var rs []*extensionsobj.ReplicaSet
cache.ListAllByNamespace(c.promInf.GetIndexer(), p.Namespace, selector, func(o interface{}) {
rs = append(rs, o.(*extensionsobj.ReplicaSet))
})
if len(rs) == 0 {
deplClient := c.kclient.ExtensionsClient.Deployments(p.Namespace)
if _, err := deplClient.Create(makeDeployment(p.Name, 1)); err != nil && !apierrors.IsAlreadyExists(err) {
return fmt.Errorf("create replica set: %s", err)
deplClient := c.kclient.ExtensionsClient.Deployments(p.Namespace)
if !exists {
if _, err := deplClient.Create(makeDeployment(p)); err != nil {
return fmt.Errorf("create deployment: %s", err)
}
} else if _, err := deplClient.Update(makeDeployment(p)); err != nil {
return fmt.Errorf("update deployment: %s", err)
}
// We just always regenerate the configuration to be safe.
@ -249,7 +253,7 @@ func (c *Controller) deletePrometheus(p *spec.Prometheus) error {
// Update the replica count to 0 and wait for all pods to be deleted.
deplClient := c.kclient.ExtensionsClient.Deployments(p.Namespace)
// depl := c.kclient.Extensions().Deployments(p.Namespace)
depl, err := deplClient.Update(makeDeployment(p.Name, 0))
depl, err := deplClient.Update(makeDeployment(p))
if err != nil {
return err
}

View file

@ -1,21 +1,42 @@
package controller
import (
"fmt"
"github.com/coreos/kube-prometheus-controller/pkg/spec"
"k8s.io/client-go/1.5/pkg/api/v1"
"k8s.io/client-go/1.5/pkg/apis/extensions/v1beta1"
)
func makeDeployment(name string, replicas int32) *v1beta1.Deployment {
func makeDeployment(p *spec.Prometheus) *v1beta1.Deployment {
// TODO(fabxc): is this the right point to inject defaults?
// Ideally we would do it before storing but that's currently not possible.
// Potentially an update handler on first insertion.
baseImage := p.Spec.BaseImage
if baseImage == "" {
baseImage = "quay.io/prometheus/prometheus"
}
version := p.Spec.Version
if version == "" {
version = "v1.3.0-beta.0"
}
replicas := p.Spec.Replicas
if replicas < 1 {
replicas = 1
}
fmt.Println("creating deployment with replicas %q %q", p.Spec.Replicas, replicas)
depl := &v1beta1.Deployment{
ObjectMeta: v1.ObjectMeta{
Name: name,
Name: p.Name,
},
Spec: v1beta1.DeploymentSpec{
Replicas: &replicas,
Template: v1.PodTemplateSpec{
ObjectMeta: v1.ObjectMeta{
Labels: map[string]string{
"prometheus.coreos.com/name": name,
"prometheus.coreos.com/name": p.Name,
"prometheus.coreos.com/type": "prometheus",
},
},
@ -23,7 +44,7 @@ func makeDeployment(name string, replicas int32) *v1beta1.Deployment {
Containers: []v1.Container{
{
Name: "prometheus",
Image: "quay.io/prometheus/prometheus:v1.3.0-beta.0",
Image: fmt.Sprintf("%s:%s", baseImage, version),
Ports: []v1.ContainerPort{
{
Name: "web",
@ -65,7 +86,7 @@ func makeDeployment(name string, replicas int32) *v1beta1.Deployment {
VolumeSource: v1.VolumeSource{
ConfigMap: &v1.ConfigMapVolumeSource{
LocalObjectReference: v1.LocalObjectReference{
Name: name,
Name: p.Name,
},
},
},

View file

@ -25,6 +25,9 @@ type PrometheusList struct {
type PrometheusSpec struct {
ServiceMonitors []ServiceMonitorSelection `json:"serviceMonitors"`
EvaluationInterval string `json:"evaluationInterval"`
Version string `json:"version"`
BaseImage string `json:"baseImage"`
Replicas int32 `json:"replicas"`
// Retention string `json:"retention"`
// Replicas int `json:"replicas"`
// Resources apiV1.ResourceRequirements `json:"resources"`