मेरे कुबेरनेट्स पॉड्स "क्रैशऑलोपबैकऑफ" के साथ दुर्घटनाग्रस्त होते रहते हैं, लेकिन मुझे कोई लॉग नहीं मिल रहा है


106

यही मुझे मिलता रहा:

[root@centos-master ~]# kubectl get pods
NAME               READY     STATUS             RESTARTS   AGE
nfs-server-h6nw8   1/1       Running            0          1h
nfs-web-07rxz      0/1       CrashLoopBackOff   8          16m
nfs-web-fdr9h      0/1       CrashLoopBackOff   8          16m

नीचे "वर्णन पॉड्स" से आउटपुट है कुबेटल पॉड्स का वर्णन करते हैं

Events:
  FirstSeen LastSeen    Count   From                SubobjectPath       Type        Reason      Message
  --------- --------    -----   ----                -------------       --------    ------      -------
  16m       16m     1   {default-scheduler }                    Normal      Scheduled   Successfully assigned nfs-web-fdr9h to centos-minion-2
  16m       16m     1   {kubelet centos-minion-2}   spec.containers{web}    Normal      Created     Created container with docker id 495fcbb06836
  16m       16m     1   {kubelet centos-minion-2}   spec.containers{web}    Normal      Started     Started container with docker id 495fcbb06836
  16m       16m     1   {kubelet centos-minion-2}   spec.containers{web}    Normal      Started     Started container with docker id d56f34ae4e8f
  16m       16m     1   {kubelet centos-minion-2}   spec.containers{web}    Normal      Created     Created container with docker id d56f34ae4e8f
  16m       16m     2   {kubelet centos-minion-2}               Warning     FailedSync  Error syncing pod, skipping: failed to "StartContainer" for "web" with CrashLoopBackOff: "Back-off 10s restarting failed container=web pod=nfs-web-fdr9h_default(461c937d-d870-11e6-98de-005056040cc2)"

मेरे पास दो पॉड्स हैं: nfs-web-07rxz, nfs-web-fdr9h, लेकिन अगर मैं "kubectl लॉग्स nfs-web-07rxz" करता हूं या "-p" विकल्प के साथ मैं दोनों पॉड्स में कोई लॉग नहीं करता हूं।

[root@centos-master ~]# kubectl logs nfs-web-07rxz -p
[root@centos-master ~]# kubectl logs nfs-web-07rxz

यह मेरी replicationController yaml फ़ाइल है: replicationController yaml फ़ाइल

apiVersion: v1 kind: ReplicationController metadata:   name: nfs-web spec:   replicas: 2   selector:
    role: web-frontend   template:
    metadata:
      labels:
        role: web-frontend
    spec:
      containers:
      - name: web
        image: eso-cmbu-docker.artifactory.eng.vmware.com/demo-container:demo-version3.0
        ports:
          - name: web
            containerPort: 80
        securityContext:
          privileged: true

मेरी डॉक छवि इस साधारण डॉकटर फ़ाइल से बनाई गई थी:

FROM ubuntu
RUN apt-get update
RUN apt-get install -y nginx
RUN apt-get install -y nfs-common

मैं Centub-1611, kube संस्करण पर अपनी कुबेरनेट क्लस्टर चला रहा हूं:

[root@centos-master ~]# kubectl version
Client Version: version.Info{Major:"1", Minor:"3", GitVersion:"v1.3.0", GitCommit:"86dc49aa137175378ac7fba7751c3d3e7f18e5fc", GitTreeState:"clean", BuildDate:"2016-12-15T16:57:18Z", GoVersion:"go1.6.3", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"3", GitVersion:"v1.3.0", GitCommit:"86dc49aa137175378ac7fba7751c3d3e7f18e5fc", GitTreeState:"clean", BuildDate:"2016-12-15T16:57:18Z", GoVersion:"go1.6.3", Compiler:"gc", Platform:"linux/amd64"}

अगर मैं "docker run" द्वारा docker की छवि चलाता हूं, तो मैं बिना किसी समस्या के छवि को चलाने में सक्षम था, केवल kubernetes के माध्यम से मुझे क्रैश मिला।

क्या कोई मेरी मदद कर सकता है, मैं बिना लॉग देखे कैसे डिबग कर सकता हूं?


1
क्या आप पॉड याम्ल में कमांड जोड़ने का प्रयास कर सकते हैं ?
सुकुमार

2
kubectl logs -f <pod_name>इसके साथ लॉग की जाँच करें सर्वर (सर्वर / कंटेनर) स्टार्टअप समस्या हो सकती है।
विश्रांत

आप यह kubectl get eventsदेखने के लिए भी दौड़ सकते हैं कि क्रश लूप क्या है।
मार्गैक क्रिस

जवाबों:


82

जैसा कि @Sukumar ने टिप्पणी की है, आपके पास अपने डॉकफ़राइल को चलाने के लिए एक कमांड रखने की आवश्यकता है या आपके प्रतिकृति- नियंत्रक को एक कमांड निर्दिष्ट करने की आवश्यकता है।

फली दुर्घटनाग्रस्त हो जाती है क्योंकि यह शुरू होती है फिर तुरंत बाहर निकल जाती है, इस प्रकार कुबेरनेट्स फिर से शुरू होता है और चक्र जारी रहता है।


1
यदि हमारे पास उचित डॉकफेराइल है और अभी भी त्रुटि हो रही है, तो इसका क्या कारण हो सकता है? मुझे वही त्रुटि मिल रही है जो मैंने ठीक से कमांड जोड़ दी है। और जब मैं kubernetes परिनियोजन का उपयोग किए बिना स्वतंत्र डॉकटर छवि का परीक्षण कर रहा हूं, तो मुझे आउटपुट मिल रहा है। तो यह डॉकरीफाइल के साथ समस्या नहीं है। इसकी तैनाती से संबंधित कुछ? यहाँ मैंने पूरे मुद्दे को जोड़ा है जिसका मैं सामना कर रहा हूँ, stackoverflow.com/questions/56001352/… । क्या आप कृपया उस पर गौर कर सकते हैं?
याकूब

2
वास्तव में एक अच्छा ब्लॉग है जो एक क्रैशहॉपबैकऑफ़ का अर्थ और गहराई से जाने वाले विभिन्न मामलों में जहां यह हो सकता है: managekube.com/kubernetes/pod/failure/crashloopbackoff/krsbot/…
gar

52
kubectl -n <namespace-name> describe pod <pod name>

kubectl -n <namespace-name> logs -p  <pod name> 

47
यद्यपि यह आदेश समस्या का समाधान कर सकता है (या हल नहीं कर सकता है), एक अच्छे उत्तर में हमेशा एक स्पष्टीकरण होना चाहिए कि समस्या कैसे हल होती है।
BDL

पहला कमांड kubectl -n <namespace-name> describe pod <pod name>आपके पॉड का वर्णन करने के लिए है, जिसका उपयोग पॉड निर्माण में किसी भी त्रुटि को देखने के लिए किया जा सकता है और पॉड को संसाधन की कमी की तरह चलाया जा सकता है, आदि और दूसरा कमांड kubectl -n <namespace-name> logs -p <pod name>पॉड में चलने वाले एप्लिकेशन के लॉग देखने के लिए।
शाम

13

मुझे बाद में कुबेटल एक्ज़िक कॉल्स के लिए एक पॉड चलाने की आवश्यकता थी और जैसा कि ऊपर कहा गया था कि मेरे पॉड को मेरे k8s क्लस्टर द्वारा मार दिया जा रहा था क्योंकि इसने अपने सभी कार्यों को पूरा कर लिया था। मैं अपनी पॉड को केवल एक कमांड से पॉड को किक करके चालू रखने में कामयाब रहा, जो अपने आप बंद नहीं होगा:

kubectl run YOUR_POD_NAME -n YOUR_NAMESPACE --image SOME_PUBLIC_IMAGE:latest --command tailf /dev/null

7
tailfमेरे लिए काम नहीं किया लेकिन यह (अल्पाइन --command /usr/bin/tail -- -f /dev/null
लाइन पर

1
यह पॉड नाम नहीं है। यह परिनियोजन नाम है। kubectl run <deployment name> -n <namespace> --image <image> --command tailf /dev/null
गेब्रियल वू

9

यदि आपके पास एक ऐसा एप्लिकेशन है, जो धीमी गति से बूटस्ट्रैप पर ले जाता है, तो यह तत्परता / प्रचलन के प्रारंभिक मूल्यों से संबंधित हो सकता है। मैंने अपनी समस्या initialDelaySecondsको 120 के मूल्य में बढ़ाकर हल कर दिया क्योंकि मेरे SpringBootआवेदन में बहुत अधिक इनिशियलाइज़ेशन है। दस्तावेज़ में डिफ़ॉल्ट 0 ( https://kubernetes.io/docs/api-reference/v1.9/#probe-v1-core ) का उल्लेख नहीं है

service:
  livenessProbe:
    httpGet:
      path: /health/local
      scheme: HTTP
      port: 8888
    initialDelaySeconds: 120
    periodSeconds: 5
    timeoutSeconds: 5
    failureThreshold: 10
  readinessProbe:
    httpGet:
      path: /admin/health
      scheme: HTTP
      port: 8642
    initialDelaySeconds: 150
    periodSeconds: 5
    timeoutSeconds: 5
    failureThreshold: 10

उन मूल्यों के बारे में बहुत अच्छी व्याख्या दी गई है, जो कि आरंभिक मूल्य का डिफ़ॉल्ट मान है

स्वास्थ्य या तत्परता की जाँच एल्गोरिथ्म की तरह काम करता है:

  1. के लिए इंतजार initialDelaySeconds
  2. प्रदर्शन की जाँच करें और timeoutSecondsएक समय समाप्ति की प्रतीक्षा करें यदि निरंतर सफलताओं की संख्या successThresholdवापसी की सफलता से अधिक हो
  3. यदि निरंतर विफलताओं की संख्या failureThresholdवापसी विफलता से अधिक है अन्यथा प्रतीक्षा करें periodSecondsऔर एक नई जांच शुरू करें

मेरे मामले में, मेरा आवेदन अब बहुत स्पष्ट तरीके से बूटस्ट्रैप कर सकता है, जिससे मुझे पता है कि मुझे आवधिक क्रैशलूपबैक नहीं मिलेगा क्योंकि कभी-कभी यह उन दरों की सीमा पर होगा।


आपने मुझे बहुत घंटे बचाए! धन्यवाद। मेरी जांच का समय 90 का था और यह पॉड शुरू नहीं होने देता था।
अभिनव पांडे

8

से यह पृष्ठ , सब कुछ सही ढंग से चल रहा है के बाद कंटेनर मरता लेकिन दुर्घटनाओं क्योंकि सभी आदेशों समाप्त हो गया। या तो आप अपनी सेवाओं को अग्रभूमि पर चलाते हैं, या आप एक जीवित स्क्रिप्ट बनाते हैं। ऐसा करने से, कुबेरनेट्स दिखाएगा कि आपका आवेदन चल रहा है। हमें ध्यान देना होगा कि Dockerपर्यावरण में, यह समस्या सामने नहीं आई है। यह केवल कुबेरनेट्स है जो एक रनिंग ऐप चाहता है।

अद्यतन (एक उदाहरण):

यहाँ कैसे क्रैशश्लोपबैक से बचने के लिए , एक नेटशूट कंटेनर लॉन्च करते समय :

kubectl run netshoot --image nicolaka/netshoot -- sleep infinity

6

मेरी फली दुर्घटनाग्रस्त होती रही और मैं इसका कारण नहीं खोज पाया। सौभाग्य से एक जगह है जहां कुबेरनेट्स सभी घटनाओं को बचाता है जो मेरी फली के दुर्घटनाग्रस्त होने से पहले हुई थी
(टाइमस्टैम्प द्वारा छांटे गए #List घटनाक्रम)

इन घटनाओं को देखने के लिए कमांड चलाएं:

kubectl get events --sort-by=.metadata.creationTimestamp

--namespace mynamespaceयदि आवश्यक हो तो कमांड में एक तर्क जोड़ना सुनिश्चित करें

कमांड के आउटपुट में दिखाई गई घटनाओं ने मुझे दिखाया कि मेरी पॉड दुर्घटनाग्रस्त क्यों हुई।


धन्यवाद! इस टिप ने मुझे यह पता लगाने में मदद की कि गुप्त के साथ वॉल्यूम बढ़ाने में समस्या थी।
लीफ जॉन

इसके अलावा मुझे फली पर असाइन किए गए प्रबंधित पहचान को खोजने में मदद मिली कि वह गलत था।
Jorn.Beyers

3

अपनी yaml फ़ाइल में, कमांड्स जोड़ें और args लाइन्स:

...
containers:
      - name: api
        image: localhost:5000/image-name 
        command: [ "sleep" ]
        args: [ "infinity" ]
...

मेरे लिये कार्य करता है।


1

मैंने एक ही मुद्दे को देखा, और yaml फ़ाइल में कमांड और आर्ग्स ब्लॉक जोड़ा। मैं संदर्भ के लिए अपनी yaml फ़ाइल का नमूना कॉपी कर रहा हूं

 apiVersion: v1
    kind: Pod
    metadata:
      labels:
        run: ubuntu
      name: ubuntu
      namespace: default
    spec:
      containers:
      - image: gcr.io/ow/hellokubernetes/ubuntu
        imagePullPolicy: Never
        name: ubuntu
        resources:
          requests:
            cpu: 100m
        command: ["/bin/sh"]
        args: ["-c", "while true; do echo hello; sleep 10;done"]
      dnsPolicy: ClusterFirst
      enableServiceLinks: true

0

मेरे मामले में स्टीव एस ने जो समस्या बताई थी:

फली दुर्घटनाग्रस्त हो जाती है क्योंकि यह शुरू होती है फिर तुरंत बाहर निकल जाती है, इस प्रकार कुबेरनेट्स फिर से शुरू होता है और चक्र जारी रहता है।

अर्थात् मेरे पास एक जावा एप्लिकेशन था जिसका mainएक अपवाद था (और कुछ ने डिफ़ॉल्ट अनकैप्ड अपवाद हैंडलर को ओवररोड किया ताकि कुछ भी लॉग न हो)। समाधान के शरीर डाल करने के लिए था mainमें try { ... } catchऔर अपवाद प्रिंट आउट। इस प्रकार मैं पता लगा सकता था कि क्या गलत था और इसे ठीक करें।

(ऐप कॉलिंग में एक और कारण कुछ हो सकता है System.exit; आप बाहर निकलने से रोकने (या कॉल को लॉग इन करने के लिए) SecurityManagerओवरराइड के साथ एक कस्टम का उपयोग कर सकते हैं checkExit; देखें https://stackoverflow.com/a/5401319/204205 ।)


0

उसी समस्या का निवारण करते समय मुझे उपयोग करते समय कोई लॉग नहीं मिला kubeclt logs <pod_id>। इसलिए मैं ssh: नोड डॉक का उपयोग करते हुए कंटेनर को चलाने के लिए नोड उदाहरण में एड करता हूं। मेरे आश्चर्य के लिए यह भी असफल रहा।

कंटेनर के साथ प्रवेश करते समय:

docker exec -it faulty:latest /bin/sh

और आसपास मैंने पाया कि यह नवीनतम संस्करण नहीं था।

कर्ता चित्र का एक दोषपूर्ण संस्करण पहले से ही उपलब्ध था।

जब मैंने दोषपूर्ण हटा दिया: नवीनतम उदाहरण:

docker rmi faulty:latest

सब कुछ काम करने लगा।


0

मैंने इस समस्या को हल किया मैंने मेमोरी संसाधन बढ़ा दिया

  resources:
          limits:
            cpu: 1
            memory: 1Gi
          requests:
            cpu: 100m
        memory: 250Mi 

0

मेरे पास एक ही मुद्दा था और अब मैंने इसे हल कर दिया है। मैं डॉकटर-कंपोज फाइल का उपयोग नहीं कर रहा हूं। मैंने सिर्फ अपनी डॉक फ़ाइल में इस पंक्ति को जोड़ा और यह काम किया।

ENV CI=true

संदर्भ: https://github.com/GoogleContainerTools/skaffold/issues/3882


0

फली और चल फिर से पुन: प्रयास करें

 kubectl get pods --watch

आगे बढ़ने के साथ फली की स्थिति देखना।

मेरे मामले में, मैं केवल अंतिम परिणाम देखूंगा, 'क्रैशऑलॉपबैक', लेकिन डॉकटर कंटेनर स्थानीय स्तर पर ठीक चला। इसलिए मैंने उपरोक्त कमांड का उपयोग करके पॉड्स देखे, और मैंने कंटेनर को एक OOMKilled राज्य में संक्षिप्त रूप से प्रगति करते देखा , जिसका मतलब मेरे लिए यह था कि इसे अधिक मेमोरी की आवश्यकता थी।


0

मैंने सरणी के अंदर उद्धरण और कमांड मूल्य के बीच की जगह को हटाकर इस समस्या को हल किया, यह इसलिए हुआ क्योंकि कंटेनर शुरू होने के बाद बाहर निकल गया और कोई निष्पादन योग्य कमांड मौजूद नहीं है जो कंटेनर के अंदर चलाया जाए।

['sh', '-c', 'echo Hello Kubernetes! && sleep 3600']

0

मेरे पास भी ऐसा ही मुद्दा था, लेकिन जब मैंने अपनी zookeeper.yamlफाइल को ठीक किया, जो कि सेवा का नाम था, फाइल तैनाती के कंटेनर नामों के साथ बेमेल थी। उन्हें समान बनाकर इसका समाधान हो गया।

apiVersion: v1
kind: Service
metadata:
  name: zk1
  namespace: nbd-mlbpoc-lab
  labels:
    app: zk-1
spec:
  ports:
  - name: client
    port: 2181
    protocol: TCP
  - name: follower
    port: 2888
    protocol: TCP
  - name: leader
    port: 3888
    protocol: TCP
  selector:
    app: zk-1
---
kind: Deployment
apiVersion: extensions/v1beta1
metadata:
  name: zk-deployment
  namespace: nbd-mlbpoc-lab
spec:
  template:
    metadata:
      labels:
        app: zk-1
    spec:
      containers:
      - name: zk1
        image: digitalwonderland/zookeeper
        ports:
        - containerPort: 2181
        env:
        - name: ZOOKEEPER_ID
          value: "1"
        - name: ZOOKEEPER_SERVER_1
          value: zk1
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.