Skip to content

Commit c553221

Browse files
authored
Merge pull request #309 from cybozu-go/add-addressblock-gc
Add periodic nodeIPAM GC
2 parents 84b5bf6 + 365371c commit c553221

File tree

5 files changed

+57
-36
lines changed

5 files changed

+57
-36
lines changed

v2/cmd/coild/sub/run.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,7 @@ func subMain() error {
123123
return err
124124
}
125125
}
126+
setupLog.Info("run GC for starting up")
126127
if err := nodeIPAM.GC(ctx); err != nil {
127128
return err
128129
}

v2/pkg/config/config.go

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package config
22

33
import (
44
"flag"
5+
"time"
56

67
"github.com/cybozu-go/coil/v2/pkg/constants"
78
"github.com/spf13/cobra"
@@ -10,19 +11,20 @@ import (
1011
)
1112

1213
type Config struct {
13-
MetricsAddr string
14-
HealthAddr string
15-
PodTableId int
16-
PodRulePrio int
17-
ExportTableId int
18-
ProtocolId int
19-
SocketPath string
20-
CompatCalico bool
21-
EgressPort int
22-
RegisterFromMain bool
23-
ZapOpts zap.Options
24-
EnableIPAM bool
25-
EnableEgress bool
14+
MetricsAddr string
15+
HealthAddr string
16+
PodTableId int
17+
PodRulePrio int
18+
ExportTableId int
19+
ProtocolId int
20+
SocketPath string
21+
CompatCalico bool
22+
EgressPort int
23+
RegisterFromMain bool
24+
ZapOpts zap.Options
25+
EnableIPAM bool
26+
EnableEgress bool
27+
AddressBlockGCInterval time.Duration
2628
}
2729

2830
func Parse(rootCmd *cobra.Command) *Config {
@@ -40,6 +42,7 @@ func Parse(rootCmd *cobra.Command) *Config {
4042
pf.BoolVar(&config.RegisterFromMain, "register-from-main", constants.DefaultRegisterFromMain, "help migration from Coil 2.0.1")
4143
pf.BoolVar(&config.EnableIPAM, "enable-ipam", constants.DefaultEnableIPAM, "enable IPAM related features")
4244
pf.BoolVar(&config.EnableEgress, "enable-egress", constants.DefaultEnableEgress, "enable IPAM related features")
45+
pf.DurationVar(&config.AddressBlockGCInterval, "addressblock-gc-interval", constants.DefaultAddressBlockGCInterval, "interval for address block GC")
4346

4447
goflags := flag.NewFlagSet("klog", flag.ExitOnError)
4548
klog.InitFlags(goflags)

v2/pkg/constants/constants.go

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package constants
22

3+
import "time"
4+
35
// annotation keys
46
const (
57
AnnPool = "coil.cybozu.com/pool"
@@ -64,17 +66,18 @@ const (
6466

6567
// Default config values
6668
const (
67-
DefautlMetricsAddr = ":9384"
68-
DefautlHealthAddr = ":9385"
69-
DefautlPodTableId = 116
70-
DefautlPodRulePrio = 2000
71-
DefautlExportTableId = 119
72-
DefautlProtocolId = 30
73-
DefaultCompatCalico = false
74-
DefaultEgressPort = 5555
75-
DefaultRegisterFromMain = false
76-
DefaultEnableIPAM = true
77-
DefaultEnableEgress = true
69+
DefautlMetricsAddr = ":9384"
70+
DefautlHealthAddr = ":9385"
71+
DefautlPodTableId = 116
72+
DefautlPodRulePrio = 2000
73+
DefautlExportTableId = 119
74+
DefautlProtocolId = 30
75+
DefaultCompatCalico = false
76+
DefaultEgressPort = 5555
77+
DefaultRegisterFromMain = false
78+
DefaultEnableIPAM = true
79+
DefaultEnableEgress = true
80+
DefaultAddressBlockGCInterval = 5 * time.Minute
7881
)
7982

8083
// MetricsNS is the namespace for Prometheus metrics

v2/runners/coild_server.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import (
88
"net"
99
"strconv"
1010
"strings"
11+
"time"
1112

1213
current "github.com/containernetworking/cni/pkg/types/100"
1314
coilv2 "github.com/cybozu-go/coil/v2/api/v2"
@@ -159,6 +160,18 @@ func (s *coildServer) Start(ctx context.Context) error {
159160
grpcServer.GracefulStop()
160161
}()
161162

163+
s.logger.Info("start periodic nodeIPAM GC")
164+
gcTicker := time.NewTicker(s.cfg.AddressBlockGCInterval)
165+
go func(ctx context.Context) {
166+
for {
167+
<-gcTicker.C
168+
if err := s.nodeIPAM.GC(ctx); err != nil {
169+
s.logger.Sugar().Error("failed to run GC", "error", err)
170+
}
171+
}
172+
173+
}(ctx)
174+
162175
return grpcServer.Serve(s.listener)
163176
}
164177

v2/runners/coild_server_test.go

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -225,18 +225,19 @@ var _ = Describe("Coild server", func() {
225225
logbuf = &bytes.Buffer{}
226226
logger := zap.NewRaw(zap.WriteTo(logbuf), zap.StacktraceLevel(zapcore.DPanicLevel))
227227
cfg := &config.Config{
228-
MetricsAddr: constants.DefautlMetricsAddr,
229-
HealthAddr: constants.DefautlMetricsAddr,
230-
PodTableId: constants.DefautlPodTableId,
231-
PodRulePrio: constants.DefautlPodRulePrio,
232-
ExportTableId: constants.DefautlExportTableId,
233-
ProtocolId: constants.DefautlProtocolId,
234-
SocketPath: constants.DefaultSocketPath,
235-
CompatCalico: constants.DefaultCompatCalico,
236-
EgressPort: constants.DefaultEgressPort,
237-
RegisterFromMain: constants.DefaultRegisterFromMain,
238-
EnableIPAM: testIPAM,
239-
EnableEgress: testEgress,
228+
MetricsAddr: constants.DefautlMetricsAddr,
229+
HealthAddr: constants.DefautlMetricsAddr,
230+
PodTableId: constants.DefautlPodTableId,
231+
PodRulePrio: constants.DefautlPodRulePrio,
232+
ExportTableId: constants.DefautlExportTableId,
233+
ProtocolId: constants.DefautlProtocolId,
234+
SocketPath: constants.DefaultSocketPath,
235+
CompatCalico: constants.DefaultCompatCalico,
236+
EgressPort: constants.DefaultEgressPort,
237+
RegisterFromMain: constants.DefaultRegisterFromMain,
238+
EnableIPAM: testIPAM,
239+
EnableEgress: testEgress,
240+
AddressBlockGCInterval: 10 * time.Second,
240241
}
241242

242243
serv := NewCoildServer(l, mgr, nodeIPAM, podNet, natsetup, cfg, logger, mockAlias)

0 commit comments

Comments
 (0)