Skip to content

Commit 0d9ea2f

Browse files
committed
multus affinity
Signed-off-by: Icarus9913 <[email protected]>
1 parent 28fb508 commit 0d9ea2f

25 files changed

+408
-110
lines changed

.licenserc.yaml

+1-1
Original file line numberDiff line numberDiff line change
@@ -23,4 +23,4 @@ header:
2323
- '**/*.sh'
2424
paths-ignore:
2525
- 'vendor'
26-
comment: on-failure
26+
comment: on-failure

charts/spiderpool/crds/spiderpool.spidernet.io_spiderippools.yaml

+23
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,18 @@ spec:
4343
- description: disable
4444
jsonPath: .spec.disable
4545
name: DISABLE
46+
priority: 10
4647
type: boolean
48+
- description: disable
49+
jsonPath: .spec.nodeName
50+
name: NodeName
51+
priority: 10
52+
type: string
53+
- description: disable
54+
jsonPath: .spec.multusName
55+
name: MultusName
56+
priority: 10
57+
type: string
4758
- description: AppNamespace
4859
jsonPath: .spec.podAffinity.matchLabels['ipam\.spidernet\.io/app\-namespace']
4960
name: APP-NAMESPACE
@@ -91,6 +102,10 @@ spec:
91102
items:
92103
type: string
93104
type: array
105+
multusName:
106+
items:
107+
type: string
108+
type: array
94109
namespaceAffinity:
95110
description: A label selector is a label query over a set of resources.
96111
The result of matchLabels and matchExpressions are ANDed. An empty
@@ -139,6 +154,10 @@ spec:
139154
type: object
140155
type: object
141156
x-kubernetes-map-type: atomic
157+
namespaceName:
158+
items:
159+
type: string
160+
type: array
142161
nodeAffinity:
143162
description: A label selector is a label query over a set of resources.
144163
The result of matchLabels and matchExpressions are ANDed. An empty
@@ -187,6 +206,10 @@ spec:
187206
type: object
188207
type: object
189208
x-kubernetes-map-type: atomic
209+
nodeName:
210+
items:
211+
type: string
212+
type: array
190213
podAffinity:
191214
description: A label selector is a label query over a set of resources.
192215
The result of matchLabels and matchExpressions are ANDed. An empty

charts/spiderpool/templates/daemonset.yaml

+4
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,10 @@ spec:
166166
value: {{ .Values.spiderpoolAgent.httpPort | quote }}
167167
- name: SPIDERPOOL_GOPS_LISTEN_PORT
168168
value: {{ .Values.spiderpoolAgent.debug.gopsPort | quote }}
169+
{{- if .Values.multus.multusCNI.defaultCniCRName }}
170+
- name: MULTUS_CLUSTER_NETWORK
171+
value: {{ .Release.Namespace }}/{{ .Values.multus.multusCNI.defaultCniCRName }}
172+
{{ end }}
169173
{{- with .Values.spiderpoolAgent.extraEnv }}
170174
{{- toYaml . | nindent 8 }}
171175
{{- end }}

charts/spiderpool/templates/multus-daemonset.yaml

+1-1
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ data:
119119
"namespaceIsolation": false,
120120
"clusterNetwork": "{{ .Values.multus.multusCNI.defaultCniCRName }}",
121121
"defaultNetworks": [],
122-
"multusNamespace": "",
122+
"multusNamespace": "{{ .Release.Namespace }}",
123123
"systemNamespaces": [],
124124
"kubeconfig": "/etc/cni/net.d/multus.d/multus.kubeconfig"
125125
}

cmd/coordinator/cmd/command_add.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ package cmd
66
import (
77
"context"
88
"fmt"
9-
"golang.org/x/sync/errgroup"
109
"time"
1110

1211
"github.com/containernetworking/cni/pkg/skel"
@@ -15,17 +14,18 @@ import (
1514
"github.com/containernetworking/plugins/pkg/ns"
1615
"github.com/vishvananda/netlink"
1716
"go.uber.org/zap"
17+
"golang.org/x/sync/errgroup"
1818

1919
"github.com/spidernet-io/spiderpool/api/v1/agent/client/daemonset"
2020
"github.com/spidernet-io/spiderpool/api/v1/agent/models"
21-
"github.com/spidernet-io/spiderpool/cmd/spiderpool-agent/cmd"
2221
plugincmd "github.com/spidernet-io/spiderpool/cmd/spiderpool/cmd"
2322
"github.com/spidernet-io/spiderpool/pkg/constant"
2423
"github.com/spidernet-io/spiderpool/pkg/logutils"
2524
"github.com/spidernet-io/spiderpool/pkg/networking/gwconnection"
2625
"github.com/spidernet-io/spiderpool/pkg/networking/ipchecking"
2726
"github.com/spidernet-io/spiderpool/pkg/networking/networking"
2827
"github.com/spidernet-io/spiderpool/pkg/networking/sysctl"
28+
"github.com/spidernet-io/spiderpool/pkg/openapi"
2929
)
3030

3131
func CmdAdd(args *skel.CmdArgs) (err error) {
@@ -36,7 +36,7 @@ func CmdAdd(args *skel.CmdArgs) (err error) {
3636
return fmt.Errorf("failed to load CNI ENV args: %w", err)
3737
}
3838

39-
client, err := cmd.NewAgentOpenAPIUnixClient(constant.DefaultIPAMUnixSocketPath)
39+
client, err := openapi.NewAgentOpenAPIUnixClient(constant.DefaultIPAMUnixSocketPath)
4040
if err != nil {
4141
return err
4242
}

cmd/coordinator/cmd/command_del.go

+10-10
Original file line numberDiff line numberDiff line change
@@ -5,21 +5,21 @@ package cmd
55

66
import (
77
"fmt"
8-
"github.com/containernetworking/cni/pkg/types"
9-
"github.com/spidernet-io/spiderpool/api/v1/agent/models"
10-
plugincmd "github.com/spidernet-io/spiderpool/cmd/spiderpool/cmd"
118
"os"
129

13-
"github.com/spidernet-io/spiderpool/api/v1/agent/client/daemonset"
14-
"github.com/spidernet-io/spiderpool/cmd/spiderpool-agent/cmd"
15-
"github.com/spidernet-io/spiderpool/pkg/constant"
16-
"github.com/spidernet-io/spiderpool/pkg/logutils"
17-
"github.com/spidernet-io/spiderpool/pkg/networking/networking"
18-
1910
"github.com/containernetworking/cni/pkg/skel"
11+
"github.com/containernetworking/cni/pkg/types"
2012
"github.com/containernetworking/plugins/pkg/ns"
2113
"github.com/vishvananda/netlink"
2214
"go.uber.org/zap"
15+
16+
"github.com/spidernet-io/spiderpool/api/v1/agent/client/daemonset"
17+
"github.com/spidernet-io/spiderpool/api/v1/agent/models"
18+
plugincmd "github.com/spidernet-io/spiderpool/cmd/spiderpool/cmd"
19+
"github.com/spidernet-io/spiderpool/pkg/constant"
20+
"github.com/spidernet-io/spiderpool/pkg/logutils"
21+
"github.com/spidernet-io/spiderpool/pkg/networking/networking"
22+
"github.com/spidernet-io/spiderpool/pkg/openapi"
2323
)
2424

2525
func CmdDel(args *skel.CmdArgs) (err error) {
@@ -28,7 +28,7 @@ func CmdDel(args *skel.CmdArgs) (err error) {
2828
return fmt.Errorf("failed to load CNI ENV args: %w", err)
2929
}
3030

31-
client, err := cmd.NewAgentOpenAPIUnixClient(constant.DefaultIPAMUnixSocketPath)
31+
client, err := openapi.NewAgentOpenAPIUnixClient(constant.DefaultIPAMUnixSocketPath)
3232
if err != nil {
3333
return err
3434
}

cmd/spiderpool-agent/cmd/config.go

+4
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,8 @@ var envInfo = []envConf{
6060
{"SPIDERPOOL_IPPOOL_MAX_ALLOCATED_IPS", "5000", true, nil, nil, &agentContext.Cfg.IPPoolMaxAllocatedIPs},
6161
{"SPIDERPOOL_WAIT_SUBNET_POOL_TIME_IN_SECOND", "2", false, nil, nil, &agentContext.Cfg.WaitSubnetPoolTime},
6262
{"SPIDERPOOL_WAIT_SUBNET_POOL_MAX_RETRIES", "25", false, nil, nil, &agentContext.Cfg.WaitSubnetPoolMaxRetries},
63+
64+
{"MULTUS_CLUSTER_NETWORK", "", false, &agentContext.Cfg.MultusClusterNetwork, nil, nil},
6365
}
6466

6567
type Config struct {
@@ -85,6 +87,8 @@ type Config struct {
8587
WaitSubnetPoolTime int
8688
WaitSubnetPoolMaxRetries int
8789

90+
MultusClusterNetwork string
91+
8892
// configmap
8993
IpamUnixSocketPath string `yaml:"ipamUnixSocketPath"`
9094
EnableIPv4 bool `yaml:"enableIPv4"`

cmd/spiderpool-agent/cmd/daemon.go

+18-12
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,15 @@ import (
1919
"github.com/pyroscope-io/client/pyroscope"
2020
apiruntime "k8s.io/apimachinery/pkg/runtime"
2121
"k8s.io/client-go/rest"
22+
"k8s.io/utils/pointer"
2223
ctrl "sigs.k8s.io/controller-runtime"
2324

2425
"github.com/spidernet-io/spiderpool/pkg/ipam"
2526
"github.com/spidernet-io/spiderpool/pkg/ippoolmanager"
2627
"github.com/spidernet-io/spiderpool/pkg/logutils"
2728
"github.com/spidernet-io/spiderpool/pkg/namespacemanager"
2829
"github.com/spidernet-io/spiderpool/pkg/nodemanager"
30+
"github.com/spidernet-io/spiderpool/pkg/openapi"
2931
"github.com/spidernet-io/spiderpool/pkg/podmanager"
3032
"github.com/spidernet-io/spiderpool/pkg/reservedipmanager"
3133
"github.com/spidernet-io/spiderpool/pkg/statefulsetmanager"
@@ -128,17 +130,21 @@ func DaemonMain() {
128130
initAgentServiceManagers(agentContext.InnerCtx)
129131

130132
logger.Info("Begin to initialize IPAM")
133+
ipamConfig := ipam.IPAMConfig{
134+
EnableIPv4: agentContext.Cfg.EnableIPv4,
135+
EnableIPv6: agentContext.Cfg.EnableIPv6,
136+
ClusterDefaultIPv4IPPool: agentContext.Cfg.ClusterDefaultIPv4IPPool,
137+
ClusterDefaultIPv6IPPool: agentContext.Cfg.ClusterDefaultIPv6IPPool,
138+
EnableSpiderSubnet: agentContext.Cfg.EnableSpiderSubnet,
139+
EnableStatefulSet: agentContext.Cfg.EnableStatefulSet,
140+
OperationRetries: agentContext.Cfg.WaitSubnetPoolMaxRetries,
141+
OperationGapDuration: time.Duration(agentContext.Cfg.WaitSubnetPoolTime) * time.Second,
142+
}
143+
if len(agentContext.Cfg.MultusClusterNetwork) != 0 {
144+
ipamConfig.MultusClusterNetwork = pointer.String(agentContext.Cfg.MultusClusterNetwork)
145+
}
131146
ipam, err := ipam.NewIPAM(
132-
ipam.IPAMConfig{
133-
EnableIPv4: agentContext.Cfg.EnableIPv4,
134-
EnableIPv6: agentContext.Cfg.EnableIPv6,
135-
ClusterDefaultIPv4IPPool: agentContext.Cfg.ClusterDefaultIPv4IPPool,
136-
ClusterDefaultIPv6IPPool: agentContext.Cfg.ClusterDefaultIPv6IPPool,
137-
EnableSpiderSubnet: agentContext.Cfg.EnableSpiderSubnet,
138-
EnableStatefulSet: agentContext.Cfg.EnableStatefulSet,
139-
OperationRetries: agentContext.Cfg.WaitSubnetPoolMaxRetries,
140-
OperationGapDuration: time.Duration(agentContext.Cfg.WaitSubnetPoolTime) * time.Second,
141-
},
147+
ipamConfig,
142148
agentContext.IPPoolManager,
143149
agentContext.EndpointManager,
144150
agentContext.NodeManager,
@@ -192,7 +198,7 @@ func DaemonMain() {
192198
if err := os.RemoveAll(agentContext.Cfg.IpamUnixSocketPath); err != nil {
193199
logger.Sugar().Fatalf("Failed to clean up socket %s: %v", agentContext.Cfg.IpamUnixSocketPath, err)
194200
}
195-
unixServer, err := NewAgentOpenAPIUnixServer()
201+
unixServer, err := newAgentOpenAPIUnixServer()
196202
if nil != err {
197203
logger.Fatal(err.Error())
198204
}
@@ -208,7 +214,7 @@ func DaemonMain() {
208214
}
209215
}()
210216

211-
spiderpoolAgentAPI, err := NewAgentOpenAPIUnixClient(agentContext.Cfg.IpamUnixSocketPath)
217+
spiderpoolAgentAPI, err := openapi.NewAgentOpenAPIUnixClient(agentContext.Cfg.IpamUnixSocketPath)
212218
if nil != err {
213219
logger.Fatal(err.Error())
214220
}

cmd/spiderpool-agent/cmd/unix_server.go

+2-31
Original file line numberDiff line numberDiff line change
@@ -4,23 +4,15 @@
44
package cmd
55

66
import (
7-
"context"
8-
"fmt"
9-
"net"
10-
"net/http"
11-
127
"github.com/go-openapi/loads"
13-
runtime_client "github.com/go-openapi/runtime/client"
14-
"github.com/go-openapi/strfmt"
158
"github.com/jessevdk/go-flags"
169

17-
agentOpenAPIClient "github.com/spidernet-io/spiderpool/api/v1/agent/client"
1810
agentOpenAPIServer "github.com/spidernet-io/spiderpool/api/v1/agent/server"
1911
agentOpenAPIRestapi "github.com/spidernet-io/spiderpool/api/v1/agent/server/restapi"
2012
)
2113

22-
// NewAgentOpenAPIUnixServer instantiates a new instance of the agent OpenAPI server on the unix.
23-
func NewAgentOpenAPIUnixServer() (*agentOpenAPIServer.Server, error) {
14+
// newAgentOpenAPIUnixServer instantiates a new instance of the agent OpenAPI server on the unix.
15+
func newAgentOpenAPIUnixServer() (*agentOpenAPIServer.Server, error) {
2416
// read yaml spec
2517
swaggerSpec, err := loads.Embedded(agentOpenAPIServer.SwaggerJSON, agentOpenAPIServer.FlatSwaggerJSON)
2618
if nil != err {
@@ -54,24 +46,3 @@ func NewAgentOpenAPIUnixServer() (*agentOpenAPIServer.Server, error) {
5446

5547
return srv, nil
5648
}
57-
58-
// NewAgentOpenAPIUnixClient creates a new instance of the agent OpenAPI unix client.
59-
func NewAgentOpenAPIUnixClient(unixSocketPath string) (*agentOpenAPIClient.SpiderpoolAgentAPI, error) {
60-
if unixSocketPath == "" {
61-
return nil, fmt.Errorf("unix socket path must be specified")
62-
}
63-
64-
httpClient := &http.Client{
65-
Transport: &http.Transport{
66-
DisableCompression: true,
67-
DialContext: func(_ context.Context, _, _ string) (net.Conn, error) {
68-
return net.Dial("unix", unixSocketPath)
69-
},
70-
DisableKeepAlives: true,
71-
},
72-
}
73-
clientTrans := runtime_client.NewWithClient(unixSocketPath, agentOpenAPIClient.DefaultBasePath,
74-
agentOpenAPIClient.DefaultSchemes, httpClient)
75-
client := agentOpenAPIClient.New(clientTrans, strfmt.Default)
76-
return client, nil
77-
}

cmd/spiderpool/cmd/command_add.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@ import (
1919
"github.com/spidernet-io/spiderpool/api/v1/agent/client/connectivity"
2020
"github.com/spidernet-io/spiderpool/api/v1/agent/client/daemonset"
2121
"github.com/spidernet-io/spiderpool/api/v1/agent/models"
22-
"github.com/spidernet-io/spiderpool/cmd/spiderpool-agent/cmd"
2322
spiderpoolip "github.com/spidernet-io/spiderpool/pkg/ip"
23+
"github.com/spidernet-io/spiderpool/pkg/openapi"
2424
)
2525

2626
// CmdAdd follows CNI SPEC cmdAdd.
@@ -78,7 +78,7 @@ func CmdAdd(args *skel.CmdArgs) (err error) {
7878
)
7979
logger.Sugar().Debugf("CNI ENV args: %+v", k8sArgs)
8080

81-
spiderpoolAgentAPI, err := cmd.NewAgentOpenAPIUnixClient(conf.IPAM.IPAMUnixSocketPath)
81+
spiderpoolAgentAPI, err := openapi.NewAgentOpenAPIUnixClient(conf.IPAM.IPAMUnixSocketPath)
8282
if nil != err {
8383
err := fmt.Errorf("failed to create spiderpool-agent client: %w", err)
8484
logger.Error(err.Error())

cmd/spiderpool/cmd/command_delete.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import (
1616
"github.com/spidernet-io/spiderpool/api/v1/agent/client/connectivity"
1717
"github.com/spidernet-io/spiderpool/api/v1/agent/client/daemonset"
1818
"github.com/spidernet-io/spiderpool/api/v1/agent/models"
19-
"github.com/spidernet-io/spiderpool/cmd/spiderpool-agent/cmd"
19+
"github.com/spidernet-io/spiderpool/pkg/openapi"
2020
)
2121

2222
// CmdDel follows CNI SPEC cmdDel.
@@ -74,7 +74,7 @@ func CmdDel(args *skel.CmdArgs) (err error) {
7474
)
7575
logger.Sugar().Debugf("CNI ENV args: %+v", k8sArgs)
7676

77-
spiderpoolAgentAPI, err := cmd.NewAgentOpenAPIUnixClient(conf.IPAM.IPAMUnixSocketPath)
77+
spiderpoolAgentAPI, err := openapi.NewAgentOpenAPIUnixClient(conf.IPAM.IPAMUnixSocketPath)
7878
if nil != err {
7979
err := fmt.Errorf("failed to create spiderpool-agent client: %w", err)
8080
logger.Error(err.Error())

cmd/spiderpool/cmd/command_test.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,10 @@ import (
2525
"github.com/spidernet-io/spiderpool/api/v1/agent/models"
2626
"github.com/spidernet-io/spiderpool/api/v1/agent/server/restapi/connectivity"
2727
"github.com/spidernet-io/spiderpool/api/v1/agent/server/restapi/daemonset"
28-
agentcmd "github.com/spidernet-io/spiderpool/cmd/spiderpool-agent/cmd"
2928
"github.com/spidernet-io/spiderpool/cmd/spiderpool/cmd"
3029
"github.com/spidernet-io/spiderpool/pkg/constant"
3130
"github.com/spidernet-io/spiderpool/pkg/logutils"
31+
"github.com/spidernet-io/spiderpool/pkg/openapi"
3232
)
3333

3434
const ifName string = "eth0"
@@ -522,7 +522,7 @@ var _ = Describe("spiderpool plugin", Label("unitest", "ipam_plugin_test"), func
522522
})
523523

524524
It("Failed to new agent openAPI unix client with cmdAdd and cmdDel", func() {
525-
patches := gomonkey.ApplyFuncSeq(agentcmd.NewAgentOpenAPIUnixClient, []gomonkey.OutputCell{
525+
patches := gomonkey.ApplyFuncSeq(openapi.NewAgentOpenAPIUnixClient, []gomonkey.OutputCell{
526526
{Values: gomonkey.Params{nil, constant.ErrUnknown}},
527527
{Values: gomonkey.Params{nil, constant.ErrUnknown}},
528528
})

pkg/constant/k8s.go

+9
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,8 @@ const (
9999
Spiderpool = "spiderpool"
100100
SpiderpoolAgent = "spiderpool-agent"
101101
SpiderpoolController = "spiderpool-controller"
102+
Coordinator = "coordinator"
103+
Ifacer = "ifacer"
102104
)
103105

104106
const (
@@ -135,3 +137,10 @@ const (
135137
)
136138

137139
const ClusterDefaultInterfaceName = "eth0"
140+
141+
// multus-cni annotation
142+
const (
143+
MultusDefaultNetAnnot = "v1.multus-cni.io/default-network"
144+
MultusNetworkAttachmentAnnot = "k8s.v1.cni.cncf.io/networks"
145+
ResourceNameAnnot = "k8s.v1.cni.cncf.io/resourceName"
146+
)

0 commit comments

Comments
 (0)