Skip to content

Commit df69a07

Browse files
chore: Ensure that NodeClaim is always logged with Node (#1999)
1 parent 65414aa commit df69a07

File tree

11 files changed

+40
-17
lines changed

11 files changed

+40
-17
lines changed

pkg/controllers/node/health/controller.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,13 +74,13 @@ func (c *Controller) Register(_ context.Context, m manager.Manager) error {
7474

7575
func (c *Controller) Reconcile(ctx context.Context, node *corev1.Node) (reconcile.Result, error) {
7676
ctx = injection.WithControllerName(ctx, "node.health")
77-
ctx = log.IntoContext(ctx, log.FromContext(ctx).WithValues("Node", klog.KRef(node.Namespace, node.Name)))
7877

7978
// Validate that the node is owned by us
8079
nodeClaim, err := nodeutils.NodeClaimForNode(ctx, c.kubeClient, node)
8180
if err != nil {
8281
return reconcile.Result{}, nodeutils.IgnoreDuplicateNodeClaimError(nodeutils.IgnoreNodeClaimNotFoundError(err))
8382
}
83+
ctx = log.IntoContext(ctx, log.FromContext(ctx).WithValues("NodeClaim", klog.KObj(nodeClaim)))
8484

8585
// If a nodeclaim does has a nodepool label, validate the nodeclaims inside the nodepool are healthy (i.e bellow the allowed threshold)
8686
// In the case of standalone nodeclaim, validate the nodes inside the cluster are healthy before proceeding

pkg/controllers/node/hydration/controller.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,6 @@ func NewController(kubeClient client.Client, cloudProvider cloudprovider.CloudPr
5656

5757
func (c *Controller) Reconcile(ctx context.Context, n *corev1.Node) (reconcile.Result, error) {
5858
ctx = injection.WithControllerName(ctx, c.Name())
59-
ctx = log.IntoContext(ctx, log.FromContext(ctx).WithValues("Node", klog.KRef(n.Namespace, n.Name)))
6059

6160
nc, err := nodeutils.NodeClaimForNode(ctx, c.kubeClient, n)
6261
if err != nil {
@@ -68,6 +67,7 @@ func (c *Controller) Reconcile(ctx context.Context, n *corev1.Node) (reconcile.R
6867
if !nodeclaimutils.IsManaged(nc, c.cloudProvider) {
6968
return reconcile.Result{}, nil
7069
}
70+
ctx = log.IntoContext(ctx, log.FromContext(ctx).WithValues("NodeClaim", klog.KObj(nc)))
7171

7272
stored := n.DeepCopy()
7373
n.Labels = lo.Assign(n.Labels, map[string]string{

pkg/controllers/node/termination/controller.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ import (
2929
"k8s.io/apimachinery/pkg/api/errors"
3030
"k8s.io/apimachinery/pkg/util/sets"
3131
"k8s.io/client-go/util/workqueue"
32+
"k8s.io/klog/v2"
3233
"k8s.io/utils/clock"
3334
controllerruntime "sigs.k8s.io/controller-runtime"
3435
"sigs.k8s.io/controller-runtime/pkg/builder"
@@ -96,10 +97,12 @@ func (c *Controller) finalize(ctx context.Context, node *corev1.Node) (reconcile
9697
if err != nil {
9798
return reconcile.Result{}, fmt.Errorf("listing nodeclaims, %w", err)
9899
}
99-
100100
if err = c.deleteAllNodeClaims(ctx, nodeClaims...); err != nil {
101101
return reconcile.Result{}, fmt.Errorf("deleting nodeclaims, %w", err)
102102
}
103+
if len(nodeClaims) != 0 {
104+
ctx = log.IntoContext(ctx, log.FromContext(ctx).WithValues("NodeClaim", klog.KObj(nodeClaims[0])))
105+
}
103106

104107
nodeTerminationTime, err := c.nodeTerminationTime(node, nodeClaims...)
105108
if err != nil {

pkg/controllers/nodeclaim/consistency/controller.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import (
2626
corev1 "k8s.io/api/core/v1"
2727
"k8s.io/apimachinery/pkg/api/equality"
2828
"k8s.io/apimachinery/pkg/api/errors"
29+
"k8s.io/klog/v2"
2930
"k8s.io/utils/clock"
3031
controllerruntime "sigs.k8s.io/controller-runtime"
3132
"sigs.k8s.io/controller-runtime/pkg/builder"
@@ -77,6 +78,10 @@ func NewController(clk clock.Clock, kubeClient client.Client, cloudProvider clou
7778

7879
func (c *Controller) Reconcile(ctx context.Context, nodeClaim *v1.NodeClaim) (reconcile.Result, error) {
7980
ctx = injection.WithControllerName(ctx, "nodeclaim.consistency")
81+
if nodeClaim.Status.NodeName != "" {
82+
ctx = log.IntoContext(ctx, log.FromContext(ctx).WithValues("Node", klog.KRef("", nodeClaim.Status.NodeName)))
83+
}
84+
8085
if !nodeclaimutils.IsManaged(nodeClaim, c.cloudProvider) {
8186
return reconcile.Result{}, nil
8287
}

pkg/controllers/nodeclaim/disruption/controller.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,13 @@ import (
2424
"k8s.io/apimachinery/pkg/api/equality"
2525
"k8s.io/apimachinery/pkg/api/errors"
2626
"k8s.io/apimachinery/pkg/types"
27+
"k8s.io/klog/v2"
2728
"k8s.io/utils/clock"
2829
controllerruntime "sigs.k8s.io/controller-runtime"
2930
"sigs.k8s.io/controller-runtime/pkg/builder"
3031
"sigs.k8s.io/controller-runtime/pkg/client"
3132
"sigs.k8s.io/controller-runtime/pkg/controller"
33+
"sigs.k8s.io/controller-runtime/pkg/log"
3234
"sigs.k8s.io/controller-runtime/pkg/manager"
3335
"sigs.k8s.io/controller-runtime/pkg/reconcile"
3436

@@ -67,6 +69,9 @@ func NewController(clk clock.Clock, kubeClient client.Client, cloudProvider clou
6769
// Reconcile executes a control loop for the resource
6870
func (c *Controller) Reconcile(ctx context.Context, nodeClaim *v1.NodeClaim) (reconcile.Result, error) {
6971
ctx = injection.WithControllerName(ctx, "nodeclaim.disruption")
72+
if nodeClaim.Status.NodeName != "" {
73+
ctx = log.IntoContext(ctx, log.FromContext(ctx).WithValues("Node", klog.KRef("", nodeClaim.Status.NodeName)))
74+
}
7075

7176
if !nodeclaimutils.IsManaged(nodeClaim, c.cloudProvider) {
7277
return reconcile.Result{}, nil

pkg/controllers/nodeclaim/expiration/controller.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import (
2121
"strings"
2222
"time"
2323

24+
"k8s.io/klog/v2"
2425
"k8s.io/utils/clock"
2526
controllerruntime "sigs.k8s.io/controller-runtime"
2627
"sigs.k8s.io/controller-runtime/pkg/builder"
@@ -29,6 +30,8 @@ import (
2930
"sigs.k8s.io/controller-runtime/pkg/manager"
3031
"sigs.k8s.io/controller-runtime/pkg/reconcile"
3132

33+
"sigs.k8s.io/karpenter/pkg/operator/injection"
34+
3235
v1 "sigs.k8s.io/karpenter/pkg/apis/v1"
3336
"sigs.k8s.io/karpenter/pkg/cloudprovider"
3437
"sigs.k8s.io/karpenter/pkg/metrics"
@@ -52,6 +55,11 @@ func NewController(clk clock.Clock, kubeClient client.Client, cloudProvider clou
5255
}
5356

5457
func (c *Controller) Reconcile(ctx context.Context, nodeClaim *v1.NodeClaim) (reconcile.Result, error) {
58+
ctx = injection.WithControllerName(ctx, c.Name())
59+
if nodeClaim.Status.NodeName != "" {
60+
ctx = log.IntoContext(ctx, log.FromContext(ctx).WithValues("Node", klog.KRef("", nodeClaim.Status.NodeName)))
61+
}
62+
5563
if !nodeclaimutils.IsManaged(nodeClaim, c.cloudProvider) {
5664
return reconcile.Result{}, nil
5765
}
@@ -87,6 +95,10 @@ func (c *Controller) Reconcile(ctx context.Context, nodeClaim *v1.NodeClaim) (re
8795
return reconcile.Result{}, nil
8896
}
8997

98+
func (c *Controller) Name() string {
99+
return "nodeclaim.expiration"
100+
}
101+
90102
func (c *Controller) Register(_ context.Context, m manager.Manager) error {
91103
return controllerruntime.NewControllerManagedBy(m).
92104
Named("nodeclaim.expiration").

pkg/controllers/nodeclaim/garbagecollection/controller.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,8 +101,8 @@ func (c *Controller) Reconcile(ctx context.Context) (reconcile.Result, error) {
101101
}
102102
log.FromContext(ctx).WithValues(
103103
"NodeClaim", klog.KRef("", nodeClaims[i].Name),
104+
"Node", klog.KRef("", nodeClaims[i].Status.NodeName),
104105
"provider-id", nodeClaims[i].Status.ProviderID,
105-
"nodepool", nodeClaims[i].Labels[v1.NodePoolLabelKey],
106106
).V(1).Info("garbage collecting nodeclaim with no cloudprovider representation")
107107
metrics.NodeClaimsDisruptedTotal.Inc(map[string]string{
108108
metrics.ReasonLabel: "garbage_collected",

pkg/controllers/nodeclaim/hydration/controller.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,8 @@ func NewController(kubeClient client.Client, cloudProvider cloudprovider.CloudPr
5454

5555
func (c *Controller) Reconcile(ctx context.Context, nc *v1.NodeClaim) (reconcile.Result, error) {
5656
ctx = injection.WithControllerName(ctx, c.Name())
57-
ctx = log.IntoContext(ctx, log.FromContext(ctx).WithValues("NodeClaim", klog.KRef(nc.Namespace, nc.Name)))
57+
ctx = log.IntoContext(ctx, log.FromContext(ctx).WithValues("Node", klog.KRef("", nc.Status.NodeName)))
58+
5859
if !nodeclaimutils.IsManaged(nc, c.cloudProvider) {
5960
return reconcile.Result{}, nil
6061
}

pkg/controllers/nodeclaim/lifecycle/controller.go

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -52,10 +52,6 @@ import (
5252
terminationutil "sigs.k8s.io/karpenter/pkg/utils/termination"
5353
)
5454

55-
type nodeClaimReconciler interface {
56-
Reconcile(context.Context, *v1.NodeClaim) (reconcile.Result, error)
57-
}
58-
5955
// Controller is a NodeClaim Lifecycle controller that manages the lifecycle of the NodeClaim up until its termination
6056
// The controller is responsible for ensuring that new Nodes get launched, that they have properly registered with
6157
// the cluster as nodes and that they are properly initialized, ensuring that nodeclaims that do not have matching nodes
@@ -108,9 +104,15 @@ func (c *Controller) Name() string {
108104
return "nodeclaim.lifecycle"
109105
}
110106

107+
// nolint:gocyclo
111108
func (c *Controller) Reconcile(ctx context.Context, nodeClaim *v1.NodeClaim) (reconcile.Result, error) {
112109
ctx = injection.WithControllerName(ctx, c.Name())
113-
110+
if nodeClaim.Status.ProviderID != "" {
111+
ctx = log.IntoContext(ctx, log.FromContext(ctx).WithValues("provider-id", nodeClaim.Status.ProviderID))
112+
}
113+
if nodeClaim.Status.NodeName != "" {
114+
ctx = log.IntoContext(ctx, log.FromContext(ctx).WithValues("Node", klog.KRef("", nodeClaim.Status.NodeName)))
115+
}
114116
if !nodeclaimutils.IsManaged(nodeClaim, c.cloudProvider) {
115117
return reconcile.Result{}, nil
116118
}
@@ -137,7 +139,7 @@ func (c *Controller) Reconcile(ctx context.Context, nodeClaim *v1.NodeClaim) (re
137139
stored = nodeClaim.DeepCopy()
138140
var results []reconcile.Result
139141
var errs error
140-
for _, reconciler := range []nodeClaimReconciler{
142+
for _, reconciler := range []reconcile.TypedReconciler[*v1.NodeClaim]{
141143
c.launch,
142144
c.registration,
143145
c.initialization,
@@ -169,7 +171,6 @@ func (c *Controller) Reconcile(ctx context.Context, nodeClaim *v1.NodeClaim) (re
169171

170172
//nolint:gocyclo
171173
func (c *Controller) finalize(ctx context.Context, nodeClaim *v1.NodeClaim) (reconcile.Result, error) {
172-
ctx = log.IntoContext(ctx, log.FromContext(ctx).WithValues("Node", klog.KRef("", nodeClaim.Status.NodeName), "provider-id", nodeClaim.Status.ProviderID))
173174
if !controllerutil.ContainsFinalizer(nodeClaim, v1.TerminationFinalizer) {
174175
return reconcile.Result{}, nil
175176
}

pkg/controllers/nodeclaim/lifecycle/initialization.go

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@ import (
2323
"github.com/samber/lo"
2424
corev1 "k8s.io/api/core/v1"
2525
"k8s.io/apimachinery/pkg/api/equality"
26-
"k8s.io/klog/v2"
2726
"sigs.k8s.io/controller-runtime/pkg/client"
2827
"sigs.k8s.io/controller-runtime/pkg/log"
2928
"sigs.k8s.io/controller-runtime/pkg/reconcile"
@@ -53,13 +52,11 @@ func (i *Initialization) Reconcile(ctx context.Context, nodeClaim *v1.NodeClaim)
5352
if !nodeClaim.StatusConditions().Get(v1.ConditionTypeRegistered).IsTrue() {
5453
return reconcile.Result{}, nil
5554
}
56-
ctx = log.IntoContext(ctx, log.FromContext(ctx).WithValues("provider-id", nodeClaim.Status.ProviderID))
5755
node, err := nodeclaimutils.NodeForNodeClaim(ctx, i.kubeClient, nodeClaim)
5856
if err != nil {
5957
nodeClaim.StatusConditions().SetUnknownWithReason(v1.ConditionTypeInitialized, "NodeNotFound", "Node not registered with cluster")
6058
return reconcile.Result{}, nil //nolint:nilerr
6159
}
62-
ctx = log.IntoContext(ctx, log.FromContext(ctx).WithValues("Node", klog.KRef("", node.Name)))
6360
if nodeutils.GetCondition(node, corev1.NodeReady).Status != corev1.ConditionTrue {
6461
nodeClaim.StatusConditions().SetUnknownWithReason(v1.ConditionTypeInitialized, "NodeNotReady", "Node status is NotReady")
6562
return reconcile.Result{}, nil

0 commit comments

Comments
 (0)