23.9. 컨테이너 설정 문제 해결

OpenStack Platform director는 paunch를 사용하여 컨테이너를 실행하고 podman을 사용하여 컨테이너를 관리하며 puppet을 사용하여 컨테이너 설정을 생성합니다. 다음 절차에서는 오류가 발생했을 때 컨테이너를 진단하는 방법에 대해 설명합니다.

호스트 액세스

  1. stackrc 파일을 소싱합니다.

    $ source ~/stackrc
  2. 컨테이너 장애가 있는 노드의 IP 주소를 가져옵니다.

    (undercloud) $ openstack server list
  3. 노드에 로그인합니다.

    (undercloud) $ ssh heat-admin@192.168.24.60
  4. root 사용자로 변경합니다.

    $ sudo -i

오류가 발생한 컨테이너 식별

  1. 모든 컨테이너를 표시합니다.

    $ podman ps --all

    오류가 발생한 컨테이너를 식별합니다. 오류가 발생한 컨테이너는 일반적으로 0이외의 상태로 종료됩니다.

컨테이너 로그 확인

  1. 각 컨테이너는 메인 프로세스의 표준 출력을 유지합니다. 이 출력을 로그로 사용하여 컨테이너 실행 중에 실제로 수행되는 작업을 확인합니다. 예를 들어 keystone 컨테이너의 로그를 보려면 다음 명령을 사용합니다.

    $ sudo podman logs keystone

    대부분의 경우 이 로그에는 컨테이너 오류 발생 원인에 대한 정보가 포함되어 있습니다.

  2. 호스트는 실패한 서비스에 대한 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

컨테이너 파일 시스템 확인

  1. 오류가 발생한 컨테이너의 파일 시스템을 확인하려면 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 아카이브를 생성하여 추출 및 확인할 수 있습니다.