dockershim에서 텔레메트리·보안 에이전트 마이그레이션하기

dockershim에서 텔레메트리·보안 에이전트 마이그레이션하기 (Migrating telemetry and security agents from dockershim)

Docker Engine과의 직접 통합에 대한 쿠버네티스 지원은 폐기되었고 제거됐어요. 대부분의 앱은 컨테이너를 호스팅하는 런타임에 직접 의존하지 않아요. 하지만 컨테이너 메타데이터, 로그, 메트릭을 수집하기 위해 Docker에 의존하는 텔레메트리·모니터링 에이전트가 여전히 많이 있어요. 이 문서는 이러한 의존성을 감지하는 방법 정보와, 이러한 에이전트를 일반 도구나 대체 런타임을 사용하도록 마이그레이션하는 링크를 모아 놓은 것이에요.

출처: 문서

본문

텔레메트리·보안 에이전트 (Telemetry and security agents)

쿠버네티스 클러스터 안에서 텔레메트리 또는 보안 에이전트를 실행하는 방법은 몇 가지가 있어요. 일부 에이전트는 DaemonSet으로 또는 노드에 직접 실행될 때 Docker Engine에 직접 의존해요.

일부 텔레메트리 에이전트가 Docker Engine과 통신하는 이유

역사적으로 쿠버네티스는 Docker Engine과 함께 동작하도록 작성됐어요. 쿠버네티스는 네트워킹과 스케줄링을 담당하고, 노드에서 (파드 안의) 컨테이너를 시작하고 실행하기 위해 Docker Engine에 의존했어요. 파드 이름 같은 텔레메트리와 관련된 일부 정보는 쿠버네티스 구성 요소에서만 얻을 수 있어요. 컨테이너 메트릭 같은 다른 데이터는 컨테이너 런타임의 책임이 아니에요. 초기 텔레메트리 에이전트는 정확한 그림을 보고하기 위해 컨테이너 런타임과 쿠버네티스를 모두 쿼리해야 했어요. 시간이 지나면서 쿠버네티스는 여러 런타임을 지원하는 능력을 얻었고, 이제는 컨테이너 런타임 인터페이스와 호환되는 어떤 런타임이든 지원해요.

일부 텔레메트리 에이전트는 Docker Engine 도구에 특히 의존해요. 예를 들어 에이전트는 컨테이너와 프로세스를 나열하기 위해 docker psdocker top, 스트리밍 로그를 받기 위해 docker logs 같은 명령을 실행할 수 있어요. 기존 클러스터의 노드가 Docker Engine을 사용하고 다른 컨테이너 런타임으로 전환하면, 이러한 명령은 더 이상 동작하지 않아요.

Docker Engine에 의존하는 DaemonSet 식별하기

파드가 노드에서 실행 중인 dockerd에 호출을 하려면, 파드는 다음 중 하나를 해야 해요.

  • Docker 데몬의 권한 있는 소켓을 포함하는 파일시스템을 볼륨으로 마운트하거나,
  • Docker 데몬의 권한 있는 소켓의 특정 경로를 직접, 역시 볼륨으로 마운트하거나.

예를 들어 COS 이미지에서 Docker는 Unix 도메인 소켓을 /var/run/docker.sock에 노출해요. 즉, 파드 스펙에 /var/run/docker.sock의 hostPath 볼륨 마운트가 포함될 거예요.

다음은 Docker 소켓을 직접 매핑하는 마운트가 있는 파드를 찾는 샘플 셸 스크립트예요. 이 스크립트는 파드의 네임스페이스와 이름을 출력해요. 다른 마운트를 검토하려면 grep '/var/run/docker.sock'을 제거할 수 있어요.

kubectl get pods --all-namespaces \
-o=jsonpath='{range .items[*]}{"\n"}{.metadata.namespace}{":\t"}{.metadata.name}{":\t"}{range .spec.volumes[*]}{.hostPath.path}{", "}{end}{end}' \
| sort \
| grep '/var/run/docker.sock'

참고:

노드 에이전트에서 Docker 의존성 감지하기

클러스터 노드가 사용자 정의되어 노드에 추가 보안·텔레메트리 에이전트를 설치한다면, 에이전트 공급업체에 Docker에 대한 의존성이 있는지 확인하세요.

텔레메트리·보안 에이전트 공급업체

이 섹션은 컨테이너 런타임에 의존할 수 있는 다양한 텔레메트리·보안 에이전트에 대한 정보를 모으기 위한 것이에요.

다양한 텔레메트리·보안 에이전트 공급업체에 대한 마이그레이션 지침의 작업 진행 중 버전을 Google doc에 보관하고 있어요. dockershim에서 마이그레이션하기 위한 최신 지침은 공급업체에 문의하세요.

dockershim에서 마이그레이션하기

Aqua

변경할 필요가 없어요. 런타임 전환 시 모든 것이 원활하게 동작해야 해요.

Datadog

마이그레이션 방법: 쿠버네티스의 Docker 폐기. Docker Engine에 접근하는 파드는 다음 중 하나를 포함하는 이름을 가질 수 있어요.

  • datadog-agent
  • datadog
  • dd-agent

Dynatrace

마이그레이션 방법: Dynatrace에서 Docker 전용에서 일반 컨테이너 메트릭으로 마이그레이션.

Containerd 지원 발표: containerd 기반 쿠버네티스 환경에 대한 자동화된 전체 스택 가시성 확보.

CRI-O 지원 발표: CRI-O 쿠버네티스 컨테이너에 대한 자동화된 전체 스택 가시성 확보(베타).

Docker에 접근하는 파드는 다음을 포함하는 이름을 가질 수 있어요.

  • dynatrace-oneagent

Falco

마이그레이션 방법: Falco를 dockershim에서 마이그레이션. Falco는 어떤 CRI 호환 런타임이든 지원해요(기본 구성에서는 containerd 사용). 문서가 모든 세부 사항을 설명해요. Docker에 접근하는 파드는 다음을 포함하는 이름을 가질 수 있어요.

  • falco

Prisma Cloud Compute

Prisma Cloud 문서의 "CRI(비-Docker) 클러스터에 Prisma Cloud 설치" 섹션을 확인하세요. Docker에 접근하는 파드는 다음과 같이 이름이 붙을 수 있어요.

  • twistlock-defender-ds

SignalFx (Splunk)

SignalFx Smart Agent(폐기됨)는 kubernetes-cluster, kubelet-stats/kubelet-metrics, docker-container-stats를 포함한 여러 Kubernetes용 모니터를 사용해요. kubelet-stats 모니터는 이전에 kubelet-metrics를 위해 공급업체가 폐기했어요. dockershim 제거의 영향을 받는 것은 docker-container-stats 모니터예요. docker-container-stats를 Docker Engine이 아닌 컨테이너 런타임과 함께 사용하지 마세요.

dockershim 의존 에이전트에서 마이그레이션하는 방법:

  • 구성된 모니터 목록에서 docker-container-stats를 제거하세요. 이 모니터를 비-dockershim 런타임으로 활성화된 채 두면, 노드에 docker가 설치되어 있을 때 잘못된 메트릭이 보고되고, docker가 설치되어 있지 않을 때는 메트릭이 없어요.
  • kubelet-metrics 모니터를 활성화하고 구성하세요.

참고:

Docker에 접근하는 파드는 다음과 같이 이름이 붙을 수 있어요.

  • signalfx-agent

Yahoo Kubectl Flame

Flame은 Docker 이외의 컨테이너 런타임을 지원하지 않아요. https://github.com/yahoo/kubectl-flame/issues/51 참고.

더 알아보기 (Learn more)