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

Add periodic nodeIPAM GC #309

Merged
merged 1 commit into from
Feb 7, 2025
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
1 change: 1 addition & 0 deletions v2/cmd/coild/sub/run.go
Original file line number Diff line number Diff line change
Expand Up @@ -123,6 +123,7 @@ func subMain() error {
return err
}
}
setupLog.Info("run GC for starting up")
if err := nodeIPAM.GC(ctx); err != nil {
return err
}
Expand Down
29 changes: 16 additions & 13 deletions v2/pkg/config/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package config

import (
"flag"
"time"

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

type Config struct {
MetricsAddr string
HealthAddr string
PodTableId int
PodRulePrio int
ExportTableId int
ProtocolId int
SocketPath string
CompatCalico bool
EgressPort int
RegisterFromMain bool
ZapOpts zap.Options
EnableIPAM bool
EnableEgress bool
MetricsAddr string
HealthAddr string
PodTableId int
PodRulePrio int
ExportTableId int
ProtocolId int
SocketPath string
CompatCalico bool
EgressPort int
RegisterFromMain bool
ZapOpts zap.Options
EnableIPAM bool
EnableEgress bool
AddressBlockGCInterval time.Duration
}

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

goflags := flag.NewFlagSet("klog", flag.ExitOnError)
klog.InitFlags(goflags)
Expand Down
25 changes: 14 additions & 11 deletions v2/pkg/constants/constants.go
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package constants

import "time"

// annotation keys
const (
AnnPool = "coil.cybozu.com/pool"
Expand Down Expand Up @@ -64,17 +66,18 @@ const (

// Default config values
const (
DefautlMetricsAddr = ":9384"
DefautlHealthAddr = ":9385"
DefautlPodTableId = 116
DefautlPodRulePrio = 2000
DefautlExportTableId = 119
DefautlProtocolId = 30
DefaultCompatCalico = false
DefaultEgressPort = 5555
DefaultRegisterFromMain = false
DefaultEnableIPAM = true
DefaultEnableEgress = true
DefautlMetricsAddr = ":9384"
DefautlHealthAddr = ":9385"
DefautlPodTableId = 116
DefautlPodRulePrio = 2000
DefautlExportTableId = 119
DefautlProtocolId = 30
DefaultCompatCalico = false
DefaultEgressPort = 5555
DefaultRegisterFromMain = false
DefaultEnableIPAM = true
DefaultEnableEgress = true
DefaultAddressBlockGCInterval = 5 * time.Minute
)

// MetricsNS is the namespace for Prometheus metrics
Expand Down
13 changes: 13 additions & 0 deletions v2/runners/coild_server.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import (
"net"
"strconv"
"strings"
"time"

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

s.logger.Info("start periodic nodeIPAM GC")
gcTicker := time.NewTicker(s.cfg.AddressBlockGCInterval)
go func(ctx context.Context) {
for {
<-gcTicker.C
if err := s.nodeIPAM.GC(ctx); err != nil {
s.logger.Sugar().Error("failed to run GC", "error", err)
}
}

}(ctx)

return grpcServer.Serve(s.listener)
}

Expand Down
25 changes: 13 additions & 12 deletions v2/runners/coild_server_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -225,18 +225,19 @@ var _ = Describe("Coild server", func() {
logbuf = &bytes.Buffer{}
logger := zap.NewRaw(zap.WriteTo(logbuf), zap.StacktraceLevel(zapcore.DPanicLevel))
cfg := &config.Config{
MetricsAddr: constants.DefautlMetricsAddr,
HealthAddr: constants.DefautlMetricsAddr,
PodTableId: constants.DefautlPodTableId,
PodRulePrio: constants.DefautlPodRulePrio,
ExportTableId: constants.DefautlExportTableId,
ProtocolId: constants.DefautlProtocolId,
SocketPath: constants.DefaultSocketPath,
CompatCalico: constants.DefaultCompatCalico,
EgressPort: constants.DefaultEgressPort,
RegisterFromMain: constants.DefaultRegisterFromMain,
EnableIPAM: testIPAM,
EnableEgress: testEgress,
MetricsAddr: constants.DefautlMetricsAddr,
HealthAddr: constants.DefautlMetricsAddr,
PodTableId: constants.DefautlPodTableId,
PodRulePrio: constants.DefautlPodRulePrio,
ExportTableId: constants.DefautlExportTableId,
ProtocolId: constants.DefautlProtocolId,
SocketPath: constants.DefaultSocketPath,
CompatCalico: constants.DefaultCompatCalico,
EgressPort: constants.DefaultEgressPort,
RegisterFromMain: constants.DefaultRegisterFromMain,
EnableIPAM: testIPAM,
EnableEgress: testEgress,
AddressBlockGCInterval: 10 * time.Second,
}

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