23.9. 컨테이너 설정 문제 해결
OpenStack Platform director는 paunch
를 사용하여 컨테이너를 실행하고 podman
을 사용하여 컨테이너를 관리하며 puppet
을 사용하여 컨테이너 설정을 생성합니다. 다음 절차에서는 오류가 발생했을 때 컨테이너를 진단하는 방법에 대해 설명합니다.
호스트 액세스
stackrc
파일을 소싱합니다.$ source ~/stackrc
컨테이너 장애가 있는 노드의 IP 주소를 가져옵니다.
(undercloud) $ openstack server list
노드에 로그인합니다.
(undercloud) $ ssh heat-admin@192.168.24.60
root 사용자로 변경합니다.
$ sudo -i
오류가 발생한 컨테이너 식별
모든 컨테이너를 표시합니다.
$ podman ps --all
오류가 발생한 컨테이너를 식별합니다. 오류가 발생한 컨테이너는 일반적으로 0이외의 상태로 종료됩니다.
컨테이너 로그 확인
각 컨테이너는 메인 프로세스의 표준 출력을 유지합니다. 이 출력을 로그로 사용하여 컨테이너 실행 중에 실제로 수행되는 작업을 확인합니다. 예를 들어
keystone
컨테이너의 로그를 보려면 다음 명령을 사용합니다.$ sudo podman logs keystone
대부분의 경우 이 로그에는 컨테이너 오류 발생 원인에 대한 정보가 포함되어 있습니다.
호스트는 실패한 서비스에 대한
stdout
로그도 유지합니다.stdout
로그는/var/log/containers/stdouts/
에서 찾을 수 있습니다. 예를 들어 오류가 발생한keystone
컨테이너의 로그를 보려면 다음 명령을 실행합니다.$ cat /var/log/containers/stdouts/keystone.log
컨테이너 검사
컨테이너 정보를 확인해야 하는 경우가 있습니다. 예를 들어 다음 명령을 사용하여 keystone
컨테이너 데이터를 확인합니다.
$ sudo podman inspect keystone
이 명령을 실행하면 하위 수준의 구성 데이터를 포함하는 JSON 오브젝트가 반환됩니다. 출력을 jq
명령으로 전달하여 특정 데이터를 구문 분석할 수 있습니다. 예를 들어 keystone
컨테이너에 대한 컨테이너 마운트를 보려면 다음 명령을 실행합니다.
$ sudo podman inspect keystone | jq .[0].Mounts
또한 --format
옵션을 사용하여 단일 행에 대한 데이터를 구문 분석할 수 있으며 이는 컨테이너 데이터 세트에 대해 명령을 실행할 때 유용합니다. 예를 들어 keystone
컨테이너 실행에 사용된 옵션을 재생성하려면 --format
옵션과 함께 다음 inspect
명령을 사용합니다.
$ sudo podman inspect --format='{{range .Config.Env}} -e "{{.}}" {{end}} {{range .Mounts}} -v {{.Source}}:{{.Destination}}:{{ join .Options "," }}{{end}} -ti {{.Config.Image}}' keystone
--format
옵션은 쿼리를 생성할 때 Go 구문을 사용합니다.
podman run
명령과 함께 이러한 옵션을 사용하면 문제 해결 목적으로 컨테이너를 재생성할 수 있습니다.
$ OPTIONS=$( sudo podman inspect --format='{{range .Config.Env}} -e "{{.}}" {{end}} {{range .Mounts}} -v {{.Source}}:{{.Destination}}{{if .Mode}}:{{.Mode}}{{end}}{{end}} -ti {{.Config.Image}}' keystone ) $ sudo podman run --rm $OPTIONS /bin/bash
컨테이너에서 명령 실행
특정 Bash 명령을 통해 컨테이너 내부 정보를 가져와야 하는 경우가 있습니다. 이 경우에는 podman
명령을 사용하여 실행 중인 컨테이너 내에서 명령을 실행합니다. 예를 들어 podman exec
명령을 실행하여 keystone
컨테이너 내에서 명령을 실행합니다.
$ sudo podman exec -ti keystone <COMMAND>
-ti
옵션은 대화식 가상 터미널(pseudoterminal)에서 명령을 실행합니다.
<COMMAND>
를 실행하려는 명령으로 교체합니다. 예를 들어 각 컨테이너에는 서비스 연결을 확인하기 위한 상태 점검 스크립트가 있습니다. 다음 명령을 사용하여 keystone
에 대해 상태 점검 스크립트를 실행할 수 있습니다.
$ sudo podman exec -ti keystone /openstack/healthcheck
컨테이너 쉘에 액세스하려면 컨테이너 내에서 실행하려는 명령으로 /bin/bash
를 사용하여 podman exec
을 실행합니다.
$ sudo podman exec -ti keystone /bin/bash
컨테이너 파일 시스템 확인
오류가 발생한 컨테이너의 파일 시스템을 확인하려면
podman mount
명령을 실행합니다. 예를 들어 오류가 발생한keystone
컨테이너의 파일 시스템을 확인하려면 다음 명령을 실행합니다.$ podman mount keystone
이 명령을 실행하면 파일 시스템 내용을 볼 수 있는 마운트된 위치가 제공됩니다.
/var/lib/containers/storage/overlay/78946a109085aeb8b3a350fc20bd8049a08918d74f573396d7358270e711c610/merged
이 명령은 컨테이너 내에서 Puppet 보고서를 확인하는 데 유용합니다. 이 보고서는 컨테이너 마운트 내의
var/lib/puppet/
디렉터리에서 찾을 수 있습니다.
컨테이너 내보내기
컨테이너가 실패하면 파일의 전체 콘텐츠를 확인해야 합니다. 이 경우 컨테이너의 전체 파일 시스템을 tar
아카이브로 내보낼 수 있습니다. 예를 들어 keystone
컨테이너 파일 시스템을 내보내려면 다음 명령을 실행합니다.
$ sudo podman export keystone -o keystone.tar
이 명령은 keystone.tar
아카이브를 생성하여 추출 및 확인할 수 있습니다.