12.2. 컨테이너화된 서비스 관리
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