Skip to content

Commit 61c135d

Browse files
committed
fpga_plugin: drop dependency to k8s.io/kubernetes
This commit drops fpga_plugin dependency to k8s.io/kubernetes which was used to get GetHostname(). After this change, the plugin node name can be set using new -node-name parameter. The default value for is read from NODE_NAME environment variable. If the node annotation override check fails, we continue with the default mode parameter and do not exist like we did previously. Signed-off-by: Mikko Ylinen <[email protected]>
1 parent 8d5708f commit 61c135d

File tree

4 files changed

+124
-115
lines changed

4 files changed

+124
-115
lines changed

cmd/fpga_plugin/fpga_plugin.go

Lines changed: 10 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -24,12 +24,7 @@ import (
2424
"strings"
2525
"time"
2626

27-
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
28-
"k8s.io/client-go/kubernetes"
29-
"k8s.io/client-go/rest"
30-
"k8s.io/client-go/tools/clientcmd"
3127
pluginapi "k8s.io/kubelet/pkg/apis/deviceplugin/v1beta1"
32-
utilnode "k8s.io/kubernetes/pkg/util/node"
3328

3429
"github.com/intel/intel-device-plugins-for-kubernetes/pkg/debug"
3530
dpapi "github.com/intel/intel-device-plugins-for-kubernetes/pkg/deviceplugin"
@@ -351,12 +346,12 @@ func main() {
351346
var mode string
352347
var kubeconfig string
353348
var master string
354-
var config *rest.Config
355-
var err error
349+
var nodename string
356350
var debugEnabled bool
357351

358352
flag.StringVar(&kubeconfig, "kubeconfig", "", "absolute path to the kubeconfig file")
359353
flag.StringVar(&master, "master", "", "master url")
354+
flag.StringVar(&nodename, "node-name", os.Getenv("NODE_NAME"), "node name in the cluster to query mode annotation from")
360355
flag.StringVar(&mode, "mode", string(afMode),
361356
fmt.Sprintf("device plugin mode: '%s' (default), '%s' or '%s'", afMode, regionMode, regionDevelMode))
362357
flag.BoolVar(&debugEnabled, "debug", false, "enable debug output")
@@ -366,43 +361,25 @@ func main() {
366361
debug.Activate()
367362
}
368363

369-
if kubeconfig == "" {
370-
config, err = rest.InClusterConfig()
371-
} else {
372-
config, err = clientcmd.BuildConfigFromFlags(master, kubeconfig)
373-
}
364+
nodeMode, err := getModeOverrideFromCluster(nodename, kubeconfig, master, mode)
374365
if err != nil {
375-
fatal(err)
366+
fmt.Printf("WARNING: could not get mode override from cluster: %+v\n", err)
376367
}
377368

378-
// if NODE_NAME is not set then try to use hostname
379-
nodeName, err := utilnode.GetHostname(os.Getenv("NODE_NAME"))
380-
if err != nil {
381-
fatal(err)
382-
}
383-
384-
clientset, err := kubernetes.NewForConfig(config)
385-
if err != nil {
386-
fatal(err)
387-
}
388-
389-
node, err := clientset.CoreV1().Nodes().Get(nodeName, metav1.GetOptions{})
390-
if err != nil {
391-
fatal(err)
392-
}
393-
394-
if nodeMode, ok := node.ObjectMeta.Annotations["fpga.intel.com/device-plugin-mode"]; ok {
395-
fmt.Println("Overriding mode to ", nodeMode)
369+
var modeMessage string
370+
if mode != nodeMode {
371+
modeMessage = fmt.Sprintf(" (override from %s node annotation)", nodename)
396372
mode = nodeMode
373+
} else {
374+
modeMessage = ""
397375
}
398376

399377
plugin, err := newDevicePlugin(mode)
400378
if err != nil {
401379
fatal(err)
402380
}
403381

404-
fmt.Printf("FPGA device plugin (%s) started in %s mode\n", plugin.name, mode)
405-
382+
fmt.Printf("FPGA device plugin (%s) started in %s mode%s\n", plugin.name, mode, modeMessage)
406383
manager := dpapi.NewManager(namespace, plugin)
407384
manager.Run()
408385
}

cmd/fpga_plugin/mode.go

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
package main
2+
3+
import (
4+
"fmt"
5+
6+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
7+
"k8s.io/client-go/kubernetes"
8+
"k8s.io/client-go/rest"
9+
"k8s.io/client-go/tools/clientcmd"
10+
)
11+
12+
func getModeOverrideFromCluster(nodeName, kubeConfig, master, mode string) (string, error) {
13+
var config *rest.Config
14+
var err error
15+
16+
if len(nodeName) == 0 {
17+
return mode, fmt.Errorf("node name is not set")
18+
}
19+
20+
if len(kubeConfig) == 0 {
21+
config, err = rest.InClusterConfig()
22+
} else {
23+
config, err = clientcmd.BuildConfigFromFlags(master, kubeConfig)
24+
}
25+
if err != nil {
26+
return mode, err
27+
}
28+
29+
clientset, err := kubernetes.NewForConfig(config)
30+
if err != nil {
31+
return mode, err
32+
}
33+
34+
node, err := clientset.CoreV1().Nodes().Get(nodeName, metav1.GetOptions{})
35+
if err != nil {
36+
return mode, err
37+
}
38+
39+
if nodeMode, ok := node.ObjectMeta.Annotations["fpga.intel.com/device-plugin-mode"]; ok {
40+
return nodeMode, nil
41+
}
42+
43+
return mode, nil
44+
}

go.mod

Lines changed: 30 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ go 1.13
55
require (
66
github.com/fsnotify/fsnotify v1.4.7
77
github.com/go-ini/ini v1.46.0
8-
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b
98
github.com/google/gousb v0.0.0-20190812193832-18f4c1d8a750
109
github.com/onsi/ginkgo v1.10.1
1110
github.com/onsi/gomega v1.7.0
@@ -14,39 +13,39 @@ require (
1413
golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456
1514
google.golang.org/grpc v1.23.1
1615
gopkg.in/ini.v1 v1.46.0 // indirect
17-
k8s.io/api v0.17.0
18-
k8s.io/apimachinery v0.17.0
19-
k8s.io/client-go v0.17.0
20-
k8s.io/component-base v0.17.0
16+
k8s.io/api v0.17.3
17+
k8s.io/apimachinery v0.17.3
18+
k8s.io/client-go v0.17.3
19+
k8s.io/component-base v0.17.3
2120
k8s.io/klog v1.0.0
22-
k8s.io/kubelet v0.0.0
23-
k8s.io/kubernetes v1.17.0
21+
k8s.io/kubelet v0.17.3
22+
k8s.io/kubernetes v1.17.3
2423
k8s.io/utils v0.0.0-20191114184206-e782cd3c129f
2524
)
2625

2726
replace (
28-
k8s.io/api => k8s.io/api v0.17.0
29-
k8s.io/apiextensions-apiserver => k8s.io/apiextensions-apiserver v0.17.0
30-
k8s.io/apimachinery => k8s.io/apimachinery v0.17.1-beta.0
31-
k8s.io/apiserver => k8s.io/apiserver v0.17.0
32-
k8s.io/cli-runtime => k8s.io/cli-runtime v0.17.0
33-
k8s.io/client-go => k8s.io/client-go v0.17.0
34-
k8s.io/cloud-provider => k8s.io/cloud-provider v0.17.0
35-
k8s.io/cluster-bootstrap => k8s.io/cluster-bootstrap v0.17.0
36-
k8s.io/code-generator => k8s.io/code-generator v0.17.1-beta.0
37-
k8s.io/component-base => k8s.io/component-base v0.17.0
38-
k8s.io/cri-api => k8s.io/cri-api v0.17.1-beta.0
39-
k8s.io/csi-translation-lib => k8s.io/csi-translation-lib v0.17.0
40-
k8s.io/kube-aggregator => k8s.io/kube-aggregator v0.17.0
41-
k8s.io/kube-controller-manager => k8s.io/kube-controller-manager v0.17.0
42-
k8s.io/kube-proxy => k8s.io/kube-proxy v0.17.0
43-
k8s.io/kube-scheduler => k8s.io/kube-scheduler v0.17.0
44-
k8s.io/kubectl => k8s.io/kubectl v0.17.0
45-
k8s.io/kubelet => k8s.io/kubelet v0.17.0
46-
k8s.io/legacy-cloud-providers => k8s.io/legacy-cloud-providers v0.17.0
47-
k8s.io/metrics => k8s.io/metrics v0.17.0
48-
k8s.io/node-api => k8s.io/node-api v0.17.0
49-
k8s.io/sample-apiserver => k8s.io/sample-apiserver v0.17.0
50-
k8s.io/sample-cli-plugin => k8s.io/sample-cli-plugin v0.17.0
51-
k8s.io/sample-controller => k8s.io/sample-controller v0.17.0
27+
k8s.io/api => k8s.io/api v0.17.3
28+
k8s.io/apiextensions-apiserver => k8s.io/apiextensions-apiserver v0.17.3
29+
k8s.io/apimachinery => k8s.io/apimachinery v0.17.3
30+
k8s.io/apiserver => k8s.io/apiserver v0.17.3
31+
k8s.io/cli-runtime => k8s.io/cli-runtime v0.17.3
32+
k8s.io/client-go => k8s.io/client-go v0.17.3
33+
k8s.io/cloud-provider => k8s.io/cloud-provider v0.17.3
34+
k8s.io/cluster-bootstrap => k8s.io/cluster-bootstrap v0.17.3
35+
k8s.io/code-generator => k8s.io/code-generator v0.17.3
36+
k8s.io/component-base => k8s.io/component-base v0.17.3
37+
k8s.io/cri-api => k8s.io/cri-api v0.17.3
38+
k8s.io/csi-translation-lib => k8s.io/csi-translation-lib v0.17.3
39+
k8s.io/kube-aggregator => k8s.io/kube-aggregator v0.17.3
40+
k8s.io/kube-controller-manager => k8s.io/kube-controller-manager v0.17.3
41+
k8s.io/kube-proxy => k8s.io/kube-proxy v0.17.3
42+
k8s.io/kube-scheduler => k8s.io/kube-scheduler v0.17.3
43+
k8s.io/kubectl => k8s.io/kubectl v0.17.3
44+
k8s.io/kubelet => k8s.io/kubelet v0.17.3
45+
k8s.io/legacy-cloud-providers => k8s.io/legacy-cloud-providers v0.17.3
46+
k8s.io/metrics => k8s.io/metrics v0.17.3
47+
k8s.io/node-api => k8s.io/node-api v0.17.3
48+
k8s.io/sample-apiserver => k8s.io/sample-apiserver v0.17.3
49+
k8s.io/sample-cli-plugin => k8s.io/sample-cli-plugin v0.17.3
50+
k8s.io/sample-controller => k8s.io/sample-controller v0.17.3
5251
)

0 commit comments

Comments
 (0)