From 7f16a8cb30320eef87331211869f70617417d098 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juraci=20Paix=C3=A3o=20Kr=C3=B6hling?= Date: Tue, 22 Jan 2019 12:28:38 +0100 Subject: [PATCH] Changed to use recommended labels (#172) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Juraci Paixão Kröhling --- pkg/deployment/agent.go | 21 ++++++++++++++++----- pkg/deployment/agent_test.go | 12 ++++++++++++ pkg/deployment/all-in-one.go | 29 ++++++++++++++++++++--------- pkg/deployment/all-in-one_test.go | 9 +++++++++ pkg/deployment/collector.go | 31 +++++++++++++++++++++++-------- pkg/deployment/collector_test.go | 10 ++++++++++ pkg/deployment/query.go | 25 ++++++++++++++++++------- pkg/deployment/query_test.go | 9 +++++++++ 8 files changed, 117 insertions(+), 29 deletions(-) diff --git a/pkg/deployment/agent.go b/pkg/deployment/agent.go index 0fe4964c1..6ec31e628 100644 --- a/pkg/deployment/agent.go +++ b/pkg/deployment/agent.go @@ -41,7 +41,7 @@ func (a *Agent) Get() *appsv1.DaemonSet { args := append(a.jaeger.Spec.Agent.Options.ToArgs(), fmt.Sprintf("--collector.host-port=%s:14267", service.GetNameForCollectorService(a.jaeger))) trueVar := true - selector := a.selector() + labels := a.labels() baseCommonSpec := v1alpha1.JaegerCommonSpec{ Annotations: map[string]string{ @@ -73,11 +73,11 @@ func (a *Agent) Get() *appsv1.DaemonSet { }, Spec: appsv1.DaemonSetSpec{ Selector: &metav1.LabelSelector{ - MatchLabels: selector, + MatchLabels: labels, }, Template: v1.PodTemplateSpec{ ObjectMeta: metav1.ObjectMeta{ - Labels: selector, + Labels: labels, Annotations: commonSpec.Annotations, }, Spec: v1.PodSpec{ @@ -128,6 +128,17 @@ func (a *Agent) Get() *appsv1.DaemonSet { } } -func (a *Agent) selector() map[string]string { - return map[string]string{"app": "jaeger", "jaeger": a.jaeger.Name, "jaeger-component": "agent-daemonset"} +func (a *Agent) labels() map[string]string { + return map[string]string{ + "app": "jaeger", // TODO(jpkroehling): see collector.go in this package + "app.kubernetes.io/name": a.name(), + "app.kubernetes.io/instance": a.jaeger.Name, + "app.kubernetes.io/component": "agent", + "app.kubernetes.io/part-of": "jaeger", + "app.kubernetes.io/managed-by": "jaeger-operator", + } +} + +func (a *Agent) name() string { + return fmt.Sprintf("%s-agent", a.jaeger.Name) } diff --git a/pkg/deployment/agent_test.go b/pkg/deployment/agent_test.go index b7f2b9eaf..d2f4b7a61 100644 --- a/pkg/deployment/agent_test.go +++ b/pkg/deployment/agent_test.go @@ -1,6 +1,7 @@ package deployment import ( + "fmt" "testing" "github.com/spf13/viper" @@ -118,3 +119,14 @@ func TestDaemonSetAgentResources(t *testing.T) { assert.Equal(t, *resource.NewQuantity(512, resource.DecimalSI), dep.Spec.Template.Spec.Containers[0].Resources.Limits[v1.ResourceLimitsEphemeralStorage]) assert.Equal(t, *resource.NewQuantity(512, resource.DecimalSI), dep.Spec.Template.Spec.Containers[0].Resources.Requests[v1.ResourceRequestsEphemeralStorage]) } + +func TestAgentLabels(t *testing.T) { + jaeger := v1alpha1.NewJaeger("TestAgentLabels") + jaeger.Spec.Agent.Strategy = "daemonset" + a := NewAgent(jaeger) + dep := a.Get() + assert.Equal(t, "jaeger-operator", dep.Spec.Template.Labels["app.kubernetes.io/managed-by"]) + assert.Equal(t, "agent", dep.Spec.Template.Labels["app.kubernetes.io/component"]) + assert.Equal(t, a.jaeger.Name, dep.Spec.Template.Labels["app.kubernetes.io/instance"]) + assert.Equal(t, fmt.Sprintf("%s-agent", a.jaeger.Name), dep.Spec.Template.Labels["app.kubernetes.io/name"]) +} diff --git a/pkg/deployment/all-in-one.go b/pkg/deployment/all-in-one.go index 53fed635c..dfdcbc502 100644 --- a/pkg/deployment/all-in-one.go +++ b/pkg/deployment/all-in-one.go @@ -35,7 +35,7 @@ func NewAllInOne(jaeger *v1alpha1.Jaeger) *AllInOne { // Get returns a pod for the current all-in-one configuration func (a *AllInOne) Get() *appsv1.Deployment { logrus.Debug("Assembling an all-in-one deployment") - selector := a.selector() + labels := a.labels() trueVar := true baseCommonSpec := v1alpha1.JaegerCommonSpec{ @@ -85,11 +85,11 @@ func (a *AllInOne) Get() *appsv1.Deployment { }, Spec: appsv1.DeploymentSpec{ Selector: &metav1.LabelSelector{ - MatchLabels: selector, + MatchLabels: labels, }, Template: v1.PodTemplateSpec{ ObjectMeta: metav1.ObjectMeta{ - Labels: selector, + Labels: labels, Annotations: commonSpec.Annotations, }, Spec: v1.PodSpec{ @@ -166,14 +166,25 @@ func (a *AllInOne) Get() *appsv1.Deployment { // Services returns a list of services to be deployed along with the all-in-one deployment func (a *AllInOne) Services() []*v1.Service { - selector := a.selector() + labels := a.labels() return []*v1.Service{ - service.NewCollectorService(a.jaeger, selector), - service.NewQueryService(a.jaeger, selector), - service.NewAgentService(a.jaeger, selector), + service.NewCollectorService(a.jaeger, labels), + service.NewQueryService(a.jaeger, labels), + service.NewAgentService(a.jaeger, labels), } } -func (a *AllInOne) selector() map[string]string { - return map[string]string{"app": "jaeger", "jaeger": a.jaeger.Name} +func (a *AllInOne) labels() map[string]string { + return map[string]string{ + "app": "jaeger", // TODO(jpkroehling): see collector.go in this package + "app.kubernetes.io/name": a.name(), + "app.kubernetes.io/instance": a.jaeger.Name, + "app.kubernetes.io/component": "all-in-one", + "app.kubernetes.io/part-of": "jaeger", + "app.kubernetes.io/managed-by": "jaeger-operator", + } +} + +func (a *AllInOne) name() string { + return a.jaeger.Name } diff --git a/pkg/deployment/all-in-one_test.go b/pkg/deployment/all-in-one_test.go index 1641f59ea..d2b215e9d 100644 --- a/pkg/deployment/all-in-one_test.go +++ b/pkg/deployment/all-in-one_test.go @@ -251,3 +251,12 @@ func TestAllInOneResources(t *testing.T) { assert.Equal(t, *resource.NewQuantity(512, resource.DecimalSI), dep.Spec.Template.Spec.Containers[0].Resources.Limits[v1.ResourceLimitsEphemeralStorage]) assert.Equal(t, *resource.NewQuantity(512, resource.DecimalSI), dep.Spec.Template.Spec.Containers[0].Resources.Requests[v1.ResourceRequestsEphemeralStorage]) } + +func TestAllInOneLabels(t *testing.T) { + a := NewAllInOne(v1alpha1.NewJaeger("TestAllInOneLabels")) + dep := a.Get() + assert.Equal(t, "jaeger-operator", dep.Spec.Template.Labels["app.kubernetes.io/managed-by"]) + assert.Equal(t, "all-in-one", dep.Spec.Template.Labels["app.kubernetes.io/component"]) + assert.Equal(t, a.jaeger.Name, dep.Spec.Template.Labels["app.kubernetes.io/instance"]) + assert.Equal(t, a.jaeger.Name, dep.Spec.Template.Labels["app.kubernetes.io/name"]) +} diff --git a/pkg/deployment/collector.go b/pkg/deployment/collector.go index c6a4edf4c..e17767d1a 100644 --- a/pkg/deployment/collector.go +++ b/pkg/deployment/collector.go @@ -39,7 +39,7 @@ func NewCollector(jaeger *v1alpha1.Jaeger) *Collector { func (c *Collector) Get() *appsv1.Deployment { logrus.Debugf("Assembling a collector deployment for %v", c.jaeger) - selector := c.selector() + labels := c.labels() trueVar := true replicas := int32(c.jaeger.Spec.Collector.Size) @@ -75,7 +75,7 @@ func (c *Collector) Get() *appsv1.Deployment { Kind: "Deployment", }, ObjectMeta: metav1.ObjectMeta{ - Name: fmt.Sprintf("%s-collector", c.jaeger.Name), + Name: c.name(), Namespace: c.jaeger.Namespace, OwnerReferences: []metav1.OwnerReference{ metav1.OwnerReference{ @@ -90,11 +90,11 @@ func (c *Collector) Get() *appsv1.Deployment { Spec: appsv1.DeploymentSpec{ Replicas: &replicas, Selector: &metav1.LabelSelector{ - MatchLabels: selector, + MatchLabels: labels, }, Template: v1.PodTemplateSpec{ ObjectMeta: metav1.ObjectMeta{ - Labels: selector, + Labels: labels, Annotations: commonSpec.Annotations, }, Spec: v1.PodSpec{ @@ -148,12 +148,27 @@ func (c *Collector) Get() *appsv1.Deployment { // Services returns a list of services to be deployed along with the all-in-one deployment func (c *Collector) Services() []*v1.Service { - selector := c.selector() return []*v1.Service{ - service.NewCollectorService(c.jaeger, selector), + service.NewCollectorService(c.jaeger, c.labels()), } } -func (c *Collector) selector() map[string]string { - return map[string]string{"app": "jaeger", "jaeger": c.jaeger.Name, "jaeger-component": "collector"} +func (c *Collector) labels() map[string]string { + return map[string]string{ + "app": "jaeger", // kept for backwards compatibility, remove by version 2.0 + "app.kubernetes.io/name": c.name(), + "app.kubernetes.io/instance": c.jaeger.Name, + "app.kubernetes.io/component": "collector", + "app.kubernetes.io/part-of": "jaeger", + "app.kubernetes.io/managed-by": "jaeger-operator", // should we qualify this with the operator's namespace? + + // the 'version' label is out for now for two reasons: + // 1. https://github.com/jaegertracing/jaeger-operator/issues/166 + // 2. these labels are also used as selectors, and as such, need to be consistent... this + // might be a problem once we support updating the jaeger version + } +} + +func (c *Collector) name() string { + return fmt.Sprintf("%s-collector", c.jaeger.Name) } diff --git a/pkg/deployment/collector_test.go b/pkg/deployment/collector_test.go index 7cc99cff2..bab0fb389 100644 --- a/pkg/deployment/collector_test.go +++ b/pkg/deployment/collector_test.go @@ -1,6 +1,7 @@ package deployment import ( + "fmt" "testing" "github.com/spf13/viper" @@ -266,3 +267,12 @@ func TestCollectorResources(t *testing.T) { assert.Equal(t, *resource.NewQuantity(512, resource.DecimalSI), dep.Spec.Template.Spec.Containers[0].Resources.Limits[v1.ResourceLimitsEphemeralStorage]) assert.Equal(t, *resource.NewQuantity(512, resource.DecimalSI), dep.Spec.Template.Spec.Containers[0].Resources.Requests[v1.ResourceRequestsEphemeralStorage]) } + +func TestCollectorLabels(t *testing.T) { + c := NewCollector(v1alpha1.NewJaeger("TestCollectorLabels")) + dep := c.Get() + assert.Equal(t, "jaeger-operator", dep.Spec.Template.Labels["app.kubernetes.io/managed-by"]) + assert.Equal(t, "collector", dep.Spec.Template.Labels["app.kubernetes.io/component"]) + assert.Equal(t, c.jaeger.Name, dep.Spec.Template.Labels["app.kubernetes.io/instance"]) + assert.Equal(t, fmt.Sprintf("%s-collector", c.jaeger.Name), dep.Spec.Template.Labels["app.kubernetes.io/name"]) +} diff --git a/pkg/deployment/query.go b/pkg/deployment/query.go index b8f820fdf..78ced973a 100644 --- a/pkg/deployment/query.go +++ b/pkg/deployment/query.go @@ -38,7 +38,7 @@ func NewQuery(jaeger *v1alpha1.Jaeger) *Query { // Get returns a deployment specification for the current instance func (q *Query) Get() *appsv1.Deployment { logrus.Debug("Assembling a query deployment") - selector := q.selector() + labels := q.labels() trueVar := true replicas := int32(q.jaeger.Spec.Query.Size) @@ -95,11 +95,11 @@ func (q *Query) Get() *appsv1.Deployment { Spec: appsv1.DeploymentSpec{ Replicas: &replicas, Selector: &metav1.LabelSelector{ - MatchLabels: selector, + MatchLabels: labels, }, Template: v1.PodTemplateSpec{ ObjectMeta: metav1.ObjectMeta{ - Labels: selector, + Labels: labels, Annotations: commonSpec.Annotations, }, Spec: v1.PodSpec{ @@ -141,12 +141,23 @@ func (q *Query) Get() *appsv1.Deployment { // Services returns a list of services to be deployed along with the query deployment func (q *Query) Services() []*v1.Service { - selector := q.selector() + labels := q.labels() return []*v1.Service{ - service.NewQueryService(q.jaeger, selector), + service.NewQueryService(q.jaeger, labels), } } -func (q *Query) selector() map[string]string { - return map[string]string{"app": "jaeger", "jaeger": q.jaeger.Name, "jaeger-component": "query"} +func (q *Query) labels() map[string]string { + return map[string]string{ + "app": "jaeger", // TODO(jpkroehling): see collector.go in this package + "app.kubernetes.io/name": q.name(), + "app.kubernetes.io/instance": q.jaeger.Name, + "app.kubernetes.io/component": "query", + "app.kubernetes.io/part-of": "jaeger", + "app.kubernetes.io/managed-by": "jaeger-operator", + } +} + +func (q *Query) name() string { + return fmt.Sprintf("%s-query", q.jaeger.Name) } diff --git a/pkg/deployment/query_test.go b/pkg/deployment/query_test.go index aadc0a8bf..195ebb393 100644 --- a/pkg/deployment/query_test.go +++ b/pkg/deployment/query_test.go @@ -254,3 +254,12 @@ func TestQueryResources(t *testing.T) { assert.Equal(t, *resource.NewQuantity(512, resource.DecimalSI), dep.Spec.Template.Spec.Containers[0].Resources.Limits[v1.ResourceLimitsEphemeralStorage]) assert.Equal(t, *resource.NewQuantity(512, resource.DecimalSI), dep.Spec.Template.Spec.Containers[0].Resources.Requests[v1.ResourceRequestsEphemeralStorage]) } + +func TestQueryLabels(t *testing.T) { + query := NewQuery(v1alpha1.NewJaeger("TestQueryLabels")) + dep := query.Get() + assert.Equal(t, "jaeger-operator", dep.Spec.Template.Labels["app.kubernetes.io/managed-by"]) + assert.Equal(t, "query", dep.Spec.Template.Labels["app.kubernetes.io/component"]) + assert.Equal(t, query.jaeger.Name, dep.Spec.Template.Labels["app.kubernetes.io/instance"]) + assert.Equal(t, fmt.Sprintf("%s-query", query.jaeger.Name), dep.Spec.Template.Labels["app.kubernetes.io/name"]) +}