실행 중인 Pod를 디버깅하기 위해 kubectl debug 조사

개시하다
kubernetes 클러스터에서 실행되는 Pod의 디버깅 방법으로서kubectl exec 방법이 있습니다.
그러나 이 명령은 디버깅 대상인Pod의 용기에서 실행되며 kubectl exec에 용기를 디버깅하는 환경이 없으면 디버깅이 어려워집니다.
kubernetes에서 이러한 문제를 피하기 위해 지령kubectl debug pod이 하나 있습니다.
kubectl exec와의 차이점
우선 kubetl execkubectl debug pod의 차이점을 간단히 설명하고 싶습니다.
kubectl exec의 구조
간단히 말해 Pod 내 컨테이너에서 명령을 실행하는 동작입니다.
컨테이너 내에서 사용할 수 있는 명령만 사용할 수 있습니다.
예를 들어, 이미지에 실행 중인 컨테이너nginx:latest가 있는 Pod를 가정합니다.
이 용기는nginx와 관련된 명령(예를 들어 nginx -V을 사용할 수 있지만 ps 등 명령을 설치하지 않으면 사용할 수 없습니다.
따라서 디버깅할 때ps 명령어를 사용해도 볼 수 없다.
$ kubectl exec -n test-nginx -it test-nginx-b-78fbdc67f4-74c8v -- ps -aux
OCI runtime exec failed: exec failed: container_linux.go:380: starting container process caused: exec: "ps": executable file not found in $PATH: unknown
command terminated with exit code 126
용기 안에서 사용할 수 있는 명령이라면 확인할 수 있다.
$ kubectl exec -n test-nginx -it test-nginx-b-78fbdc67f4-74c8v -- date   
Sun Feb 27 17:30:17 UTC 2022
kubectl debug pod의 구조
그럼kubectl exec 무엇을 하려면, 임시로 사용하는 용기, 즉 명령을 추가하는 것이다.
우선, 운행 중 컨테이너 하나가 운행하고 있다고 가정한다.

이 컨테이너의 목적은 응용 프로그램을 이동하는 것이기 때문에 응용 프로그램 동작과 무관한 명령이 설치되지 않았습니다.
그래서 사용하고 싶어요kubectl debug pod!시 용기 안의 케이스에 들어가서 top 등 top 명령을 설치해야 한다
보안상의 관점에서 외부와 통신할 수 없는 Pod가 설정한 메커니즘 등을 고려하면 외부에서 명령을 설치할 수 없을 수도 있다.
이러한 문제를 해결하기 위해 apt에 효과 용기를 만듭니다.

따라서 특정 Pod에 컨테이너가 추가됩니다.
이렇게 하면 다음과 같은 기쁜 점이 있다.
  • 더럽히지 않는 용기
  • 모든imge를 사용할 수 있습니다. 예를 들어busybox
  • 특히 버스박스를 사용할 수 있어서 좋네요.
    kubectl debug pod 사용 방법
    아직 공식적인 기능이 아니기 때문에 실제 클러스터에서 사용할 때는 별도의 조작이 필요하므로 잊지 마세요.
    kubernetes의 공식 문서를 인용합니다. 이렇게 사용하십시오.
    $ kubectl debug -it ephemeral-demo --image=busybox --target=ephemeral-demo
    If you don't see a command prompt, try pressing enter.
    / #
    
    이렇게 하면podkubectl debug pod에서 가동ephemeral-demo된 컨테이너를 셸으로 호출할 수 있다.busybox를 지정하여 효과 컨테이너의 이름을 지정할 수 있습니다.
    지정--container [コンテナ名]을 통해 공유 프로세스 이름 공간의 용기를 지정할 수 있습니다.--target [コンテナ名]는 전자 오르간 용기를 만들고 조개를 집행하기 때문에 동작의 일부와kubectl debug pod가 똑같다는 것을 알아차릴 수 있을 것 같다.
    총결산
    알아봤어요kubectl exec.
    이 명령은 실행기 용기라고 불리는 임시 용기를 생성합니다kubectl debug podkubectl debug pod의 차이는 명령을 호출하는 장소가 다르다는 것이다.kubectl exec 모든 Pod의 컨테이너에서 명령↓
    kubectl exec 역서 디렉터리 용기를 만들고 만든 용기를 사용하여 명령을 실행하도록 설정되었습니다.

    최근에는 컨테이너 안전 대책으로 셸이 실행되지 못했고, 이와 같은 지금까지의 디버깅이 불가능한 대책도 있다
    이런 디버깅 방법을 기억하면 안심하고 대처할 수 있다.

    좋은 웹페이지 즐겨찾기