আমার কুবেরনেট পোদগুলি "ক্র্যাশলুপব্যাকআফ" দিয়ে ক্র্যাশ করে চলেছে তবে আমি কোনও লগ খুঁজে পাচ্ছি না


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)"

আমার দুটি পোড রয়েছে: এনএফএস-ওয়েব-07 আরএক্স, এনএফএস-ওয়েব-এফডিআর9h, তবে আমি যদি "কুবেটেল লগগুলি এনএফএস-ওয়েব -07 আরএক্সজে" করি বা "-পি" অপশনটি ব্যবহার করি তবে উভয় পোদে কোনও লগ দেখতে পাচ্ছি না।

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

এটি আমার রেপ্লিকেশনকন্ট্রোলার ইয়ামল ফাইল: রেপ্লিকেশনকন্ট্রোলার ইয়ামল ফাইল

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

আমি আমার কুবেরনেটস ক্লাস্টারটি সেন্টো -১ 16১১, কিউবে সংস্করণে চালাচ্ছি:

[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"}

যদি আমি "ডকার রান" দ্বারা ডকার ইমেজটি চালিত করি তবে আমি কোনও সমস্যা ছাড়াই চিত্রটি চালাতে সক্ষম হয়েছি, কেবল কুবেরনেটের মাধ্যমেই আমি ক্র্যাশ পেয়েছি।

কেউ আমাকে সাহায্য করতে পারে, কোনও লগ না দেখে কীভাবে আমি ডিবাগ করতে পারি?


4
আপনি কি পোড ইয়ামলে একটি কমান্ড যুক্ত করার চেষ্টা করতে পারেন ?
সুকুমার

4
লগগুলি kubectl logs -f <pod_name>এটির (সার্ভার / ধারক) প্রারম্ভিক সমস্যা হতে পারে তা পরীক্ষা করুন ।
বিশ্রান্ত

kubectl get eventsক্রাশ লুপটি কী কারণে ঘটছে তা দেখতে আপনিও দৌড়াতে পারেন।
মারগাচ ক্রিস

উত্তর:


83

যেমনটি সুকুমার মন্তব্য করেছেন, আপনার ডকফাইফিলের চালনার জন্য একটি কমান্ড থাকতে হবে বা আপনার প্রতিলিপি নিয়ন্ত্রণকারীকে একটি আদেশ নির্দিষ্ট করতে হবে।

শুঁটি ক্রাশ হচ্ছে কারণ এটি শুরু হওয়ার সাথে সাথে ততক্ষণে প্রস্থান করা হয়, এইভাবে কুবারনেটস পুনরায় আরম্ভ হয় এবং চক্রটি অবিরত থাকে।


4
আমাদের যদি যথাযথ ডকফিলিলে যোগ হয় এবং তবুও ত্রুটিটি পাওয়া যায় তবে এর কারণ কী হতে পারে? আমি একই ত্রুটিটি পেয়ে যাচ্ছি যদিও আমি কমান্ডটি সঠিকভাবে যুক্ত করেছি। এবং যখন আমি কুবারনেটস মোতায়েন না করেই স্বতন্ত্র ডকার চিত্রটি পরীক্ষা করছি তখন আমি আউটপুট পাচ্ছি। সুতরাং ডকফাইফাইল নিয়ে সমস্যা নেই। এটি মোতায়েনের সাথে সম্পর্কিত কিছু? আমি এখানে পুরো সমস্যাটি যুক্ত করেছি যা আমি মোকাবিলা করছি, স্ট্যাকওভারফ্লো . com / প্রশ্নগুলি / 66০০১৩৫২/২ । আপনি কি দয়া করে এটি দেখতে পারেন?
জ্যাকব 13

4
আছে: সত্যিই একটি ভাল ব্লগ কি একটি CrashLoopBackoff উপায়ে এবং বিভিন্ন ক্ষেত্রে যেখানে এই ঘটতে পারে গভীরতা যায় managedkube.com/kubernetes/pod/failure/crashloopbackoff/k8sbot/...
Gar

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

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

47
যদিও এই আদেশগুলি সমস্যাটি (বা সমাধান করতে পারে না) হতে পারে, একটি উত্তরের উত্তরে সর্বদা একটি ব্যাখ্যা থাকা উচিত যে কীভাবে সমস্যাটি সমাধান করা হয়।
বিডিএল

প্রথম কমান্ডটি kubectl -n <namespace-name> describe pod <pod name>হ'ল আপনার পোডকে বর্ণনা করা, যা পোড তৈরির ক্ষেত্রে কোনও ত্রুটি দেখতে ব্যবহার করা যেতে পারে যেমন কোনও উত্সের অভাব ইত্যাদি। এবং দ্বিতীয় কমান্ডটি kubectl -n <namespace-name> logs -p <pod name>পোদে চলমান অ্যাপ্লিকেশনটির লগগুলি দেখতে।
আইম্যাভিষেক

13

পরবর্তী কুবেটেল এক্সিকিউটি কলগুলির জন্য আমার একটি পোড রাখার দরকার ছিল এবং উপরের মতামত হিসাবে উল্লেখ করা হয়েছে যে আমার পোডটি আমার কে 8 এস ক্লাস্টারের দ্বারা মারা যাচ্ছিল কারণ এটি তার সমস্ত কাজ পরিচালনা শেষ করেছে। আমি নিজের পডকে এমন কমান্ড দিয়ে পোদে লাথি মেরে চালিয়ে যেতে পরিচালিত করেছি যা এতে স্বয়ংক্রিয়ভাবে থামবে না:

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
জাকুব হল

4
এটি পড নাম নয়। এটি স্থাপনার নাম। kubectl run <deployment name> -n <namespace> --image <image> --command tailf /dev/null
গ্যাব্রিয়েল উ

9

আপনার যদি এমন অ্যাপ্লিকেশন থাকে যা বুটস্ট্র্যাপে ধীর হয়ে যায়, এটি প্রস্তুতি / প্রাণবন্ত প্রোবগুলির প্রাথমিক মানগুলির সাথে সম্পর্কিত হতে পারে। initialDelaySecondsআমার SpringBootঅ্যাপ্লিকেশন প্রচুর প্রাথমিককরণের সাথে সম্পর্কিত হওয়ায় আমি 120 এর মান বাড়িয়ে আমার সমস্যার সমাধান করেছি । ডকুমেন্টেশনটিতে ডিফল্ট 0 ( https://kubernetes.io/docs/api-references/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

আমার পোড ক্রাশ করে চলেছে এবং আমি কারণটি খুঁজে পেতে অক্ষম। ভাগ্যক্রমে এমন একটি জায়গা রয়েছে যেখানে আমার পোড ক্রাশ হওয়ার আগে ঘটে যাওয়া সমস্ত ঘটনা কুবার্নেটস সংরক্ষণ করে
(# তালিকাসমূহ অনুসারে তালিকাভুক্ত ইভেন্টগুলি)

এই ইভেন্টগুলি দেখতে কমান্ডটি চালান:

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

--namespace mynamespaceপ্রয়োজনে কমান্ডটিতে যুক্তি যুক্ত করার বিষয়টি নিশ্চিত করুন

কমান্ডের আউটপুটে প্রদর্শিত ইভেন্টগুলি আমার পোদ কেন ক্রাশ হতে থাকে তা দেখিয়েছিল।


ধন্যবাদ! এই টিপটি আমাকে গোপনীয়তার সাথে ভলিউম মাউন্ট করার ক্ষেত্রে একটি সমস্যা ছিল তা সনাক্ত করতে সহায়তা করে।
লিফ জন

এছাড়াও পোডে নির্ধারিত পরিচালিত পরিচয়টি ভুল হিসাবে আবিষ্কার করতে আমাকে সহায়তা করেছিল।
জর্ন.বিয়ার্স

3

আপনার ইয়ামল ফাইলে কমান্ড এবং আরগস লাইন যুক্ত করুন:

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

আমার জন্য কাজ কর.


1

আমি একই সমস্যাটি পর্যবেক্ষণ করেছি, এবং 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একটি কাস্টম ব্যবহার করতে পারেন ; https://stackoverflow.com/a/5401319/204205 দেখুন ))SecurityManagercheckExit


0

একই সমস্যাটির সমস্যা সমাধানের সময় আমি ব্যবহার করার সময় কোনও লগ খুঁজে পাইনি kubeclt logs <pod_id>। সুতরাং আমি ssh: প্লেইন ডকার ব্যবহার করে ধারকটি চালানোর চেষ্টা করার জন্য নোড ইভেন্টে এড করুন in আমার অবাক করার বিষয়টিও ব্যর্থ হয়েছিল।

পাত্রে প্রবেশ করার সাথে:

docker exec -it faulty:latest /bin/sh

এবং আশেপাশে ঝাঁকুনি দিয়েছি যে এটি সর্বশেষতম সংস্করণ নয়।

দকারের চিত্রটির একটি ত্রুটিযুক্ত সংস্করণ উদাহরণটিতে ইতিমধ্যে উপলব্ধ ছিল।

আমি যখন ত্রুটিগুলি সরিয়েছি: সর্বশেষ উদাহরণ সহ:

docker rmi faulty:latest

সবকিছু কাজ শুরু।



0

আমার একই সমস্যা ছিল এবং এখন আমি শেষ পর্যন্ত এটি সমাধান করেছি। আমি ডকার-রচনা ফাইলটি ব্যবহার করছি না। আমি এই লাইনটি আমার ডকার ফাইলে সবে যুক্ত করেছি এবং এটি কার্যকর হয়েছে।

ENV CI=true

তথ্যসূত্র: https://github.com/GoogleContainerTools/skaffold/issues/3882


0

শুঁটিটি পুনরায় চালু করে চালানোর চেষ্টা করুন

 kubectl get pods --watch

পোডের অবস্থা যতই বাড়ছে তা দেখার জন্য।

আমার ক্ষেত্রে, আমি কেবল শেষ ফলাফলটি দেখতে পাবো, 'ক্র্যাশলুপব্যাকআফ', তবে ডকারের ধারকটি স্থানীয়ভাবে দৌড়েছিল। সুতরাং আমি উপরের কমান্ডটি ব্যবহার করে শুঁটিগুলি দেখেছি এবং আমি ধারকটি একটি ওমকিল্ড অবস্থায় সংক্ষেপে অগ্রসর হতে দেখেছি , যার অর্থ আমার আরও বোঝা যাচ্ছে যে এটির জন্য আরও বেশি স্মৃতি দরকার।


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
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.