17.3. Node Observability Operator를 사용하여 CRI-O 및 Kubelet 프로파일링 데이터 요청
CRI-O 및 Kubelet 프로파일링 데이터를 수집하기 위해 노드 Observability 사용자 정의 리소스를 생성합니다.
17.3.1. 노드 Observability 사용자 정의 리소스 생성 링크 복사링크가 클립보드에 복사되었습니다!
프로파일링 쿼리를 실행하기 전에 NodeObservability CR(사용자 정의 리소스)을 생성하고 실행해야 합니다. NodeObservability CR을 실행하면 nodeSelector 와 일치하는 작업자 노드에서 CRI-O 프로파일링을 활성화하는 데 필요한 머신 구성 및 머신 구성 풀 CR을 생성합니다.
작업자 노드에서 CRI-O 프로파일링이 활성화되지 않으면 NodeObservabilityMachineConfig 리소스가 생성됩니다. NodeObservability CR에 지정된 nodeSelector 와 일치하는 작업자 노드가 재시작됩니다. 완료하는 데 10분 이상 걸릴 수 있습니다.
kubelet 프로파일링은 기본적으로 활성화되어 있습니다.
노드의 CRI-O unix 소켓은 에이전트 pod에 마운트되므로 에이전트가 CRI-O와 통신하여 pprof 요청을 실행할 수 있습니다. 마찬가지로 kubelet-serving-ca 인증서 체인은 에이전트 pod에 마운트되므로 에이전트와 노드의 kubelet 끝점 간의 보안 통신이 가능합니다.
사전 요구 사항
- Node Observability Operator가 설치되어 있습니다.
- 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: Ready이유는
Ready이고 상태가True인 경우NodeObservabilityCR 실행이 완료됩니다.
17.3.2. 프로파일링 쿼리 실행 링크 복사링크가 클립보드에 복사되었습니다!
프로파일링 쿼리를 실행하려면 NodeObservabilityRun 리소스를 생성해야 합니다. 프로파일링 쿼리는 30초 동안 CRI-O 및 Kubelet 프로파일링 데이터를 가져오는 차단 작업입니다. 프로파일링 쿼리가 완료되면 컨테이너 파일 시스템 /run/node-observability 디렉터리 내에서 프로파일링 데이터를 검색해야 합니다. 데이터의 수명은 emptyDir 볼륨을 통해 에이전트 Pod에 바인딩되므로 에이전트 Pod가 실행 중인 동안 프로파일링 데이터에 액세스할 수 있습니다.
언제든지 하나의 프로파일링 쿼리만 요청할 수 있습니다.
사전 요구 사항
- Node Observability Operator가 설치되어 있습니다.
-
NodeObservabilityCR(사용자 정의 리소스)을 생성했습니다. -
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