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

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 core@worker01.ocp4.ybkim.local:/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 core@worker01.ocp4.ybkim.local:/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