Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Use recommended labels #172

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 16 additions & 5 deletions pkg/deployment/agent.go
Original file line number Diff line number Diff line change
Expand Up @@ -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{
Expand Down Expand Up @@ -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{
Expand Down Expand Up @@ -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)
}
12 changes: 12 additions & 0 deletions pkg/deployment/agent_test.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package deployment

import (
"fmt"
"testing"

"github.com/spf13/viper"
Expand Down Expand Up @@ -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"])
}
29 changes: 20 additions & 9 deletions pkg/deployment/all-in-one.go
Original file line number Diff line number Diff line change
Expand Up @@ -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{
Expand Down Expand Up @@ -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{
Expand Down Expand Up @@ -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
}
9 changes: 9 additions & 0 deletions pkg/deployment/all-in-one_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"])
}
31 changes: 23 additions & 8 deletions pkg/deployment/collector.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)

Expand Down Expand Up @@ -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{
Expand All @@ -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{
Expand Down Expand Up @@ -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,
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks reasonable - only one I wasn't sure about was the instance, where the docs describe it as "A unique name identifying the instance of an application" with an example of wordpress-abcxzy. But for our purpose it enables objects to be selected by various criteria.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'll apply the same change to the other objects then. Thanks!

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Don't forget we will also need to support the app label for a while - was thinking that should be same as app.kubernetes.io/name value?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do you have existing applications in mind, or is there a case of an application that still reads the app instead of app.kubernetes.io? If it's about maintaining backwards compatibility, we need to keep app: jaeger.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I guess the two areas to consider is:

  1. Istio - which needs the app label and app:jaeger should be fine
  2. Kiali - raised by Jay? where unique app label seemed to be a problem - but possibly this is not a blocker

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If they are also moving to use app.kubernetes.io instead of app, then I'd keep app: jaeger for backwards compatibility.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Unclear what the timeframe is for them changing, but yes probably the best approach.

"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)
}
10 changes: 10 additions & 0 deletions pkg/deployment/collector_test.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package deployment

import (
"fmt"
"testing"

"github.com/spf13/viper"
Expand Down Expand Up @@ -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"])
}
25 changes: 18 additions & 7 deletions pkg/deployment/query.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)

Expand Down Expand Up @@ -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{
Expand Down Expand Up @@ -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)
}
9 changes: 9 additions & 0 deletions pkg/deployment/query_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"])
}