diff --git a/Makefile b/Makefile index 65557e6d..d8ad299d 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,6 @@ all: push -# See pod.yaml for the version currently running-- bump this ahead before rebuilding! +# See node-problem-detector.yaml for the version currently running-- bump this ahead before rebuilding! TAG = v0.2 PROJ = google_containers diff --git a/README.md b/README.md index ccafba4a..ff840683 100644 --- a/README.md +++ b/README.md @@ -73,14 +73,10 @@ spec: securityContext: privileged: true env: - - name: POD_NAME + - name: NODE_NAME valueFrom: fieldRef: - fieldPath: metadata.name - - name: POD_NAMESPACE - valueFrom: - fieldRef: - fieldPath: metadata.namespace + fieldPath: spec.nodeName volumeMounts: - name: log mountPath: /log diff --git a/node-problem-detector.yaml b/node-problem-detector.yaml index e0eaf3e5..149fb9ed 100644 --- a/node-problem-detector.yaml +++ b/node-problem-detector.yaml @@ -18,14 +18,10 @@ spec: securityContext: privileged: true env: - - name: POD_NAME + - name: NODE_NAME valueFrom: fieldRef: - fieldPath: metadata.name - - name: POD_NAMESPACE - valueFrom: - fieldRef: - fieldPath: metadata.namespace + fieldPath: spec.nodeName volumeMounts: - name: log mountPath: /log diff --git a/pkg/problemclient/problem_client.go b/pkg/problemclient/problem_client.go index 2f5ce537..ebbedbb5 100644 --- a/pkg/problemclient/problem_client.go +++ b/pkg/problemclient/problem_client.go @@ -57,15 +57,23 @@ func NewClientOrDie() Client { } // TODO(random-liu): Set QPS Limit c.client = client.NewOrDie(cfg) - // Get node name from the current pod. - pod, err := c.client.Pods(os.Getenv("POD_NAMESPACE")).Get(os.Getenv("POD_NAME")) - if err != nil { - panic(err) + // Get node name from environment variable NODE_NAME + // By default, assume that the NODE_NAME env should have been set with + // downward api. We prefer it because sometimes the hostname returned + // by os.Hostname is not right because: + // 1. User may override the hostname. + // 2. For some cloud providers, os.Hostname is different from the real hostname. + c.nodeName = os.Getenv("NODE_NAME") + if c.nodeName == "" { + // For backward compatibility. If the env is not set, get the hostname + // from os.Hostname(). This may not work for all configurations and + // environments. + var err error + c.nodeName, err = os.Hostname() + if err != nil { + panic("empty node name") + } } - if pod.Spec.NodeName == "" { - panic("empty node name") - } - c.nodeName = pod.Spec.NodeName c.nodeRef = getNodeRef(c.nodeName) c.recorders = make(map[string]record.EventRecorder) return c