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:
parent
928c2a9836
commit
83e3bcaab7
4 changed files with 45 additions and 15 deletions
|
@ -5,6 +5,8 @@ metadata:
|
|||
labels:
|
||||
prometheus: "main"
|
||||
spec:
|
||||
replicas: 2
|
||||
version: v1.3.0-beta.0
|
||||
serviceMonitors:
|
||||
- selector:
|
||||
matchLabels:
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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,
|
||||
},
|
||||
},
|
||||
},
|
|
@ -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"`
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue