26.4. 감지된 조건 사용자 정의
Node Problem Detector 구성 맵을 편집하여 로그 문자열을 조사하도록 Node Problem Detector를 구성할 수 있습니다.
Node Problem Detector 구성 맵 샘플
apiVersion: v1 kind: ConfigMap metadata: name: node-problem-detector data: docker-monitor.json: | 1 { "plugin": "journald", 2 "pluginConfig": { "source": "docker" }, "logPath": "/host/log/journal", 3 "lookback": "5m", "bufferSize": 10, "source": "docker-monitor", "conditions": [], "rules": [ 4 { "type": "temporary", 5 "reason": "CorruptDockerImage", 6 "pattern": "Error trying v2 registry: failed to register layer: rename /var/lib/docker/image/(.+) /var/lib/docker/image/(.+): directory not empty.*" 7 } ] } kernel-monitor.json: | 8 { "plugin": "journald", 9 "pluginConfig": { "source": "kernel" }, "logPath": "/host/log/journal", 10 "lookback": "5m", "bufferSize": 10, "source": "kernel-monitor", "conditions": [ 11 { "type": "KernelDeadlock", 12 "reason": "KernelHasNoDeadlock", 13 "message": "kernel has no deadlock" 14 } ], "rules": [ { "type": "temporary", "reason": "OOMKilling", "pattern": "Kill process \\d+ (.+) score \\d+ or sacrifice child\\nKilled process \\d+ (.+) total-vm:\\d+kB, anon-rss:\\d+kB, file-rss:\\d+kB" }, { "type": "temporary", "reason": "TaskHung", "pattern": "task \\S+:\\w+ blocked for more than \\w+ seconds\\." }, { "type": "temporary", "reason": "UnregisterNetDevice", "pattern": "unregister_netdevice: waiting for \\w+ to become free. Usage count = \\d+" }, { "type": "temporary", "reason": "KernelOops", "pattern": "BUG: unable to handle kernel NULL pointer dereference at .*" }, { "type": "temporary", "reason": "KernelOops", "pattern": "divide error: 0000 \\[#\\d+\\] SMP" }, { "type": "permanent", "condition": "KernelDeadlock", "reason": "AUFSUmountHung", "pattern": "task umount\\.aufs:\\w+ blocked for more than \\w+ seconds\\." }, { "type": "permanent", "condition": "KernelDeadlock", "reason": "DockerHung", "pattern": "task docker:\\w+ blocked for more than \\w+ seconds\\." } ] }
Node Problem Detector를 구성하려면 문제 조건 및 이벤트를 추가하거나 제거합니다.
텍스트 편집기를 사용하여 Node Problem Detector 구성 맵을 편집합니다.
$ oc edit configmap -n openshift-node-problem-detector node-problem-detector
필요에 따라 노드 상태 또는 이벤트를 제거, 추가 또는 편집합니다.
{ "type": <`temporary` or `permanent`>, "reason": <free-form text describing the error>, "pattern": <log message to watch for> },
예를 들면 다음과 같습니다.
{ "type": "temporary", "reason": "UnregisterNetDevice", "pattern": "unregister_netdevice: waiting for \\w+ to become free. Usage count = \\d+" },
실행 중인 포드를 다시 시작하여 변경 사항을 적용합니다. Pod를 다시 시작하려면 기존 Pod를 모두 삭제할 수 있습니다.
# oc delete pods -n openshift-node-problem-detector -l name=node-problem-detector
Node Problem Detector 출력을 표준 출력(stdout) 및 표준 오류(stderr)에 표시하려면 Node Problem Detector의 DaemonSet에 다음을 추가합니다.
spec: template: spec: containers: - name: node-problem-detector command: - node-problem-detector - --alsologtostderr=true 1 - --log_dir="/tmp" 2 - --system-log-monitors=/etc/npd/kernel-monitor.json,/etc/npd/docker-monitor.json 3