Skip to content

Commit 8ca04a5

Browse files
committed
update at 2024-08-09 17:17:05
1 parent 7d8909f commit 8ca04a5

File tree

2 files changed

+60
-8
lines changed

2 files changed

+60
-8
lines changed

internal/controller/dedicatedclblistener_controller.go

+36-8
Original file line numberDiff line numberDiff line change
@@ -229,15 +229,18 @@ func (r *DedicatedCLBListenerReconciler) ensureBackendPod(ctx context.Context, l
229229
backendPod := lis.Spec.BackendPod
230230
if backendPod == nil {
231231
if lis.Status.State == networkingv1alpha1.DedicatedCLBListenerStateBound { // 但监听器状态是已占用,需要解绑
232-
log.V(6).Info("no backend pod configured, try to deregister all targets")
232+
r.Recorder.Event(lis, corev1.EventTypeNormal, "PodChangeToNil", "no backend pod configured, try to deregister all targets")
233233
// 解绑所有后端
234234
if err := clb.DeregisterAllTargets(ctx, lis.Spec.LbRegion, lis.Spec.LbId, lis.Status.ListenerId); err != nil {
235+
r.Recorder.Event(lis, corev1.EventTypeWarning, "Deregister", err.Error())
235236
return err
236237
}
237238
// 更新监听器状态
238239
if err := r.setState(ctx, lis, networkingv1alpha1.DedicatedCLBListenerStateAvailable); err != nil {
240+
r.Recorder.Event(lis, corev1.EventTypeWarning, "UpdateStatusFailed", err.Error())
239241
return err
240242
}
243+
r.Recorder.Event(lis, corev1.EventTypeNormal, "UpdateStatus", "listener available again")
241244
}
242245
return nil
243246
}
@@ -258,9 +261,11 @@ func (r *DedicatedCLBListenerReconciler) ensureBackendPod(ctx context.Context, l
258261
log.V(5).Info("configured pod not found, ignore reconcile the pod")
259262
// 后端pod不存在,确保状态为 Available
260263
if lis.Status.State != networkingv1alpha1.DedicatedCLBListenerStateAvailable {
261-
log.V(5).Info("configured pod not found but state is not available, reset state to available", "oldState", lis.Status.State)
264+
msg := fmt.Sprintf("configured pod not found but state is %q, reset state to available", lis.Status.State)
265+
r.Recorder.Event(lis, corev1.EventTypeNormal, "UpdateStatus", msg)
262266
lis.Status.State = networkingv1alpha1.DedicatedCLBListenerStateAvailable
263267
if err := r.Status().Update(ctx, lis); err != nil {
268+
r.Recorder.Event(lis, corev1.EventTypeWarning, "UpdateStatusFailed", err.Error())
264269
return err
265270
}
266271
return nil
@@ -277,8 +282,9 @@ func (r *DedicatedCLBListenerReconciler) ensureBackendPod(ctx context.Context, l
277282
"add pod finalizer",
278283
"finalizerName", podFinalizerName,
279284
)
285+
r.Recorder.Event(lis, corev1.EventTypeNormal, "AddPodFinalizer", "add finalizer to pod "+pod.Name)
280286
if err := kube.AddPodFinalizer(ctx, pod, podFinalizerName); err != nil {
281-
log.Error(err, "failed to add pod finalizer")
287+
r.Recorder.Event(lis, corev1.EventTypeWarning, "AddPodFinalizer", err.Error())
282288
return err
283289
}
284290
}
@@ -287,8 +293,10 @@ func (r *DedicatedCLBListenerReconciler) ensureBackendPod(ctx context.Context, l
287293
return nil
288294
}
289295
// 绑定rs
296+
r.Recorder.Event(lis, corev1.EventTypeNormal, "DeregisterPod", "deregister pod "+pod.Name)
290297
targets, err := clb.DescribeTargets(ctx, lis.Spec.LbRegion, lis.Spec.LbId, lis.Status.ListenerId)
291298
if err != nil {
299+
r.Recorder.Event(lis, corev1.EventTypeWarning, "DeregisterPod", err.Error())
292300
return err
293301
}
294302
toDel := []clb.Target{}
@@ -301,42 +309,56 @@ func (r *DedicatedCLBListenerReconciler) ensureBackendPod(ctx context.Context, l
301309
}
302310
}
303311
if len(toDel) > 0 {
312+
r.Recorder.Event(lis, corev1.EventTypeNormal, "DeregisterExtra", fmt.Sprintf("deregister extra rs %v", toDel))
304313
log.Info("deregister extra rs", "extraRs", toDel)
305314
if err := clb.DeregisterTargetsForListener(ctx, lis.Spec.LbRegion, lis.Spec.LbId, lis.Status.ListenerId, toDel...); err != nil {
315+
r.Recorder.Event(lis, corev1.EventTypeWarning, "DeregisterExtra", err.Error())
306316
return err
307317
}
308318
}
309319
if !needAdd {
310320
log.V(6).Info("backend pod already registered", "podIP", pod.Status.PodIP)
311321
return nil
312322
}
313-
log.V(6).Info("register backend pod", "podIP", pod.Status.PodIP)
323+
r.Recorder.Event(
324+
lis, corev1.EventTypeNormal, "RegisterPod",
325+
fmt.Sprintf("register pod %s/%s:%d", pod.Name, pod.Status.PodIP, backendPod.Port),
326+
)
314327
if err := clb.RegisterTargets(
315328
ctx, lis.Spec.LbRegion, lis.Spec.LbId, lis.Status.ListenerId,
316329
clb.Target{TargetIP: pod.Status.PodIP, TargetPort: backendPod.Port},
317330
); err != nil {
331+
r.Recorder.Event(lis, corev1.EventTypeWarning, "RegisterPod", err.Error())
318332
return err
319333
}
320334
// 更新监听器状态
321335
log.V(6).Info("set listener state to bound")
322336
lis.Status.State = networkingv1alpha1.DedicatedCLBListenerStateBound
337+
r.Recorder.Event(lis, corev1.EventTypeNormal, "UpdateStatus", "listener bound")
323338
if err := r.Status().Update(ctx, lis); err != nil {
339+
r.Recorder.Event(lis, corev1.EventTypeWarning, "UpdateStatusFailed", err.Error())
324340
return err
325341
}
326342
// 更新Pod注解
327343
addr, err := clb.GetClbExternalAddress(ctx, lis.Spec.LbId, lis.Spec.LbRegion)
328344
if err != nil {
345+
r.Recorder.Event(lis, corev1.EventTypeWarning, "GetClbExternalAddress", err.Error())
329346
return err
330347
}
331348
addr = fmt.Sprintf("%s:%d", addr, lis.Spec.LbPort)
332-
log.V(6).Info("set external address to status", "address", addr)
333349
lis.Status.Address = addr
334-
return r.Status().Update(ctx, lis)
350+
r.Recorder.Event(lis, corev1.EventTypeNormal, "UpdateStatus", "set external address to "+addr)
351+
if err := r.Status().Update(ctx, lis); err != nil {
352+
r.Recorder.Event(lis, corev1.EventTypeWarning, "UpdateStatusFailed", err.Error())
353+
return err
354+
}
355+
return nil
335356
}
336357

337358
// pod 正在删除,清理rs
338-
log.V(6).Info("pod deleting, try to deregister all targets")
359+
r.Recorder.Event(lis, corev1.EventTypeNormal, "PodDeleting", "try to deregister all targets")
339360
if err := clb.DeregisterAllTargets(ctx, lis.Spec.LbRegion, lis.Spec.LbId, lis.Status.ListenerId); err != nil {
361+
r.Recorder.Event(lis, corev1.EventTypeWarning, "DeregisterFailed", err.Error())
340362
return err
341363
}
342364
// 清理成功,删除 pod finalizer
@@ -345,10 +367,16 @@ func (r *DedicatedCLBListenerReconciler) ensureBackendPod(ctx context.Context, l
345367
"finalizerName", podFinalizerName,
346368
)
347369
if err := kube.RemovePodFinalizer(ctx, pod, podFinalizerName); err != nil {
370+
r.Recorder.Event(lis, corev1.EventTypeWarning, "RemovePodFinalizerFailed", err.Error())
348371
return err
349372
}
350373
// 更新 DedicatedCLBListener
351-
return r.setState(ctx, lis, networkingv1alpha1.DedicatedCLBListenerStateAvailable)
374+
r.Recorder.Event(lis, corev1.EventTypeNormal, "UpdateStatus", "listener available")
375+
if err := r.setState(ctx, lis, networkingv1alpha1.DedicatedCLBListenerStateAvailable); err != nil {
376+
r.Recorder.Event(lis, corev1.EventTypeNormal, "UpdateStatusFailed", err.Error())
377+
return err
378+
}
379+
return nil
352380
}
353381

354382
func (r *DedicatedCLBListenerReconciler) ensureListener(ctx context.Context, log logr.Logger, lis *networkingv1alpha1.DedicatedCLBListener) error {

pkg/clb/listener.go

+24
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"context"
55
"errors"
66
"fmt"
7+
"sync"
78

89
clb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/clb/v20180317"
910
"github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common"
@@ -64,9 +65,29 @@ func GetListenerByPort(ctx context.Context, region, lbId string, port int64, pro
6465

6566
const TkePodListenerName = "TKE-DEDICATED-POD"
6667

68+
var (
69+
lock sync.Mutex
70+
lbLockMap = make(map[string]*sync.Mutex)
71+
)
72+
73+
func getLbLock(lbId string) *sync.Mutex {
74+
lock.Lock()
75+
defer lock.Unlock()
76+
mux, ok := lbLockMap[lbId]
77+
if !ok {
78+
mux = &sync.Mutex{}
79+
lbLockMap[lbId] = mux
80+
}
81+
return mux
82+
}
83+
6784
func CreateListener(ctx context.Context, region string, req *clb.CreateListenerRequest) (id string, err error) {
6885
req.ListenerNames = []*string{common.StringPtr(TkePodListenerName)}
6986
client := GetClient(region)
87+
lbId := *req.LoadBalancerId
88+
mux := getLbLock(lbId)
89+
mux.Lock()
90+
defer mux.Unlock()
7091
resp, err := client.CreateListenerWithContext(ctx, req)
7192
if err != nil {
7293
return
@@ -105,6 +126,9 @@ func DeleteListener(ctx context.Context, region, lbId, listenerId string) error
105126
req.LoadBalancerId = &lbId
106127
req.ListenerId = &listenerId
107128
client := GetClient(region)
129+
mux := getLbLock(lbId)
130+
mux.Lock()
131+
defer mux.Unlock()
108132
resp, err := client.DeleteListenerWithContext(ctx, req)
109133
if err != nil {
110134
return err

0 commit comments

Comments
 (0)