Skip to content

Commit 0cd7944

Browse files
authored
Merge pull request #49 from andyxning/add_support_for_running_standalone
add support for running standalone
2 parents b4626e0 + 68b379c commit 0cd7944

File tree

28 files changed

+3868
-11
lines changed

28 files changed

+3868
-11
lines changed

Godeps/Godeps.json

Lines changed: 35 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

README.md

Lines changed: 27 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,12 @@
11
# node-problem-detector
22
node-problem-detector aims to make various node problems visible to the upstream
3-
layers in cluster management stack. It is a [DaemonSet](http://kubernetes.io/docs/admin/daemons/)
4-
detecting node problems and reporting them to apiserver. Now it is running as
5-
a [Kubernetes Addon](https://github.com/kubernetes/kubernetes/tree/master/cluster/addons)
3+
layers in cluster management stack.
4+
It is a daemon runs on each node, detects node
5+
problems and reports them to apiserver.
6+
node-problem-detector can either run as a
7+
[DaemonSet](http://kubernetes.io/docs/admin/daemons/) or run standalone.
8+
Now it is running as a
9+
[Kubernetes Addon](https://github.com/kubernetes/kubernetes/tree/master/cluster/addons)
610
enabled by default in the GCE cluster.
711

812
# Background
@@ -48,6 +52,15 @@ List of supported problem daemons:
4852
| [KernelMonitor](https://github.com/kubernetes/node-problem-detector/tree/master/pkg/kernelmonitor) | KernelDeadlock | A problem daemon monitors kernel log and reports problem according to predefined rules. |
4953

5054
# Usage
55+
## Flags
56+
* `-apiserver-override`: An URI parameter used to customize how node-problem-detector
57+
connects the apiserver. The format is the same with the
58+
[`source`](https://github.com/kubernetes/heapster/blob/master/docs/source-configuration.md#kubernetes)
59+
flag of [Heapster](https://github.com/kubernetes/heapster):
60+
```
61+
http://APISERVER_IP:APISERVER_PORT?inClusterConfig=false&userServiceAccount=false&auth=&insecure=
62+
```
63+
5164
## Build Image
5265
Run `make` in the top directory. It will:
5366
* Build the binary.
@@ -92,6 +105,17 @@ spec:
92105
* If needed, you can use [ConfigMap](http://kubernetes.io/docs/user-guide/configmap/)
93106
to overwrite the `config/`.
94107

108+
## Start Standalone
109+
To run node-problem-detector standalone, you should set `inClusterConfig` to `false` and
110+
teach node-problem-detector how to access apiserver with `apiserver-override`.
111+
112+
To run node-problem-detector standalone with an insecure apiserver connection:
113+
```
114+
node-problem-detector -apiserver-override=http://APISERVER_IP:APISERVER_INSECURE_PORT?inClusterConfig=false
115+
```
116+
117+
For more scenarios, see [here](https://github.com/kubernetes/heapster/blob/master/docs/source-configuration.md#kubernetes)
118+
95119
# Links
96120
* [Design Doc](https://docs.google.com/document/d/1cs1kqLziG-Ww145yN6vvlKguPbQQ0psrSBnEqpy0pzE/edit?usp=sharing)
97121
* [Slides](https://docs.google.com/presentation/d/1bkJibjwWXy8YnB5fna6p-Ltiy-N5p01zUsA22wCNkXA/edit?usp=sharing)

node_problem_detector.go

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,18 +18,30 @@ package main
1818

1919
import (
2020
"flag"
21+
"net/url"
2122

2223
"k8s.io/node-problem-detector/pkg/kernelmonitor"
2324
"k8s.io/node-problem-detector/pkg/problemdetector"
25+
26+
"github.com/golang/glog"
2427
)
2528

2629
var (
2730
kernelMonitorConfigPath = flag.String("kernel-monitor", "/config/kernel_monitor.json", "The path to the kernel monitor config file")
31+
apiServerOverride = flag.String("apiserver-override", "", "custom URI used to connect to Kubernetes ApiServer")
2832
)
2933

34+
func validateCmdParams() {
35+
if _, err := url.Parse(*apiServerOverride); err != nil {
36+
glog.Fatalf("apiserver-override %q is not a valid HTTP URI: %v", *apiServerOverride, err)
37+
}
38+
}
39+
3040
func main() {
3141
flag.Parse()
42+
validateCmdParams()
43+
3244
k := kernelmonitor.NewKernelMonitorOrDie(*kernelMonitorConfigPath)
33-
p := problemdetector.NewProblemDetector(k)
45+
p := problemdetector.NewProblemDetector(k, *apiServerOverride)
3446
p.Run()
3547
}

pkg/problemclient/problem_client.go

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,16 +19,17 @@ package problemclient
1919
import (
2020
"encoding/json"
2121
"fmt"
22+
"net/url"
2223
"os"
2324

24-
"k8s.io/kubernetes/pkg/util/clock"
25-
2625
"k8s.io/kubernetes/pkg/api"
2726
"k8s.io/kubernetes/pkg/api/unversioned"
2827
"k8s.io/kubernetes/pkg/client/record"
29-
"k8s.io/kubernetes/pkg/client/restclient"
3028
client "k8s.io/kubernetes/pkg/client/unversioned"
3129
"k8s.io/kubernetes/pkg/types"
30+
"k8s.io/kubernetes/pkg/util/clock"
31+
32+
"k8s.io/heapster/common/kubernetes"
3233
)
3334

3435
// Client is the interface of problem client
@@ -50,12 +51,17 @@ type nodeProblemClient struct {
5051
}
5152

5253
// NewClientOrDie creates a new problem client, panics if error occurs.
53-
func NewClientOrDie() Client {
54+
func NewClientOrDie(apiServerOverride string) Client {
5455
c := &nodeProblemClient{clock: clock.RealClock{}}
55-
cfg, err := restclient.InClusterConfig()
56+
57+
// we have checked it is a valid URI after command line argument is parsed.:)
58+
uri, _ := url.Parse(apiServerOverride)
59+
60+
cfg, err := kubernetes.GetKubeClientConfig(uri)
5661
if err != nil {
5762
panic(err)
5863
}
64+
5965
// TODO(random-liu): Set QPS Limit
6066
c.client = client.NewOrDie(cfg)
6167
// Get node name from environment variable NODE_NAME

pkg/problemdetector/problem_detector.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,8 @@ type problemDetector struct {
4141

4242
// NewProblemDetector creates the problem detector. Currently we just directly passed in the problem daemons, but
4343
// in the future we may want to let the problem daemons register themselves.
44-
func NewProblemDetector(monitor kernelmonitor.KernelMonitor) ProblemDetector {
45-
client := problemclient.NewClientOrDie()
44+
func NewProblemDetector(monitor kernelmonitor.KernelMonitor, apiServerOverride string) ProblemDetector {
45+
client := problemclient.NewClientOrDie(apiServerOverride)
4646
return &problemDetector{
4747
client: client,
4848
conditionManager: condition.NewConditionManager(client, clock.RealClock{}),

vendor/github.com/imdario/mergo/.travis.yml

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/github.com/imdario/mergo/LICENSE

Lines changed: 28 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/github.com/imdario/mergo/README.md

Lines changed: 129 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)