12장. 기본 오버클라우드 관리 작업 수행

이 장에서는 오버클라우드 라이프사이클 중에 수행해야 할 수 있는 기본 작업에 대해 설명합니다.

12.1. 컨테이너화된 서비스 관리

RHOSP(Red Hat OpenStack Platform)는 언더클라우드 및 오버클라우드 노드의 컨테이너에서 서비스를 실행합니다. 호스트의 개별 서비스를 제어해야 하는 경우도 있습니다. 이 섹션에서는 노드에서 실행하여 컨테이너화된 서비스를 관리할 수 있는 몇 가지 일반적인 명령에 대해 설명합니다.

컨테이너 및 이미지 목록 표시

실행 중인 컨테이너 목록을 표시하려면 다음 명령을 실행합니다.

$ sudo podman ps

중지되었거나 실패한 컨테이너를 명령 출력에 포함하려면 명령에 --all 옵션을 추가합니다.

$ sudo podman ps --all

컨테이너 이미지 목록을 표시하려면 다음 명령을 실행합니다.

$ sudo podman images

컨테이너 속성 확인

컨테이너 또는 컨테이너 이미지의 속성을 보려면 podman inspect 명령을 사용합니다. 예를 들어 keystone 컨테이너를 검사하려면 다음 명령을 실행합니다.

$ sudo podman inspect keystone

Systemd 서비스를 사용하여 컨테이너 관리

이전 버전의 OpenStack Platform은 Docker 및 해당 데몬을 사용하여 컨테이너를 관리했습니다. OpenStack Platform 16에서는 Systemd 서비스 인터페이스가 컨테이너의 라이프사이클을 관리합니다. 각 컨테이너는 서비스이며 Systemd 명령을 실행하여 각 컨테이너에 대해 특정 작업을 수행할 수 있습니다.

참고

Systemd는 다시 시작 정책을 적용하므로 Podman CLI를 사용하여 컨테이너를 중지, 시작 및 다시 시작하지 않는 것이 좋습니다. 대신 Systemd 서비스 명령을 사용합니다.

컨테이너 상태를 확인하려면 systemctl status 명령을 실행합니다.

$ sudo systemctl status tripleo_keystone
● tripleo_keystone.service - keystone container
   Loaded: loaded (/etc/systemd/system/tripleo_keystone.service; enabled; vendor preset: disabled)
   Active: active (running) since Fri 2019-02-15 23:53:18 UTC; 2 days ago
 Main PID: 29012 (podman)
   CGroup: /system.slice/tripleo_keystone.service
           └─29012 /usr/bin/podman start -a keystone

컨테이너를 중지하려면 systemctl stop 명령을 실행합니다.

$ sudo systemctl stop tripleo_keystone

컨테이너를 시작하려면 systemctl start 명령을 실행합니다.

$ sudo systemctl start tripleo_keystone

컨테이너를 다시 시작하려면 systemctl restart 명령을 실행합니다.

$ sudo systemctl restart tripleo_keystone

데몬이 컨테이너 상태를 모니터링하지 않으므로 Systemd는 다음 상황에서 대부분의 컨테이너를 자동으로 다시 시작합니다.

  • podman stop 명령 실행과 같은 명확한 종료 코드 또는 신호
  • 시작 후 podman 컨테이너 충돌과 같은 불명확한 종료 코드
  • 불명확한 신호.
  • 컨테이너를 시작하는 데 1분 30초 이상 걸리는 경우의 시간 초과

Systemd 서비스에 대한 자세한 내용은 systemd.service 문서를 참조하십시오.

참고

컨테이너를 다시 시작한 후에 컨테이너 내의 서비스 설정 파일에 대한 모든 변경 사항을 되돌립니다. 컨테이너가 /var/lib/config-data/puppet-generated/에서 노드의 로컬 파일 시스템에 있는 파일을 기준으로 서비스 설정을 다시 생성하기 때문입니다. 예를 들어 keystone 컨테이너 내의 /etc/keystone/keystone.conf를 편집하고 컨테이너를 다시 시작하는 경우 컨테이너가 노드의 로컬 파일 시스템에서 /var/lib/config-data/puppet-generated/keystone/etc/keystone/keystone.conf를 사용하여 설정을 다시 생성합니다. 이는 다시 시작하기 전에 컨테이너 내에 만들어진 모든 변경 사항을 덮어씁니다.

Systemd 타이머를 사용하여 podman 컨테이너 모니터링

Systemd 타이머 인터페이스는 컨테이너 상태 점검을 관리합니다. 각 컨테이너에는 상태 점검 스크립트를 실행하는 서비스 장치를 실행하는 타이머가 있습니다.

모든 OpenStack Platform 컨테이너 타이머를 나열하려면 systemctl list-timers 명령을 실행하고 tripleo를 포함하는 행으로 출력을 제한합니다.

$ sudo systemctl list-timers | grep tripleo
Mon 2019-02-18 20:18:30 UTC  1s left       Mon 2019-02-18 20:17:26 UTC  1min 2s ago  tripleo_nova_metadata_healthcheck.timer            tripleo_nova_metadata_healthcheck.service
Mon 2019-02-18 20:18:33 UTC  4s left       Mon 2019-02-18 20:17:03 UTC  1min 25s ago tripleo_mistral_engine_healthcheck.timer           tripleo_mistral_engine_healthcheck.service
Mon 2019-02-18 20:18:34 UTC  5s left       Mon 2019-02-18 20:17:23 UTC  1min 5s ago  tripleo_keystone_healthcheck.timer                 tripleo_keystone_healthcheck.service
Mon 2019-02-18 20:18:35 UTC  6s left       Mon 2019-02-18 20:17:13 UTC  1min 15s ago tripleo_memcached_healthcheck.timer                tripleo_memcached_healthcheck.service
(...)

특정 컨테이너 타이머의 상태를 확인하려면 healthcheck 서비스에 대해 systemctl status 명령을 실행합니다.

$ sudo systemctl status tripleo_keystone_healthcheck.service
● tripleo_keystone_healthcheck.service - keystone healthcheck
   Loaded: loaded (/etc/systemd/system/tripleo_keystone_healthcheck.service; disabled; vendor preset: disabled)
   Active: inactive (dead) since Mon 2019-02-18 20:22:46 UTC; 22s ago
  Process: 115581 ExecStart=/usr/bin/podman exec keystone /openstack/healthcheck (code=exited, status=0/SUCCESS)
 Main PID: 115581 (code=exited, status=0/SUCCESS)

Feb 18 20:22:46 undercloud.localdomain systemd[1]: Starting keystone healthcheck...
Feb 18 20:22:46 undercloud.localdomain podman[115581]: {"versions": {"values": [{"status": "stable", "updated": "2019-01-22T00:00:00Z", "..."}]}]}}
Feb 18 20:22:46 undercloud.localdomain podman[115581]: 300 192.168.24.1:35357 0.012 seconds
Feb 18 20:22:46 undercloud.localdomain systemd[1]: Started keystone healthcheck.

컨테이너 타이머를 중지, 시작 또는 다시 시작하거나 상태를 표시하려면 .timer Systemd 리소스에 대해 관련 systemctl 명령을 실행합니다. 예를 들어 tripleo_keystone_healthcheck.timer 리소스의 상태를 확인하려면 다음 명령을 실행합니다.

$ sudo systemctl status tripleo_keystone_healthcheck.timer
● tripleo_keystone_healthcheck.timer - keystone container healthcheck
   Loaded: loaded (/etc/systemd/system/tripleo_keystone_healthcheck.timer; enabled; vendor preset: disabled)
   Active: active (waiting) since Fri 2019-02-15 23:53:18 UTC; 2 days ago

상태 확인 서비스가 비활성화되었지만 해당 서비스의 타이머가 있고 활성화되어 있는 경우 현재 점검이 시간 초과되어 있어도 타이머에 따라 실행됨을 의미합니다. 검사를 수동으로 시작할 수도 있습니다.

참고

podman ps 명령은 컨테이너 상태를 표시하지 않습니다.

컨테이너 로그 확인

OpenStack Platform 16에는 모든 컨테이너의 표준 출력(stdout)과 각 컨테이너의 단일 파일에 통합된 표준 오류(stderr)가 포함된 새로운 로깅 디렉터리 /var/log/containers/stdout이 도입되었습니다.토

Paunch 및 container-puppet.py 스크립트는 출력을 /var/log/containers/stdout 디렉터리로 푸시하도록 podman 컨테이너를 구성하여 container-puppet-* 컨테이너와 같은 삭제된 컨테이너의 로그를 포함하여 모든 로그 컬렉션을 생성합니다.

호스트는 이 디렉터리에 로그 회전을 적용하여 용량이 큰 파일 및 디스크 공간 관련 문제를 방지합니다.

컨테이너를 교체한 경우 podman은 컨테이너 ID 대신 컨테이너 이름을 사용하므로 새 컨테이너가 동일한 로그 파일에 출력됩니다.

podman logs 명령을 사용하여 컨테이너화된 서비스의 로그를 확인할 수도 있습니다. 예를 들어 keystone 컨테이너의 로그를 보려면 다음 명령을 실행합니다.

$ sudo podman logs keystone

컨테이너 액세스

컨테이너화된 서비스 쉘에 들어가려면 podman exec 명령을 사용하여 /bin/bash를 실행합니다. 예를 들어 keystone 컨테이너 쉘에 들어가려면 다음 명령을 실행합니다.

$ sudo podman exec -it keystone /bin/bash

root 사용자로 keystone 컨테이너 쉘에 들어가려면 다음 명령을 실행합니다.

$ sudo podman exec --user 0 -it <NAME OR ID> /bin/bash

컨테이너를 종료하려면 다음 명령을 실행합니다.

# exit