다음을 통해 공유


AKS 클러스터에서 실시간 시스템 인사이트 캡처

이 문서에서는 Inspektor 가젯을 사용하여 AKS(Microsoft Azure Kubernetes Service) 클러스터에서 실시간 시스템 인사이트를 수집하는 프로세스에 대해 설명합니다. 이 문서에는 AKS 환경에 이 도구를 설치하기 위한 단계별 지침이 포함되어 있습니다. 또한 Inspektor 가젯이 실제 문제를 효과적으로 디버깅하기 위해 중요한 정보를 수집하는 데 어떻게 도움이 되는지 보여주는 실용적인 예제를 살펴봅니다.

데모

시작하려면 다음 빠른 데모를 고려하세요. 애플리케이션의 DNS 요청이 실패하는 이유를 파악해야 하는 경우를 가정해 보겠습니다. Inspektor 가젯을 사용하면 애플리케이션이 실행 중인 Kubernetes 네임스페이스에서 DNS 트래픽을 캡처할 수 있습니다.

kubectl gadget trace dns --namespace my-ns --output columns=+nameserver
K8S.NODE                           K8S.NAMESPACE  K8S.POD  PID      TID      COMM      QR  TYPE      QTYPE  NAME             RCODE NUMANSWERS NAMESERVER
aks-agentpool-97833681-vmss000001  my-ns          my-app   1349264  1349264  nslookup  Q   OUTGOING  A      www.example.com.       0          1.2.3.4
aks-agentpool-97833681-vmss000001  my-ns          my-app   1349264  1349264  nslookup  Q   OUTGOING  AAAA   www.example.com.       0          1.2.3.4
aks-agentpool-97833681-vmss000001  my-ns          my-app   1349264  1349264  nslookup  Q   OUTGOING  A      www.example.com.       0          1.2.3.4
aks-agentpool-97833681-vmss000001  my-ns          my-app   1349264  1349264  nslookup  Q   OUTGOING  AAAA   www.example.com.       0          1.2.3.4

이 정보에서 DNS 요청이 IP 주소 1.2.3.4에서 DNS 서버로 전달되지만 서버가 응답하지 않는 것을 볼 수 있습니다.

이제 이것이 1.2.3.4 기본 이름 서버 구성이 아니며 의심스러운 프로세스가 런타임에 구성을 수정하고 있다고 의심한다고 가정합니다. 이러한 종류의 경우 Inspektor 가젯은 DNS 진단 넘어갑니다. 또한 중요한 파일(예: /etc/resolv.conf)에 액세스하고 해당 파일을 수정하려는 프로세스를 모니터링할 수 있습니다. 이 모니터링 기능을 사용하려면 출력의 플래그를 필터링하여 쓰기 파일 액세스 모드 (O_WRONLY 쓰기 전용으로 열거나 O_RDWR 읽기 및 쓰기용으로 열기)를 표시합니다.

kubectl gadget trace open --namespace my-ns \
    --filter path:/etc/resolv.conf,flags:'~(O_WRONLY|O_RDWR)' \
    --output columns=+flags
K8S.NODE                           K8S.NAMESPACE  K8S.POD  K8S.CONTAINER  PID      COMM  FD  ERR  PATH              FLAGS
aks-agentpool-97833681-vmss000001  my-ns          my-app   my-app         1365052  vi    3   0    /etc/resolv.conf  O_WRONLY|O_CREAT

Inspektor 가젯이란?

Inspektor 가젯 은 Linux 및 Kubernetes 시스템 디버깅 및 검사 전용 도구를 빌드, 패키징, 배포 및 실행하기 위해 설계된 프레임워크입니다. 이러한 도구("가젯")는 eBPF 프로그램으로 구현됩니다. 주요 목표는 하위 수준 커널 데이터를 수집하여 특정 시스템 시나리오에 대한 인사이트를 제공하는 것입니다. Inspektor 가젯 프레임워크는 Kubernetes 리소스와 같은 고급 참조를 사용하여 수집된 데이터의 연결을 관리합니다. 이 통합을 통해 하위 수준 인사이트와 해당 상위 수준 컨텍스트 간에 원활한 연결이 존재합니다. 통합은 문제 해결 프로세스와 관련 정보 수집을 간소화합니다.

가제트

Inspektor 가젯은 시스템의 일반적인 상황을 디버그하고 관찰하도록 설계된 기본 제공 도구 집합을 제공합니다. 예를 들어 이러한 가젯을 사용하여 클러스터에서 다음 이벤트를 추적할 수 있습니다.

  • 프로세스 만들기
  • 파일 액세스
  • TCP 연결 또는 DNS 확인과 같은 네트워크 활동

가젯은 다른 메커니즘을 사용하여 수집한 정보를 제공합니다. instance 경우 일부 가젯은 특정 시간에 시스템 상태 대해 알릴 수 있습니다. 다른 가젯은 지정된 이벤트가 발생할 때마다 보고하거나 주기적인 업데이트를 제공할 수 있습니다.

다음은 몇 가지 일반적인 예입니다. 공식 설명서에서는 특정 사용 사례에 가장 적합한 가젯을 결정할 수 있도록 각 가젯에 대한 자세한 설명과 예제를 제공합니다. 그러나 기존 가젯이 현재 다루지 않는 사용 사례를 발견하면 Inspektor 가젯은 유연성을 제공합니다. 스크립트 명령을 실행하여 eBPF 추적 언어 bpftrace와 호환되는 스크립트를 실행할 수 있습니다. 또는 실행 명령을 실행하여 고유한 eBPF 프로그램을 실행할 수 있습니다. Inspektor 가젯 프레임워크는 사용자 지정 프로그램의 빌드, 패키징 및 배포를 처리하므로 고유한 요구 사항에 대한 프로세스를 간소화합니다. 또한 프로그램에서 수집하는 데이터를 보강하기 위해 상위 수준 메타데이터를 수집합니다.

사용 사례

이 문서의 시작 부분에 제시된 데모를 보완하기 위해 Inspektor 가젯이 디버깅 문제를 해결하는 데 어떻게 도움이 되는지 보여주는 문제 및 실제 시나리오 목록을 컴파일했습니다. 다음 예제에서는 Inspektor 가젯의 잠재력을 보여 줍니다. 그러나 이 도구의 기능은 이러한 시나리오를 넘어 확장됩니다. 따라서 Inspektor 가젯은 Kubernetes 디버깅 및 가시성의 복잡성을 탐색하는 데 매우 중요한 자산입니다.

문제 영역 증상 문제 해결
디스크 집약적 애플리케이션 높은 메모리 또는 CPU 사용량 또는 일관되지 않은 노드 준비 상태 애플리케이션은 광범위한 로깅과 같은 디스크 읽기/쓰기 작업에 지속적으로 참여할 수 있습니다. Inspektor 가젯을 사용하면 어떤 컨테이너가 더 많은 블록 I/O를 생성하는지 실시간으로 식별할 수 있습니다. 또는 더 구체적으로, 파일에 더 많은 읽기 및 쓰기를 일으키는 컨테이너를 찾을 수 있습니다.
"항상 DNS입니다." 높은 애플리케이션 대기 시간, 시간 제한 또는 잘못된 최종 사용자 환경

Inspektor 가젯을 사용하면 클러스터 의 모든 DNS 쿼리 및 응답을 추적할 수 있습니다. 특히 Inspektor 가젯은 DNS가 애플리케이션의 성능에 영향을 미치는지 여부를 확인하는 데 도움이 되는 다음 정보를 제공합니다.

  • 쿼리 성공
  • 응답에 오류가 포함되어 있는지 여부
  • 조회에 사용되는 이름 서버
  • 쿼리 응답 대기 시간
파일 시스템 액세스 애플리케이션이 잘못 실행되거나 올바르게 작동할 수 없습니다.

애플리케이션이 파일 시스템의 특정 구성, 로그 또는 기타 중요한 파일에 액세스할 수 없을 수 있습니다. 이러한 시나리오에서 Inspektor 가젯을 사용하면 Pod 내에서 열린 모든 파일을 추적 하여 액세스 문제를 진단할 수 있습니다. 애플리케이션이 파일을 열려고 할 때마다 다음 정보를 검색할 수 있습니다.

  • 파일을 여는 데 사용되는 플래그(예: O_RDONLY, O_WRONLY, O_RDWR 등)
  • 파일 열기 시도 성공 여부
  • 반환된 오류(파일 열기 시도가 실패하는 경우)

instance 경우 ENOENT(오류 2)로 인해 파일 열기 시도가 실패하면 애플리케이션이 존재하지 않는 파일을 열려고 할 수 있습니다. 즉, 코드에 오타가 있거나 다른 경로에서 파일을 사용할 수 있습니다.

RCE(원격 코드 실행) 애플리케이션 유휴 기간 동안 높은 CPU 사용량에서 명백한 암호화재킹 과 같은 무단 코드 실행 공격자가 시스템에 대해 이런 종류의 공격을 시도하려고 할 때 일반적으로 를 사용하여 bash코드를 실행해야 합니다. Inspektor 가젯을 사용하면 새 프로세스, 특히 와 같은 bash중요한 명령이 포함된 프로세스의 생성을 추적할 수 있습니다.

AKS 클러스터에 Inspektor 가젯을 설치하는 방법

One-Click Inspektor 가젯 배포

다음 단추를 선택하면 AKS 클러스터가 자동으로 만들어지고 Inspektor 가젯이 클러스터에 배포됩니다. 배포가 완료되면 제공된 셸 환경에서 Inspektor 가젯의 모든 기능을 탐색할 수 있습니다.

AKS 클러스터에 Inspektor 가젯 배포

"kubectl 가젯" 플러그 인을 실행하여 Inspektor 가젯 설치

이 섹션에서는 플러그 인을 실행하여 AKS 클러스터에 Inspektor 가젯을 설치하는 kubectl gadget 단계를 간략하게 설명합니다. 설치는 다음 두 부분으로 구성됩니다.

  • kubectl gadget 컴퓨터에 플러그 인 설치

  • 플러그 인을 kubectl gadget 실행하여 클러스터에 Inspektor 가젯 설치

    경고

    Inspektor 가젯을 배포하고 사용하는 데 많은 메커니즘을 사용할 수 있습니다. 이러한 각 메커니즘은 특정 사용 사례 및 요구 사항에 맞게 조정됩니다. kubectl 가젯 플러그 인을 사용하여 이러한 메커니즘 중 일부를 적용할 수 있지만 모든 메커니즘을 적용하는 것은 아닙니다. instance 경우 플러그 인을 사용하여 kubectl gadget Inspektor 가젯을 배포하는 것은 Kubernetes API 서버의 가용성에 따라 달라집니다. 가용성이 때때로 손상될 수 있으므로 이러한 구성 요소에 의존할 수 없는 경우 배포 메커니즘을 kubectl gadget사용하지 않는 것이 좋습니다. 이 사례 및 기타 사용 사례에 대한 자세한 내용은 Inspektor 가젯 설명서를 참조하세요.

필수 구성 요소

1부: 컴퓨터에 kubectl 플러그 인 가젯 설치

를 사용하여 krew 플러그 인을 설치하는 kubectl gadget 것이 좋습니다.

참고

특정 릴리스를 설치하거나 원본에서 컴파일하려면 GitHub에 kubectl 가젯 설치 를 참조하세요.

kubectl krew install gadget

이제 명령을 실행하여 설치를 확인합니다.version

kubectl gadget version

명령은 version 클라이언트(플러그 인)kubectl gadget 의 버전을 보여 주지만 서버(클러스터)에 아직 설치되지 않음을 알려줍니다.

Client version: vX.Y.Z
Server version: not installed

2부: 클러스터에 Inspektor 가젯 설치

다음 명령은 DaemonSet 컨트롤러를 배포합니다.

참고

다음 목록에 표시된 것처럼 배포를 사용자 지정하는 데 사용할 수 있는 몇 가지 옵션이 있습니다.

  • 특정 컨테이너 이미지 사용
  • 특정 노드에 배포
  • 사용자 지정 네임스페이스에 배포

이러한 옵션에 대한 자세한 내용은 공식 설명서의 클러스터에 설치 섹션을 참조하세요.

kubectl gadget deploy

명령을 다시 실행하여 설치를 version 확인합니다.

kubectl gadget version

이번에는 클라이언트와 서버가 모두 올바르게 설치되어 있는 것으로 표시됩니다.

Client version: vX.Y.Z
Server version: vX.Y.Z

타사 정보 고지 사항

이 문서에 나와 있는 다른 공급업체 제품은 Microsoft와 무관한 회사에서 제조한 것입니다. Microsoft는 이들 제품의 성능이나 안정성에 관하여 명시적이든 묵시적이든 어떠한 보증도 하지 않습니다.

타사 연락처 고지

Microsoft는 이 항목에 대한 추가 정보를 찾는 데 도움이 되는 타사 연락처 정보를 제공합니다. 이 연락처 정보는 공지 없이 변경될 수 있습니다. Microsoft는 타사 연락처 정보의 정확성을 보장하지 않습니다.

도움을 요청하십시오.

질문이 있거나 도움이 필요한 경우 지원 요청을 생성하거나Azure 커뮤니티 지원에 문의하세요. Azure 피드백 커뮤니티에 제품 피드백을 제출할 수도 있습니다.