k8s 환경에서 시작하자마자 멈추는 포드를 디버깅하는 방법

16792801:

1 문제 설명

k8s의 Pod가 실행되기 시작하자마자 즉시 멈추고 죽습니다.급하게 kubeclt log -n XXX를 입력할 때마다 보기도 전에 Pod가 끊어지고 로그가 표시되지 않습니다. .

2가지 솔루션

2.1 Pod가 실행 중일 때 원래 명령을 먼저 실행하지 말고 3600초 동안 sleep을 실행하여 Pod를 활성 상태로 유지합니다.

2.2 이전에 Pod가 실행했던 명령어를 찾아서 Pod에 들어가서 실행 중인 명령어를 직접 입력하고, 명시적으로 실행 로그를 확인하여 오류의 원인을 찾아보세요.

3 연습

3.1 컨테이너 실행 명령 가져오기

새로운 버전의 k8s 환경에서는 docker 대신 containerd를 사용하는데, 컨테이너에서 실행 중인 명령을 어떻게 확인할 수 있나요? Docker는 docker Inspection img_id를 사용하여 얻습니다.containerd 환경에서의 작업 아이디어는 동일합니다.먼저 관심 있는 Pod가 실행 중인 노드를 찾은 다음 해당 노드에서 이미지 ID를 가져온 다음 crictl inpecti XXXX를 사용하여 가져옵니다. Pod가 시작될 때 명령을 실행합니다.

3.1.1 포드의 실행 중인 포드 찾기

[root@node1 ingress_down]# kubectl get pod -n com-pre -owide|grep test test
-service-7cbddfccdc-zvtmw 2/2 실행 중 0 23h 10.244.33.139 node5

3.1.2 해당 노드로 이동하고 crictl 이미지를 사용하여 포드에서 사용하는 이미지 ID를 가져옵니다.

[root@node5 ~]# crictl 이미지 |grep test
Harbor.myserver.com/data-sec/test 1.0.4 44c4651ee5970 327MB

3.1.3 crictl informi image_id를 사용하여 패키지된 이미지에서 시작 명령 가져오기

[root@node5 ~]# crictl informi 44c4651ee5970


{ “created”: “2022-07-11T01:45:32.489102244Z”, “created_by”: "/bin/sh -c #(nop) ENTRYPOINT [“java” “-Djava.security.egd=file:/dev/./urandom " “-jar” “/test.jar”]”, “empty_layer”: true }



위의 작업을 통해 테스트 이미지에서 실행되는 명령은 다음과 같습니다.
java -Djava.security.egd=file:/dev/./urandom -jar test.jar

3.2 test.yaml 파일 수정


- 이름: 테스트 서비스
이미지: Harbor.myserver.com/data-sec/test:1.0.6
#command: [“/bin/sh”,“-c”,“touch /tmp/test; sleep 30; rm -f /tmp/test; sleep 3600”] # 기본 실행 명령을 대체하려면 이 절전 문장을 사용하십시오.
imagePullPolicy: IfNotPresent
resources:
limits:

3.3 새 yaml 파일을 적용하고, 컨테이너에 들어가서 3.1.3에서 얻은 명령을 실행하고, 실행 로그를 관찰하여 오류를 해결합니다.

3.3.1 새로운 yaml 파일 적용

[root@node1 ingress_down]# kubectl apply -f test.yaml

3.3.2 포드 입력

[root@node1 ingress_down]# kubectl exec -it -n my_ns test-service-7cbddfccdc-zvtmw -c test-service – /bin/bash

3.3.3 포드 내부에 명령줄 입력

그런 다음 Pod에서 직접 위에서 얻은 명령줄을 실행합니다. java -Djava.security.egd=file:/dev/./urandom -jar test.jar, 로그 출력을 관찰하고 [root
@kms-pm-service- 7cbddfccdc -zvtmw /]# java -Djava.security.egd=file:/dev/./urandom -jar test.jar

3.3.4 침착하게 디버그하고 출력 로그를 관찰한다

이런 방식으로 로그를 관찰하고 차분하게 디버깅할 수 있으며, 오류가 보고된 후 Pod가 중단되어 출력 로그를 볼 수 없는 것에 대해 걱정할 필요가 없습니다.

4 요약

대부분의 오류는 kubectl log를 사용하여 직접 오류 로그를 확인할 수 있으며, 실행하자마자 오류가 발생하여 로그 출력을 볼 수 없는 경우 위의 해결 방법을 시도해 볼 수 있습니다. 이 노트가 모든 사람에게 유용할 수 있기를 바랍니다.

おすすめ

転載: blog.csdn.net/aligeter/article/details/131201670