운영 환경에서 장애 상황이 발생하였을 경우, 어느 부분에서 문제가 발생 되었는지 파악하기 위해,
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