Skip to content

Commit 01d185b

Browse files
committed
Add flag for dry-run, update README
1 parent 526abe7 commit 01d185b

File tree

2 files changed

+66
-14
lines changed

2 files changed

+66
-14
lines changed

README.md

Lines changed: 53 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,26 @@ Kubernetes clusters, as well as for targeting heterogeneous accelerators in Edge
1111

1212
## Usage
1313

14-
The node labeller is further expected to be run node-local, and will need to be invoked on each individual node
14+
The node labeller is expected to be run node-local, and will need to be invoked on each individual node
1515
requiring its own specific devicetree parsing and labelling.
1616

17+
```
18+
$ k8s-dt-node-labeller --help
19+
devicetree Node Labeller for Kubernetes
20+
Usage: k8s-dt-node-labeller [flags] [-n devicetree nodes...]
21+
22+
-d Display detected devicetree nodes
23+
-kubeconfig string
24+
Paths to a kubeconfig. Only required if out-of-cluster.
25+
-n string
26+
Additional devicetree node names
27+
28+
```
29+
1730
By default, `compatible` strings from the top-level `/` node are discovered and converted to node labels.
1831

1932
```
20-
$ k8s-dt-node-labeller
33+
$ k8s-dt-node-labeller -d
2134
Discovered the following devicetree properties:
2235
2336
beta.devicetree.org/nvidia-jetson-nano: 1
@@ -27,7 +40,7 @@ beta.devicetree.org/nvidia-tegra210: 1
2740
additional node specifications are possible via the `-n` flag, as below:
2841

2942
```
30-
$ k8s-dt-node-labeller -n gpu pwm-fan
43+
$ k8s-dt-node-labeller -d -n gpu pwm-fan
3144
Discovered the following devicetree properties:
3245
3346
beta.devicetree.org/nvidia-jetson-nano: 1
@@ -37,6 +50,43 @@ beta.devicetree.org/nvidia-gm20b: 1
3750
beta.devicetree.org/pwm-fan: 1
3851
```
3952

53+
In order to submit the labels to the cluster, ensure a valid kubeconfig can be found (e.g. by setting the `KUBECONFIG`
54+
environment variable, or through specifying the location with the `-kubeconfig` parameter) and execute the node
55+
labeller as-is:
56+
57+
```
58+
$ k8s-dt-node-labeller
59+
{"level":"info","ts":1585701002.694782,"logger":"k8s-dt-node-labeller.entrypoint","msg":"setting up manager"}
60+
{"level":"info","ts":1585701003.1179338,"logger":"controller-runtime.metrics","msg":"metrics server is starting to listen","addr":":8080"}
61+
{"level":"info","ts":1585701003.118381,"logger":"k8s-dt-node-labeller.entrypoint","msg":"Setting up controller"}
62+
{"level":"info","ts":1585701003.1185818,"logger":"k8s-dt-node-labeller.entrypoint","msg":"starting manager"}
63+
{"level":"info","ts":1585701003.1190712,"logger":"controller-runtime.manager","msg":"starting metrics server","path":"/metrics"}
64+
{"level":"info","ts":1585701003.1193638,"logger":"controller-runtime.controller","msg":"Starting EventSource","controller":"k8s-dt-node-labeller","source":"kind source: /, Kind="}
65+
{"level":"info","ts":1585701003.2218263,"logger":"controller-runtime.controller","msg":"Starting Controller","controller":"k8s-dt-node-labeller"}
66+
{"level":"info","ts":1585701003.222448,"logger":"controller-runtime.controller","msg":"Starting workers","controller":"k8s-dt-node-labeller","worker count":1}
67+
...
68+
```
69+
70+
After which the node labels can be viewed from `kubectl`:
71+
72+
```
73+
$ kubectl describe node jetson-nano
74+
Name: jetson-nano
75+
Roles: <none>
76+
Labels: beta.devicetree.org/nvidia-jetson-nano=1
77+
beta.devicetree.org/nvidia-tegra210=1
78+
beta.kubernetes.io/arch=arm64
79+
beta.kubernetes.io/instance-type=k3s
80+
beta.kubernetes.io/os=linux
81+
k3s.io/hostname=jetson-nano
82+
k3s.io/internal-ip=192.168.xxx.xxx
83+
kubernetes.io/arch=arm64
84+
kubernetes.io/hostname=jetson-nano
85+
kubernetes.io/os=linux
86+
node.kubernetes.io/instance-type=k3s
87+
...
88+
```
89+
4090
## Acknowledgements
4191

4292
This project has received funding from the European Union’s Horizon 2020 research and innovation programme under grant

main.go

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -90,12 +90,14 @@ func parseDeviceTree(nodeNames []string) error {
9090

9191
func main() {
9292
var n string
93+
var d bool
9394

95+
flag.BoolVar(&d, "d", false, "Display detected devicetree nodes")
9496
flag.StringVar(&n, "n", "", "Additional devicetree node names")
9597

9698
flag.Usage = func() {
9799
fmt.Fprintf(os.Stderr, "devicetree Node Labeller for Kubernetes\n")
98-
fmt.Fprintf(os.Stderr, "Usage: k8s-dt-node-labeller [flags]\n\n")
100+
fmt.Fprintf(os.Stderr, "Usage: k8s-dt-node-labeller [flags] [-n devicetree nodes...]\n\n")
99101
flag.PrintDefaults()
100102
}
101103

@@ -125,11 +127,15 @@ func main() {
125127
panic(err)
126128
}
127129

128-
fmt.Printf("Discovered the following devicetree properties:\n\n")
130+
if d {
131+
fmt.Printf("Discovered the following devicetree properties:\n\n")
129132

130-
// Iterate over the parsed map
131-
for k, v := range compatMap {
132-
fmt.Printf("%s: %d\n", createLabelPrefix(k, true), v)
133+
// Iterate over the parsed map
134+
for k, v := range compatMap {
135+
fmt.Printf("%s: %d\n", createLabelPrefix(k, true), v)
136+
}
137+
138+
os.Exit(0)
133139
}
134140

135141
logf.SetLogger(zap.New(zap.UseDevMode(false)))
@@ -158,18 +164,14 @@ func main() {
158164

159165
// By default, only run node-local. This is achieved by matching the
160166
// hostname of the system we are running on against the hostname
161-
//tagged as part of the node's metadata.
167+
// tagged as part of the node's metadata.
162168
pred := predicate.Funcs{
163169
CreateFunc: func(e event.CreateEvent) bool {
164170
hostname, err := os.Hostname()
165171
if err != nil {
166172
return false
167173
}
168-
if hostname == e.Meta.GetName() {
169-
entryLog.Info("Labelling", hostname)
170-
return true
171-
}
172-
return false
174+
return hostname == e.Meta.GetName()
173175
},
174176
DeleteFunc: func(e event.DeleteEvent) bool {
175177
return false

0 commit comments

Comments
 (0)