Skip to content

Commit 71bd5f8

Browse files
authored
Merge pull request #11 from NUCsimple/master
fix pod-OOM event type is pod event
2 parents 160499f + df01c15 commit 71bd5f8

File tree

6 files changed

+47
-18
lines changed

6 files changed

+47
-18
lines changed

builder/Dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
# See the License for the specific language governing permissions and
1313
# limitations under the License.
1414

15-
FROM golang:1.11.0
15+
FROM golang:1.12.0
1616
LABEL maintainer="Andy Xie <[email protected]>"
1717

1818
ENV GOPATH /gopath/

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,4 +42,4 @@ require (
4242
k8s.io/test-infra v0.0.0-20190914015041-e1cbc3ccd91c
4343
)
4444

45-
replace git.apache.org/thrift.git => github.com/apache/thrift v0.0.0-20180902110319-2566ecd5d999
45+
replace git.apache.org/thrift.git => github.com/apache/thrift v0.0.0-20180902110319-2566ecd5d999

pkg/exporters/k8sexporter/k8s_exporter.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,11 @@ func NewExporterOrDie(npdo *options.NodeProblemDetectorOptions) types.Exporter {
6969

7070
func (ke *k8sExporter) ExportProblems(status *types.Status) {
7171
for _, event := range status.Events {
72-
ke.client.Eventf(util.ConvertToAPIEventType(event.Severity), status.Source, event.Reason, event.Message)
72+
if util.PodOOMRegex.MatchString(event.Message) {
73+
ke.client.PodEventf(util.ConvertToAPIEventType(event.Severity), status.Source, event.Reason, event.Message)
74+
} else {
75+
ke.client.Eventf(util.ConvertToAPIEventType(event.Severity), status.Source, event.Reason, event.Message)
76+
}
7377
}
7478
for _, cdt := range status.Conditions {
7579
ke.conditionManager.UpdateCondition(cdt)

pkg/exporters/k8sexporter/problemclient/problem_client.go

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,13 @@ package problemclient
1919
import (
2020
"encoding/json"
2121
"fmt"
22+
typedcorev1 "k8s.io/client-go/kubernetes/typed/core/v1"
23+
"k8s.io/kubernetes/pkg/api/legacyscheme"
24+
"k8s.io/node-problem-detector/pkg/util"
2225
"net/url"
2326
"os"
2427
"path/filepath"
2528

26-
typedcorev1 "k8s.io/client-go/kubernetes/typed/core/v1"
27-
"k8s.io/kubernetes/pkg/api/legacyscheme"
28-
2929
v1 "k8s.io/api/core/v1"
3030
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
3131
"k8s.io/apimachinery/pkg/types"
@@ -48,6 +48,7 @@ type Client interface {
4848
// Eventf reports the event.
4949
Eventf(eventType string, source, reason, messageFmt string, args ...interface{})
5050
// GetNode returns the Node object of the node on which the
51+
PodEventf(eventType string, source, reason, messageFmt string, args ...interface{})
5152
// node-problem-detector runs.
5253
GetNode() (*v1.Node, error)
5354
}
@@ -119,6 +120,25 @@ func (c *nodeProblemClient) Eventf(eventType, source, reason, messageFmt string,
119120
recorder.Eventf(c.nodeRef, eventType, reason, messageFmt, args...)
120121
}
121122

123+
124+
func (c *nodeProblemClient) PodEventf(eventType, source, reason, messageFmt string, args ...interface{}) {
125+
recorder, found := c.recorders[source]
126+
if !found {
127+
recorder = getEventRecorder(c.client, c.nodeName, source)
128+
c.recorders[source] = recorder
129+
}
130+
rst := util.PodOOMRegex.FindStringSubmatch(messageFmt)
131+
132+
podRef := &v1.ObjectReference{
133+
Kind: "Pod",
134+
Name: rst[2],
135+
UID: types.UID(rst[2]),
136+
Namespace: rst[3],
137+
}
138+
139+
recorder.Eventf(podRef, eventType, reason, messageFmt, args...)
140+
}
141+
122142
func (c *nodeProblemClient) GetNode() (*v1.Node, error) {
123143
return c.client.Nodes().Get(c.nodeName, metav1.GetOptions{})
124144
}

pkg/systemlogmonitor/log_monitor.go

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -19,19 +19,21 @@ package systemlogmonitor
1919
import (
2020
"encoding/json"
2121
"io/ioutil"
22-
"k8s.io/heapster/common/kubernetes"
2322
clientset "k8s.io/client-go/kubernetes"
23+
"k8s.io/heapster/common/kubernetes"
2424
"k8s.io/node-problem-detector/cmd/options"
2525
"net/url"
2626
"os"
2727
"path/filepath"
2828
"regexp"
2929
"strings"
30-
"time"
30+
3131
"fmt"
32+
"time"
3233

3334
"github.com/golang/glog"
3435

36+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
3537
"k8s.io/node-problem-detector/pkg/problemdaemon"
3638
"k8s.io/node-problem-detector/pkg/problemmetrics"
3739
"k8s.io/node-problem-detector/pkg/systemlogmonitor/logwatchers"
@@ -42,7 +44,6 @@ import (
4244
"k8s.io/node-problem-detector/pkg/util"
4345
"k8s.io/node-problem-detector/pkg/util/tomb"
4446
"k8s.io/node-problem-detector/pkg/version"
45-
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
4647
)
4748

4849
const (
@@ -51,8 +52,8 @@ const (
5152
)
5253

5354
var (
54-
uuidRegx *regexp.Regexp
55-
k8sClient *clientset.Clientset
55+
uuidRegx *regexp.Regexp
56+
k8sClient *clientset.Clientset
5657
)
5758

5859
func init() {
@@ -78,7 +79,7 @@ type logMonitor struct {
7879
tomb *tomb.Tomb
7980
}
8081

81-
func InitK8sClientOrDie(options *options.NodeProblemDetectorOptions) *clientset.Clientset{
82+
func InitK8sClientOrDie(options *options.NodeProblemDetectorOptions) *clientset.Clientset {
8283
uri, _ := url.Parse(options.ApiServerOverride)
8384
cfg, err := kubernetes.GetKubeClientConfig(uri)
8485
if err != nil {
@@ -201,9 +202,10 @@ func (l *logMonitor) generateStatus(logs []*logtypes.Log, rule systemlogtypes.Ru
201202
// We use the timestamp of the first log line as the timestamp of the status.
202203
timestamp := logs[0].Timestamp
203204
message := generateMessage(logs)
204-
if rule.Reason == OOMREASON && k8sClient != nil{
205+
if rule.Reason == OOMREASON && k8sClient != nil {
205206
uuid := string(uuidRegx.Find([]byte(message)))
206-
uuid = strings.ReplaceAll(uuid,"_","-")
207+
208+
uuid = strings.ReplaceAll(uuid, "_", "-")
207209
pl, err := k8sClient.CoreV1().Pods("").List(metav1.ListOptions{})
208210
if err != nil {
209211
glog.Error("Error in getting pods: %v", err.Error())
@@ -222,10 +224,10 @@ func (l *logMonitor) generateStatus(logs []*logtypes.Log, rule systemlogtypes.Ru
222224
if rule.Type == types.Temp {
223225
// For temporary error only generate event
224226
events = append(events, types.Event{
225-
Severity: types.Warn,
226-
Timestamp: timestamp,
227-
Reason: rule.Reason,
228-
Message: message,
227+
Severity: types.Warn,
228+
Timestamp: timestamp,
229+
Reason: rule.Reason,
230+
Message: message,
229231
})
230232
} else {
231233
// For permanent error changes the condition

pkg/util/helpers.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ package util
1717

1818
import (
1919
"fmt"
20+
"regexp"
2021
"syscall"
2122
"time"
2223

@@ -27,6 +28,8 @@ import (
2728

2829
var osReleasePath = "/etc/os-release"
2930

31+
var PodOOMRegex = regexp.MustCompile(`node:(\S+)\s+pod:(\S+)\s+namespace:(\S+)\s+uuid:(\S+)`)
32+
3033
// GenerateConditionChangeEvent generates an event for condition change.
3134
func GenerateConditionChangeEvent(t string, status types.ConditionStatus, reason string, timestamp time.Time, msg string) types.Event {
3235
return types.Event{

0 commit comments

Comments
 (0)