15.3. Node Observability Operator를 사용하여 CRI-O 및 Kubelet 프로파일링 데이터 요청
CRI-O 및 Kubelet 프로파일링 데이터를 수집하기 위해 노드 Observability 사용자 정의 리소스를 생성합니다.
15.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: cluster 1 spec: nodeSelector: kubernetes.io/hostname: <node_hostname> 2 type: crio-kubelet
NodeObservability
CR을 실행합니다.oc apply -f nodeobservability.yaml
출력 예
nodeobservability.olm.openshift.io/cluster created
다음 명령을 실행하여
NodeObservability
CR의 상태를 검토합니다.$ 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
인 경우NodeObservability
CR 실행이 완료됩니다.
15.3.2. 프로파일링 쿼리 실행
프로파일링 쿼리를 실행하려면 NodeObservabilityRun
리소스를 생성해야 합니다. 프로파일링 쿼리는 30초 동안 CRI-O 및 Kubelet 프로파일링 데이터를 가져오는 차단 작업입니다. 프로파일링 쿼리가 완료되면 컨테이너 파일 시스템 /run/node-observability
디렉터리 내에서 프로파일링 데이터를 검색해야 합니다. 데이터의 수명은 emptyDir
볼륨을 통해 에이전트 Pod에 바인딩되므로 에이전트 Pod가 실행 중인
동안 프로파일링 데이터에 액세스할 수 있습니다.
언제든지 하나의 프로파일링 쿼리만 요청할 수 있습니다.
사전 요구 사항
- Node Observability Operator가 설치되어 있습니다.
-
NodeObservability
CR(사용자 정의 리소스)을 생성했습니다. -
cluster-admin
권한이 있는 클러스터에 액세스할 수 있습니다.
프로세스
다음 텍스트가 포함된
nodeobservabilityrun.yaml
이라는NodeObservabilityRun
리소스 파일을 생성합니다.apiVersion: nodeobservability.olm.openshift.io/v1alpha2 kind: NodeObservabilityRun metadata: name: nodeobservabilityrun spec: nodeObservabilityRef: name: cluster
NodeObservabilityRun
리소스를 실행하여 프로파일링 쿼리를 트리거합니다.$ 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