24.3. Node Observability Operator를 사용하여 CRI-O 및 Kubelet 프로파일링 데이터 요청
CRI-O 및 Kubelet 프로파일링 데이터를 수집하기 위한 Node Observability 사용자 정의 리소스를 생성합니다.
24.3.1. 노드 관찰성 사용자 정의 리소스 만들기 링크 복사링크가 클립보드에 복사되었습니다!
프로파일링 쿼리를 실행하기 전에 NodeObservability 사용자 정의 리소스(CR)를 만들고 실행해야 합니다. NodeObservability CR을 실행하면 nodeSelector 와 일치하는 작업자 노드에서 CRI-O 프로파일링을 활성화하는 데 필요한 머신 구성 및 머신 구성 풀 CR이 생성됩니다.
작업자 노드에서 CRI-O 프로파일링이 활성화되어 있지 않으면 NodeObservabilityMachineConfig 리소스가 생성됩니다. NodeObservability CR에 지정된 nodeSelector 와 일치하는 작업자 노드가 다시 시작됩니다. 완료하는 데 10분 이상 걸릴 수 있습니다.
Kubelet 프로파일링은 기본적으로 활성화되어 있습니다.
노드의 CRI-O 유닉스 소켓은 에이전트 포드에 마운트되어 있으며, 이를 통해 에이전트는 CRI-O와 통신하여 pprof 요청을 실행할 수 있습니다. 마찬가지로 kubelet-serving-ca 인증서 체인은 에이전트 포드에 마운트되어 에이전트와 노드의 kubelet 엔드포인트 간의 안전한 통신이 가능합니다.
사전 요구 사항
- 노드 관찰 연산자를 설치했습니다.
- OpenShift CLI(oc)가 설치되어 있습니다.
-
cluster-admin권한이 있는 클러스터에 액세스할 수 있습니다.
프로세스
다음 명령을 실행하여 OpenShift Container Platform CLI에 로그인합니다.
$ oc login -u kubeadmin https://<HOSTNAME>:6443다음 명령을 실행하여
node-observability-operator네임스페이스로 다시 전환합니다.$ oc project node-observability-operator다음 텍스트를 포함하는
nodeobservability.yaml이라는 CR 파일을 만듭니다.apiVersion: nodeobservability.olm.openshift.io/v1alpha2 kind: NodeObservability metadata: name: cluster1 spec: nodeSelector: kubernetes.io/hostname: <node_hostname>2 type: crio-kubeletNodeObservabilityCR을 실행합니다.oc apply -f nodeobservability.yaml출력 예
nodeobservability.olm.openshift.io/cluster created다음 명령을 실행하여
NodeObservabilityCR의 상태를 검토하세요.$ oc get nob/cluster -o yaml | yq '.status.conditions'출력 예
conditions: conditions: - lastTransitionTime: "2022-07-05T07:33:54Z" message: 'DaemonSet node-observability-ds ready: true NodeObservabilityMachineConfig ready: true' reason: Ready status: "True" type: ReadyNodeObservabilityCR 실행은 이유가Ready이고 상태가True일때 완료됩니다.
24.3.2. 프로파일링 쿼리 실행 링크 복사링크가 클립보드에 복사되었습니다!
프로파일링 쿼리를 실행하려면 NodeObservabilityRun 리소스를 만들어야 합니다. 프로파일링 쿼리는 30초 동안 CRI-O 및 Kubelet 프로파일링 데이터를 가져오는 차단 작업입니다. 프로파일링 쿼리가 완료되면 컨테이너 파일 시스템 /run/node-observability 디렉토리 내에서 프로파일링 데이터를 검색해야 합니다. 데이터의 수명은 emptyDir 볼륨을 통해 에이전트 포드에 바인딩되므로 에이전트 포드가 실행 상태인 동안 프로파일링 데이터에 액세스할 수 있습니다.
언제든지 프로파일링 쿼리를 한 번만 요청할 수 있습니다.
사전 요구 사항
- 노드 관찰 연산자를 설치했습니다.
-
NodeObservability사용자 정의 리소스(CR)를 생성했습니다. -
cluster-admin권한이 있는 클러스터에 액세스할 수 있습니다.
프로세스
다음 텍스트를 포함하는
nodeobservabilityrun.yaml이라는 이름의NodeObservabilityRun리소스 파일을 만듭니다.apiVersion: nodeobservability.olm.openshift.io/v1alpha2 kind: NodeObservabilityRun metadata: name: nodeobservabilityrun spec: nodeObservabilityRef: name: clusterNodeObservabilityRun리소스를 실행하여 프로파일링 쿼리를 트리거합니다.$ oc apply -f nodeobservabilityrun.yaml다음 명령을 실행하여
NodeObservabilityRun의 상태를 검토하세요.$ oc get nodeobservabilityrun nodeobservabilityrun -o yaml | yq '.status.conditions'출력 예
conditions: - lastTransitionTime: "2022-07-07T14:57:34Z" message: Ready to start profiling reason: Ready status: "True" type: Ready - lastTransitionTime: "2022-07-07T14:58:10Z" message: Profiling query done reason: Finished status: "True" type: Finished상태가
True이면 프로파일링 쿼리가 완료되고 유형이완료됨.다음 bash 스크립트를 실행하여 컨테이너의
/run/node-observability경로에서 프로파일링 데이터를 검색합니다.for a in $(oc get nodeobservabilityrun nodeobservabilityrun -o yaml | yq .status.agents[].name); do echo "agent ${a}" mkdir -p "/tmp/${a}" for p in $(oc exec "${a}" -c node-observability-agent -- bash -c "ls /run/node-observability/*.pprof"); do f="$(basename ${p})" echo "copying ${f} to /tmp/${a}/${f}" oc exec "${a}" -c node-observability-agent -- cat "${p}" > "/tmp/${a}/${f}" done done