Skip to content

Instantly share code, notes, and snippets.

@ruo91
Last active October 26, 2021 13:48
Show Gist options
  • Select an option

  • Save ruo91/0d73216362b79fc7ae8d015e2927c60f to your computer and use it in GitHub Desktop.

Select an option

Save ruo91/0d73216362b79fc7ae8d015e2927c60f to your computer and use it in GitHub Desktop.
OpenShift v4.x - 데이터 수집 도구 사용

OpenShift v4.x - 데이터 수집 도구 사용

운영 환경에서 장애 상황이 발생하였을 경우, 어느 부분에서 문제가 발생 되었는지 파악하기 위해,
OpenShift에서 제공하는 데이터 수집 도구를 사용하여 로그나 설정에 대한 파일을 수집 할 수 있다.

목차

  1. 시스템 정보 수집 (sosreport)
    1.1. Node Debug 수행
    1.2. ToolBox 수행
    1.3. sosreport 수집
    1.4. sosreport 압축 파일 복사

  2. 네트워크 패킷 수집 (tcpdump)
    2.1. Node Debug 수행
    2.2. Primary Network Interface 확인
    2.3. ToolBox 수행
    2.4. 네트워크 패킷 수집
    2.5. 파일 권한 수정
    2.6. 네트워크 패킷 파일 복사

  3. OpenShift 저널 로그 수집
    3.1. CRI-O 로그 수집
    3.2. Kubelet 로그 수집

  4. OpenShift Logging 정보 수집 (must-gater)

  5. Service Mesh 정보 수집 (must-gater)

  6. Ref URL


1. 시스템 정보 수집 (sosreport)

sosreport는 장애 상황에서 시스템의 설정 파일 및 로그 등과 같은 정보를 수집할 수 있는 도구다.
RHEL OS에서는 sos 패키지를 설치하여 명령어 사용이 가능하지만, OpenShift는 support-tools과 toolbox의
Container 이미지를 통해 chroot 환경에서 정보를 수집해야 한다.

본 작업은 sosreport 수집을 위해 노드 전체에 아래와 같은 방법으로 수행 한다.

1.1. Node Debug 수행

debug pod를 사용하여 해당 노드에 접근하여, chroot로 host 서버의 권한을 획득한다.

[root@bastion ~]# oc debug node/worker01.ocp4.ybkim.local -n default
sh-4.4# chroot /host

1.2. ToolBox 수행

chroot 환경에서 toolbox container 이미지를 다운로드 받기 위해 환경 변수를 설정 후 실행한다.

sh-4.4# vi /root/.toolboxrc
REGISTRY=registry.ocp4.ybkim.local
IMAGE=rhel8/support-tools:latest
TOOLBOX_NAME=ocp4-debug
sh-4.4# toolbox

1.3. sosreport 수집

sosreport 파일은 기본적으로 /var/tmp 디렉토리에 xz 압축파일로 저장된다.
다만, 디스크 용량 문제가 발생할 수 있기 때문에, /host/home/core/sosreport 디렉토리에 저장 될 수 있도록
생성 후 명령어를 수행한다. 이후 압축 파일의 uid:gid를 1000(core 사용자 계정)으로 설정 한다.

sh-4.4# mkdir -p /host/home/core/sosreport
sh-4.4# sos report --batch -z xz -k crio.all=on -k crio.logs=on --tmp-dir /host/home/core/sosreport/
sh-4.4# chown -R 1000:1000 /host/home/core/sosreport/ && exit
sh-4.4# sudo podman rm ocp4-debug && exit
sh-4.4# exit

1.4. sosreport 압축 파일 복사

OpenShift 클러스터 노드에 존재하는 sosreport 파일을 bastion으로 복사해 온다.

[root@bastion ~]# rsync -avr [email protected]:/home/core/sosreport/ /tmp/sosreport/

2. 네트워크 패킷 수집 (tcpdump)

tcpdump는 네트워크 패킷에 대한 분석을 위해 사용된다.
OpenShift는 support-tools과 toolbox의 Container 이미지를 통해 chroot 환경에서 정보를 수집해야 한다.

본 작업은 네트워크 패킷 수집을 위해 아래와 같은 방법으로 수행 한다.

2.1. Node Debug 수행

debug pod를 사용하여 해당 노드에 접근하여, chroot로 host 서버의 권한을 획득한다.

[root@bastion ~]# oc debug node/worker01.ocp4.ybkim.local -n default
sh-4.4# chroot /host

2.2. Primary Network Interface 확인

네트워크 패킷을 수집하기 위한 Primary Network Interface를 확인 한다.

sh-4.4# route -n | grep '^0.0.0.0' | grep -o '[^ ]*$'
enp1s0

2.3. ToolBox 수행

chroot 환경에서 toolbox container 이미지를 다운로드 받기 위해 환경 변수를 설정 후 실행한다.

sh-4.4# vi /root/.toolboxrc
REGISTRY=registry.ocp4.ybkim.local
IMAGE=rhel8/support-tools:latest
TOOLBOX_NAME=ocp4-debug
sh-4.4# toolbox

2.4. 네트워크 패킷 수집

네트워크 패킷 수집 파일을 /host/home/core/tcpdump 디렉토리에 저장 될 수 있도록 경로를 생성 및 지정하고,
수집이 완료 되었으면, Ctrl+C 단축키를 눌러 패킷 수집을 중단한다.

sh-4.4# mkdir -p /host/home/core/tcpdump
sh-4.4# tcpdump -nn -s 0 -i enp1s0 \
-w /host/home/core/tcpdump/$(cat /etc/hostname)_$(date +%d_%m_%Y-%H_%M_%S-%Z).pcap

2.5. 파일 권한 수정

이후 네트워크 패킷 수집 파일의 uid:gid를 1000(core 사용자 계정)으로 설정 한다.

sh-4.4# chown -R 1000:1000 /host/home/core/tcpdump/ && exit
sh-4.4# sudo podman rm ocp4-debug && exit
sh-4.4# exit

2.6. 네트워크 패킷 파일 복사

OpenShift 클러스터 노드에 존재하는 pcap 파일을 bastion으로 복사해 온다.

[root@bastion ~]# rsync -avr [email protected]:/home/core/tcpdump/ /tmp/tcpdump/

3. OpenShift 저널 로그 수집

3.1. CRI-O 로그 수집

Machine Config Pool의 Node Role 기준으로 Master, Worker 노드에 대한 CRI-O 로그를 수집 한다.

[root@bastion ~]# mkdir -p /tmp/openshift-journal/crio/
[root@bastion ~]# oc adm node-logs --role=master -u crio > /tmp/openshift-journal/master-crio.log
[root@bastion ~]# oc adm node-logs --role=worker -u crio > /tmp/openshift-journal/worker-crio.log

3.2. Kubelet 로그 수집

Machine Config Pool의 Node Role 기준으로 Master, Worker 노드에 대한 Kubelet 로그를 수집 한다.

[root@bastion ~]# mkdir -p /tmp/openshift-journal/kubelet/
[root@bastion ~]# oc adm node-logs --role=master -u kubelet > /tmp/openshift-journal/kubelet/master-kubelet.log
[root@bastion ~]# oc adm node-logs --role=worker -u kubelet > /tmp/openshift-journal/kubelet/worker-kubelet.log

4. OpenShift Logging 정보 수집 (must-gater)

Cluster Logging Operator를 통해 구성한 EFK Stack에 대한 정보를 수집 할 수 있다.

[root@bastion ~]# oc adm must-gather --dest-dir=/tmp/must-gater/logging-must-gater-$(date "+%Y-%m-%d") \
--image=$(oc -n openshift-logging get deployment.apps/cluster-logging-operator \
-o jsonpath='{.spec.template.spec.containers[?(@.name == "cluster-logging-operator")].image}')

5. Service Mesh 정보 수집 (must-gater)

Service Mesh(istio)에 대한 정보를 수집 할 수 있다.

[root@bastion ~]# oc adm must-gather --dest-dir=/tmp/must-gater/istio-must-gater-$(date "+%Y-%m-%d") \
--image=registry.ocp4.ybkim.local/openshift-service-mesh/istio-must-gather-rhel8:latest gather istio-system

6. Ref URL

[1]:OpenShift Docs - Gathering data about your cluster

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment