Red Hat OpenStack Platform의 컨테이너화된 서비스 소개
OpenStack Platform 컨테이너화된 서비스 작업에 대한 기본 가이드
OpenStack Documentation Team
rhos-docs@redhat.com
초록
보다 포괄적 수용을 위한 오픈 소스 용어 교체
Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 용어를 교체하기 위해 최선을 다하고 있습니다. 먼저 마스터(master), 슬레이브(slave), 블랙리스트(blacklist), 화이트리스트(whitelist) 등 네 가지 용어를 교체하고 있습니다. 이러한 변경 작업은 작업 범위가 크므로 향후 여러 릴리스에 걸쳐 점차 구현할 예정입니다. 자세한 내용은 CTO Chris Wright의 메시지를 참조하십시오.
Red Hat 문서에 관한 피드백 제공
문서 개선을 위한 의견을 보내 주십시오. Red Hat이 어떻게 더 나은지 알려주십시오.
Jira에서 문서 피드백 제공
문제 생성 양식을 사용하여 문서에 대한 피드백을 제공합니다. Jira 문제는 Red Hat OpenStack Platform Jira 프로젝트에서 생성되어 피드백의 진행 상황을 추적할 수 있습니다.
- Jira에 로그인했는지 확인합니다. Jira 계정이 없는 경우 피드백을 제출할 계정을 생성합니다.
- 다음 링크를 클릭하여 문제 생성 페이지를 엽니다. https://issues.redhat.com/secure/CreateIssueDetails!init.jspa?pid=12336920&summary=Documentation%20feedback:%20%3CAdd%20summary%20here%3E&issuetype=1&description=<Include+the+documentation+URL,+the%20chapter+or+section+number,+and+a+detailed+description+of+the+issue.>&components=12391143&priority=10300
- 요약 및 설명 필드를 작성합니다. 설명 필드에 문서 URL, 장 또는 섹션 번호, 문제에 대한 자세한 설명을 포함합니다. 양식의 다른 필드를 수정하지 마십시오.
- 생성을 클릭합니다.
1장. 소개
이전 버전의 Red Hat OpenStack Platform은 Systemd로 관리되는 서비스를 사용했습니다. 그러나 최신 버전의 OpenStack Platform에서는 이제 컨테이너를 사용하여 서비스를 실행합니다. 일부 관리자는 컨테이너화된 OpenStack Platform 서비스가 작동하는 방식을 잘 이해하지 못할 수 있으므로 이 가이드에서는 OpenStack Platform 컨테이너 이미지 및 컨테이너화된 서비스를 이해하는 데 도움이 됩니다. 여기에는 다음이 포함됩니다.
- 컨테이너 이미지를 가져오고 수정하는 방법
- 오버클라우드에서 컨테이너화된 서비스를 관리하는 방법
- 컨테이너가 Systemd 서비스와 다른 방법 이해
주요 목표는 컨테이너화된 OpenStack Platform 서비스를 통해 Systemd 기반 환경에서 컨테이너 기반 환경으로 전환할 수 있도록 하는 것입니다.
1.1. 컨테이너화된 서비스 및 Kolla
각 기본 RHOSP(Red Hat OpenStack Platform) 서비스는 컨테이너에서 실행됩니다. 이를 통해 각 서비스를 호스트와 분리된 자체 네임스페이스 내에 유지하는 방법이 제공됩니다. 다음과 같은 효과가 있습니다.
- 배포하는 동안 RHOSP는 Red Hat 고객 포털에서 컨테이너 이미지를 가져와서 실행합니다.
-
podman
명령은 서비스 시작 및 중지와 같은 관리 기능을 수행합니다. - 컨테이너를 업그레이드하려면 새 컨테이너 이미지를 가져오고 기존 컨테이너를 최신 버전으로 교체해야 합니다.
Red Hat OpenStack Platform은 Kolla
툴셋으로 빌드 및 관리되는 컨테이너 세트를 사용합니다.
2장. 컨테이너화된 서비스
director는 핵심 OpenStack Platform 서비스를 오버클라우드에 컨테이너로 설치합니다. 이 섹션에서는 컨테이너화된 서비스의 작동 방식에 대한 몇 가지 배경 정보를 제공합니다.
2.1. 컨테이너화된 서비스 아키텍처
director는 핵심 OpenStack Platform 서비스를 오버클라우드에 컨테이너로 설치합니다. 컨테이너화된 서비스의 템플릿은 /usr/share/openstack-tripleo-heat-templates/deployment/
에 있습니다.
컨테이너화된 서비스를 사용하는 모든 노드에 대해 역할에 OS::TripleO::Services::Podman
서비스를 활성화해야 합니다. 사용자 지정 역할 구성에 roles_data.yaml
파일을 생성할 때 기본 구성 가능 서비스와 함께 OS::TripleO::Services::Podman
서비스를 포함합니다. 예를 들어 IronicConductor
역할은 다음 역할 정의를 사용합니다.
- name: IronicConductor description: | Ironic Conductor node role networks: InternalApi: subnet: internal_api_subnet Storage: subnet: storage_subnet HostnameFormatDefault: '%stackname%-ironic-%index%' ServicesDefault: - OS::TripleO::Services::Aide - OS::TripleO::Services::AuditD - OS::TripleO::Services::BootParams - OS::TripleO::Services::CACerts - OS::TripleO::Services::CertmongerUser - OS::TripleO::Services::Collectd - OS::TripleO::Services::Docker - OS::TripleO::Services::Fluentd - OS::TripleO::Services::IpaClient - OS::TripleO::Services::Ipsec - OS::TripleO::Services::IronicConductor - OS::TripleO::Services::IronicPxe - OS::TripleO::Services::Kernel - OS::TripleO::Services::LoginDefs - OS::TripleO::Services::MetricsQdr - OS::TripleO::Services::MySQLClient - OS::TripleO::Services::ContainersLogrotateCrond - OS::TripleO::Services::Podman - OS::TripleO::Services::Rhsm - OS::TripleO::Services::SensuClient - OS::TripleO::Services::Snmp - OS::TripleO::Services::Timesync - OS::TripleO::Services::Timezone - OS::TripleO::Services::TripleoFirewall - OS::TripleO::Services::TripleoPackages - OS::TripleO::Services::Tuned
2.2. 컨테이너화된 서비스 매개변수
컨테이너화된 각 서비스 템플릿에는 OpenStack Orchestration(heat) 서비스에 전달된 데이터 집합을 정의하는 outputs
섹션이 포함되어 있습니다. 표준 구성 가능 서비스 매개변수 외에도 템플릿에는 컨테이너 구성과 관련된 매개변수 세트가 포함되어 있습니다.
puppet_config
서비스를 구성할 때 Puppet에 전달할 데이터입니다. 초기 오버클라우드 배포 단계에서 director는 실제 컨테이너화된 서비스가 실행되기 전에 서비스를 구성하는 데 사용되는 컨테이너 세트를 생성합니다. 이 매개변수에는 다음 하위 매개변수가 포함됩니다.
-
config_volume
- 구성을 저장하는 마운트된 볼륨입니다. -
puppet_tags
- 구성 중에 Puppet에 전달할 태그입니다. OpenStack에서는 이러한 태그를 사용하여 Puppet 실행을 특정 서비스의 구성 리소스로 제한합니다. 예를 들어 OpenStack ID(keystone) 컨테이너화된 서비스는keystone_config
태그를 사용하여 모두 구성 컨테이너에서 실행되는keystone_config
Puppet 리소스만 필요한지 확인합니다. -
step_config
- Puppet에 전달되는 구성 데이터입니다. 일반적으로 참조된 구성 가능 서비스에서 상속됩니다. -
config_image
- 서비스를 구성하는 데 사용되는 컨테이너 이미지입니다.
-
kolla_config
- 구성 파일 위치, 디렉터리 권한 및 컨테이너에서 실행할 명령을 정의하여 서비스를 시작하는 컨테이너별 데이터 집합입니다.
docker_config
서비스의 구성 컨테이너에서 실행할 작업입니다. 모든 작업은 director가 스테이징된 배포를 수행할 수 있도록 다음 단계로 그룹화됩니다.
- 1단계 - 로드 밸런서 구성
- 2단계 - 핵심 서비스(데이터베이스, Redis)
- 3 단계 - OpenStack Platform 서비스의 초기 구성
- 4 단계 - 일반 OpenStack Platform 서비스 구성
- 5단계 - 서비스 활성화
host_prep_tasks
- 컨테이너화된 서비스를 수용하도록 베어 메탈 노드에 대한 작업 준비.
2.3. 벤더 플러그인 배포
일부 타사 하드웨어를 블록 스토리지 백엔드로 사용하려면 벤더 플러그인을 배포해야 합니다. 다음 예제에서는 Dell EMC 하드웨어를 블록 스토리지 백엔드로 사용하기 위해 벤더 플러그인을 배포하는 방법을 보여줍니다.
프로세스
오버클라우드의 새 컨테이너 이미지 파일을 생성합니다.
$ sudo openstack tripleo container image prepare default \ --local-push-destination \ --output-env-file containers-prepare-parameter-dellemc.yaml
- containers-prepare-parameter-dellemc.yaml 파일을 편집합니다.
기본 Red Hat OpenStack Platform 컨테이너 이미지의 전략에
exclude
매개변수를 추가합니다. 벤더 컨테이너 이미지가 교체할 컨테이너 이미지를 제외하려면 이 매개변수를 사용합니다. 이 예제에서 컨테이너 이미지는cinder-volume
이미지입니다.parameter_defaults: ContainerImagePrepare: - push_destination: true excludes: - cinder-volume set: namespace: registry.redhat.io/rhosp-rhel9 name_prefix: openstack- name_suffix: '' tag: 17.1 ... tag_from_label: "{version}-{release}"
공급자 플러그인의 대체 컨테이너 이미지가 포함된
ContainerImagePrepare
매개변수에 새 전략을 추가합니다.parameter_defaults: ContainerImagePrepare: ... - push_destination: true includes: - cinder-volume set: namespace: registry.connect.redhat.com/dellemc name_prefix: openstack- name_suffix: -dellemc-rhosp16 tag: 16.2-2 ...
registry.connect.redhat.com 레지스트리의 인증 세부 정보를
ContainerImageRegistryCredentials
매개변수에 추가합니다.parameter_defaults: ContainerImageRegistryCredentials: registry.redhat.io: [service account username]: [service account password] registry.connect.redhat.com: [service account username]: [service account password]
-
containers-prepare-parameter-dellemc.yaml
파일을 저장합니다. openstack overcloud deploy
와 같은 모든 배포 명령을 사용하여containers-prepare-parameter-dellemc.yaml
파일을 포함합니다.$ openstack overcloud deploy --templates ... -e containers-prepare-parameter-dellemc.yaml ...
director가 오버클라우드를 배포할 때 오버클라우드는 표준 컨테이너 이미지 대신 벤더 컨테이너 이미지를 사용합니다.
- 중요
-
containers-prepare-parameter-dellemc.yaml
파일은 오버클라우드 배포의 표준containers-prepare-parameter.yaml
파일을 대체합니다. 오버클라우드 배포에 표준containers-prepare-parameter.yaml
파일을 포함하지 마십시오. 언더클라우드 설치 및 업데이트에 대한 표준containers-prepare-parameter.yaml
파일을 유지합니다.
3장. 컨테이너 이미지 가져오기 및 수정
컨테이너화된 오버클라우드를 사용하려면 필요한 컨테이너 이미지가 있는 레지스트리에 액세스해야 합니다. 이 장에서는 Red Hat OpenStack Platform의 컨테이너 이미지를 사용하도록 레지스트리와 언더클라우드 및 오버클라우드 구성을 준비하는 방법에 대해 설명합니다.
3.1. 컨테이너 이미지 준비
오버클라우드 설치에는 컨테이너 이미지를 가져올 위치와 저장 방법을 결정하는 환경 파일이 필요합니다. 컨테이너 이미지를 준비하는 데 사용할 수 있는 이 환경 파일을 생성하고 사용자 지정하십시오.
오버클라우드의 특정 컨테이너 이미지 버전을 구성해야 하는 경우 이미지를 특정 버전에 고정해야 합니다. 자세한 내용은 오버클라우드의 컨테이너 이미지 고정을 참조하십시오.
프로세스
-
언더클라우드 호스트에
stack
사용자로 로그인합니다. 기본 컨테이너 이미지 준비 파일을 생성합니다.
$ openstack tripleo container image prepare default \ --local-push-destination \ --output-env-file containers-prepare-parameter.yaml
이 명령은 다음과 같은 추가 옵션을 사용합니다.
-
--local-push-destination
은 언더클라우드의 레지스트리를 컨테이너 이미지의 위치로 설정합니다. 즉 director가 Red Hat Container Catalog에서 필요한 이미지를 가져와서 언더클라우드의 레지스트리로 푸시합니다. director는 이 레지스트리를 컨테이너 이미지 소스로 사용합니다. Red Hat Container Catalog에서 직접 가져오려면 이 옵션을 생략합니다. --output-env-file
은 환경 파일 이름입니다. 이 파일 내용에는 컨테이너 이미지를 준비하는 데 필요한 매개변수가 포함되어 있습니다. 이 경우 파일 이름은containers-prepare-parameter.yaml
입니다.참고동일한
containers-prepare-parameter.yaml
파일을 사용하여 언더클라우드와 오버클라우드의 컨테이너 이미지 소스를 모두 정의할 수 있습니다.
-
-
containers-prepare-parameter.yaml
을 요구 사항에 맞게 수정합니다. 컨테이너 이미지 매개변수에 대한 자세한 내용은 컨테이너 이미지 준비 매개변수를 참조하십시오.
3.2. 컨테이너 이미지 준비 매개변수
컨테이너를 준비하는 데 필요한 기본 파일(containers-prepare-parameter.yaml
)에는 ContainerImagePrepare
heat 매개변수가 포함되어 있습니다. 이 매개변수는 이미지 세트를 준비하기 위한 다양한 설정을 정의합니다.
parameter_defaults: ContainerImagePrepare: - (strategy one) - (strategy two) - (strategy three) ...
각각의 설정에서 하위 매개변수 세트를 통해 사용할 이미지와 해당 이미지의 사용 방법을 정의할 수 있습니다. 다음 표에는 각 ContainerImagePrepare
전략에 사용할 수 있는 하위 매개변수에 대한 정보가 나와 있습니다.
매개변수 | 설명 |
---|---|
| 전략에서 이미지 이름을 제외하는 정규식 목록입니다. |
|
전략에 포함할 정규식 목록입니다. 기존 이미지와 일치하는 이미지 이름이 하나 이상 있어야 합니다. |
|
대상 이미지 태그에 추가할 문자열입니다. 예를 들어 17.1.0-5.161 태그가 있는 이미지를 가져와서 |
| 수정할 이미지를 필터링하는 이미지 레이블로 이루어진 사전입니다. 이미지가 정의된 레이블과 일치하면 director에서 그 이미지를 수정 프로세스에 포함합니다. |
| 이미지를 대상 레지스트리로 푸시하기 전 업로드 중에 실행할 ansible 역할 이름의 문자열입니다. |
|
|
| 업로드 프로세스 중 이미지를 푸시할 레지스트리의 네임스페이스를 정의합니다.
Red Hat Container Catalog에서 직접 이미지를 가져오는 동안 프로덕션 환경에서 이 매개변수를
|
| 원본 컨테이너 이미지를 가져온 소스 레지스트리입니다. |
|
초기 이미지를 가져올 위치를 정의하는 |
|
지정된 컨테이너 이미지 메타데이터 레이블의 값을 사용하여 모든 이미지에 대한 태그를 생성하고 해당 태그가 지정된 이미지를 가져옵니다. 예를 들어 |
이미지를 언더클라우드로 푸시하는 경우 push_destination: UNDERCLOUD_IP:PORT
대신 push_destination: true
를 사용합니다. push_destination: true
방식은 IPv4 및 IPv6 주소 모두에서 일관성 수준을 제공합니다.
set
매개변수에 여러 key: value
정의를 사용할 수 있습니다.
키 | 설명 |
---|---|
| Ceph Storage 컨테이너 이미지의 이름입니다. |
| Ceph Storage 컨테이너 이미지의 네임스페이스입니다. |
| Ceph Storage 컨테이너 이미지의 태그입니다. |
| Ceph Storage Alert Manager 컨테이너 이미지의 이름, 네임스페이스 및 태그입니다. |
| Ceph Storage Grafana 컨테이너 이미지의 이름, 네임스페이스 및 태그입니다. |
| Ceph Storage Node Exporter 컨테이너 이미지의 이름, 네임스페이스 및 태그입니다. |
| Ceph Storage Prometheus 컨테이너 이미지의 이름, 네임스페이스 및 태그입니다. |
| 각 OpenStack 서비스 이미지의 접두사입니다. |
| 각 OpenStack 서비스 이미지의 접미사입니다. |
| 각 OpenStack 서비스 이미지의 네임스페이스입니다. |
|
사용할 OpenStack Networking (Neutron) 컨테이너를 결정하는 데 사용할 드라이버입니다. null 값을 사용하여 표준 |
|
소스의 모든 이미지에 대한 특정 태그를 설정합니다. 정의되지 않은 경우 director는 Red Hat OpenStack Platform 버전 번호를 기본값으로 사용합니다. 이 매개변수가 |
컨테이너 이미지는 Red Hat OpenStack Platform 버전을 기반으로 멀티 스트림 태그를 사용합니다. 즉, 더 이상 latest
태그가 없음을 의미합니다.
3.3. 컨테이너 이미지 태그 지침
Red Hat Container Registry는 특정 버전 형식을 사용하여 모든 Red Hat OpenStack Platform 컨테이너 이미지에 태그를 지정합니다. 이 형식은 version-release
인 각 컨테이너의 레이블 메타데이터를 따릅니다.
- 버전
- Red Hat OpenStack Platform의 주요 및 마이너 버전에 해당합니다. 이러한 버전은 하나 이상의 릴리스를 포함하는 스트림으로 작동합니다.
- 릴리스
- 버전 스트림 내 특정 컨테이너 이미지 버전의 릴리스에 해당합니다.
예를 들어 최신 버전의 Red Hat OpenStack Platform이 17.1.0이고 컨테이너 이미지의 릴리스가 5.161
인 경우 컨테이너 이미지의 결과 태그는 17.1.0-5.161입니다.
Red Hat Container Registry에서는 해당 컨테이너 이미지 버전의 최신 릴리스에 연결되는 메이저 및 마이너 version
버전 태그 세트도 사용합니다. 예를 들어 17.1 및 17.1.0은 모두 17.1.0 컨테이너 스트림의 최신 릴리스에
연결됩니다. 17.1의 새로운 마이너 릴리스가 발생하면 17.1 태그가 새로운 마이너 릴리스
스트림의 최신 릴리스와 관련이 있으며 17.1.0 태그는 17.1.0 스트림 내의 최신 릴리스에
계속 연결됩니다.
ContainerImagePrepare
매개변수에는 다운로드할 컨테이너 이미지를 결정하는 데 사용할 두 개의 하위 매개변수가 포함되어 있습니다. 이러한 하위 매개변수는 set
사전 내의 tag
매개변수와 tag_from_label
매개변수입니다. 다음 지침을 사용하여 tag
또는 tag_from_label
을 사용할지 여부를 결정합니다.
tag
의 기본값은 OpenStack Platform 버전의 주요 버전입니다. 이 버전의 경우 17.1입니다. 이는 항상 최신 마이너 버전 및 릴리스에 해당합니다.parameter_defaults: ContainerImagePrepare: - set: ... tag: 17.1 ...
OpenStack Platform 컨테이너 이미지의 특정 마이너 버전으로 변경하려면 태그를 마이너 버전으로 설정합니다. 예를 들어 17.1.2로 변경하려면
tag
를 17.1.2로 설정합니다.parameter_defaults: ContainerImagePrepare: - set: ... tag: 17.1.2 ...
-
tag
를 설정하면 director는 설치 및 업데이트 중에tag
에 설정된 버전의 최신 컨테이너 이미지release
를 항상 다운로드합니다. tag
를 설정하지 않으면 director는 최신 주요 버전과 함께tag_from_label
값을 사용합니다.parameter_defaults: ContainerImagePrepare: - set: ... # tag: 17.1 ... tag_from_label: '{version}-{release}'
tag_from_label
매개변수는 Red Hat Container Registry에서 검사하는 최신 컨테이너 이미지 릴리스의 레이블 메타데이터에서 태그를 생성합니다. 예를 들어 특정 컨테이너의 레이블에서 다음version
및release
메타데이터를 사용할 수 있습니다."Labels": { "release": "5.161", "version": "17.1.0", ... }
-
tag_from_label
의 기본값은{version}-{release}
로, 각 컨테이너 이미지의 버전 및 릴리스 메타데이터 레이블에 해당합니다. 예를 들어 컨테이너 이미지에버전에
대해 17.1.0이 설정되어 있고릴리스
용으로 5.161이 설정된 경우 컨테이너 이미지의 결과 태그는 17.1.0-5.161입니다. -
tag
매개변수는 항상tag_from_label
매개변수보다 우선합니다.tag_from_label
을 사용하려면 컨테이너 준비 구성에서tag
매개변수를 생략합니다. -
tag
와tag_from_label
의 주요 차이점은 director가tag
를 사용하여 주요 또는 마이너 버전 태그를 기반으로만 이미지를 가져온다는 것입니다. 이 태그는 버전 스트림 내의 최신 이미지 릴리스에 대한 Red Hat Container Registry 링크인 반면 director는tag_from_label
을 사용하여 director가 태그를 생성하고 해당 이미지를 가져올 수 있도록 각 컨테이너 이미지의 메타데이터 검사를 수행합니다.
3.4. 개인 레지스트리에서 컨테이너 이미지 가져오기
registry.redhat.io
레지스트리에는 이미지에 액세스하여 가져오기 위한 인증이 필요합니다. registry.redhat.io
및 기타 개인 레지스트리로 인증하려면 containers-prepare-parameter.yaml
파일에 ContainerImageRegistryCredentials
및 ContainerImageRegistryLogin
매개변수를 포함합니다.
ContainerImageRegistryCredentials
일부 컨테이너 이미지 레지스트리는 이미지에 액세스하기 위해 인증이 필요합니다. 이 경우 container-prepare-parameter.yaml
환경 파일에서 ContainerImageRegistryCredentials
매개변수를 사용합니다. ContainerImageRegistryCredentials
매개변수는 개인 레지스트리 URL에 따라 여러 키를 사용합니다. 각 개인 레지스트리 URL은 고유한 키와 값 쌍을 사용하여 사용자 이름(키)과 암호(값)를 정의합니다. 이런 방법으로 여러 개인 레지스트리의 인증 정보를 지정할 수 있습니다.
parameter_defaults: ContainerImagePrepare: - push_destination: true set: namespace: registry.redhat.io/... ... ContainerImageRegistryCredentials: registry.redhat.io: my_username: my_password
예제에서 my_username
및 my_password
를 사용자 인증 정보로 교체합니다. 개별 사용자 인증 정보를 사용하는 대신, 레지스트리 서비스 계정을 생성하고 해당 인증 정보를 사용하여 registry.redhat.io
콘텐츠에 액세스하는 것이 좋습니다.
여러 레지스트리에 대한 인증 세부 정보를 지정하려면 ContainerImageRegistryCredentials
의 각 레지스트리에 대해 여러 개의 키 쌍 값을 설정합니다.
parameter_defaults: ContainerImagePrepare: - push_destination: true set: namespace: registry.redhat.io/... ... - push_destination: true set: namespace: registry.internalsite.com/... ... ... ContainerImageRegistryCredentials: registry.redhat.io: myuser: 'p@55w0rd!' registry.internalsite.com: myuser2: '0th3rp@55w0rd!' '192.0.2.1:8787': myuser3: '@n0th3rp@55w0rd!'
기본 ContainerImagePrepare
매개변수는 인증이 필요한 registry.redhat.io
에서 컨테이너 이미지를 가져옵니다.
자세한 내용은 Red Hat Container Registry Authentication 을 참조하십시오.
ContainerImageRegistryLogin
ContainerImageRegistryLogin
매개변수는 오버클라우드 노드 시스템이 컨테이너 이미지를 가져오기 위해 원격 레지스트리에 로그인해야 하는지 여부를 제어하는 데 사용합니다. 이러한 상황은 오버클라우드 노드에서 이미지를 호스팅하는 데 언더클라우드를 사용하는 대신 이미지를 직접 가져오도록 할 때 발생합니다.
지정된 설정에 대해 push_destination
이 구성되지 않은 경우 ContainerImageRegistryLogin
을 true
로 설정해야 합니다.
parameter_defaults: ContainerImagePrepare: - push_destination: false set: namespace: registry.redhat.io/... ... ... ContainerImageRegistryCredentials: registry.redhat.io: myuser: 'p@55w0rd!' ContainerImageRegistryLogin: true
하지만 오버클라우드 노드에서 ContainerImageRegistryCredentials
에 정의된 레지스트리 호스트에 네트워크로 연결할 수 없고 ContainerImageRegistryLogin
을 true
로 설정하는 경우, 로그인할 때 배포에 실패할 수 있습니다. 오버클라우드 노드에서 ContainerImageRegistryCredentials
에 정의된 레지스트리 호스트에 네트워크로 연결할 수 없고 push_destination
을 true
로 설정하고 ContainerImageRegistryLogin
을 false
로 설정하여 오버클라우드 노드가 언더클라우드에서 이미지를 가져오도록 합니다.
parameter_defaults: ContainerImagePrepare: - push_destination: true set: namespace: registry.redhat.io/... ... ... ContainerImageRegistryCredentials: registry.redhat.io: myuser: 'p@55w0rd!' ContainerImageRegistryLogin: false
3.5. 이미지 준비 항목 계층화
ContainerImagePrepare
매개변수의 값은 YAML 목록입니다. 즉, 여러 항목을 지정할 수 있습니다.
다음 예제에서는 두 개의 항목을 보여줍니다. 여기서 director는 17.1-hotfix
로 태그된 버전을 사용하는 nova-api
이미지를 제외하고 모든 이미지의 최신 버전을 사용합니다.
parameter_defaults: ContainerImagePrepare: - tag_from_label: "{version}-{release}" push_destination: true excludes: - nova-api set: namespace: registry.redhat.io/rhosp-rhel9 name_prefix: openstack- name_suffix: '' tag:17.1 - push_destination: true includes: - nova-api set: namespace: registry.redhat.io/rhosp-rhel9 tag: 17.1-hotfix
includes
및 excludes
매개 변수는 정규식을 사용하여 각 항목에 대한 이미지 필터링을 제어합니다. includes
설정과 일치하는 이미지가 excludes
와 일치하는 이미지보다 우선합니다. 일치하는 이미지로 간주되려면 이미지 이름이 includes
또는 excludes
정규식 값과 일치해야 합니다.
3.6. 준비 과정에서 이미지 수정
이미지 준비 과정에서 이미지를 수정한 다음, 수정된 이미지로 오버클라우드를 즉시 배포할 수 있습니다.
RHOSP(Red Hat OpenStack Platform) director는 Ceph 컨테이너가 아닌 RHOSP 컨테이너를 준비하는 동안 이미지 수정을 지원합니다.
이미지 수정 시나리오는 다음과 같습니다.
- 지속적 통합 파이프라인에서 배포 전 테스트 중인 변경 사항으로 이미지가 수정되는 경우입니다.
- 개발 워크플로우 중에 테스트 및 개발을 위해 로컬 변경 사항을 배포해야 하는 경우입니다.
- 변경 사항을 배포해야 하지만 이미지 빌드 파이프라인을 통해 사용할 수 없는 경우입니다. 예를 들어 독점 애드온 또는 긴급 수정 사항을 추가할 수 있습니다.
준비 과정에서 이미지를 수정하려면, 수정할 각 이미지에 대해 Ansible 역할을 호출합니다. 이 역할은 소스 이미지를 가져와서 요청된 변경을 수행한 다음 그 결과를 태그합니다. prepare 명령으로 이미지를 대상 레지스트리로 푸시하고 수정된 이미지를 참조하도록 heat 매개변수를 설정할 수 있습니다.
Ansible 역할 tripleo-modify-image
는 요청된 역할 인터페이스를 준수하고 수정 사용 사례에 필요한 작업을 수행합니다. ContainerImagePrepare
매개변수의 수정 관련 키를 사용하여 수정을 제어합니다.
-
modify_role
은 수정할 각 이미지에 대해 호출할 Ansible 역할을 지정합니다. -
modify_append_tag
는 소스 이미지 태그의 끝에 문자열을 추가합니다. 이렇게 하면 결과 이미지가 수정되었음을 알 수 있습니다.push_destination
레지스트리에 수정된 이미지가 이미 포함되어 있을 경우 이 매개변수를 사용하여 수정을 생략할 수 있습니다. 이미지를 수정할 때마다modify_append_tag
를 변경하십시오. -
modify_vars
는 역할에 전달할 Ansible 변수로 이루어진 사전입니다.
tripleo-modify-image
역할에서 처리할 사용 케이스를 선택하려면 tasks_from
변수를 해당 역할에 필요한 파일로 설정합니다.
이미지를 수정하려면 ContainerImagePrepare
항목을 개발하고 테스트하는 동안 추가 옵션 없이 image prepare 명령을 실행하여 이미지가 예상대로 수정되는지 확인합니다.
sudo openstack tripleo container image prepare \ -e ~/containers-prepare-parameter.yaml
openstack tripleo container image prepare
명령을 사용하려면 언더클라우드에 실행 중인 image-serve
레지스트리가 포함되어야 합니다. 따라서 image-serve
레지스트리가 설치되지 않으므로 새 언더클라우드를 설치하기 전에 이 명령을 실행할 수 없습니다. 언더클라우드를 성공적으로 설치한 후 이 명령을 실행할 수 있습니다.
3.7. 컨테이너 이미지의 기존 패키지 업데이트
RHOSP(Red Hat OpenStack Platform) 컨테이너의 컨테이너 이미지에서 기존 패키지를 업데이트할 수 있습니다.
RHOSP(Red Hat OpenStack Platform) director는 Ceph 컨테이너가 아닌 RHOSP 컨테이너의 컨테이너 이미지의 기존 패키지 업데이트를 지원합니다.
절차
- 컨테이너 이미지에 설치할 RPM 패키지를 다운로드합니다.
containers-prepare-parameter.yaml
파일을 편집하여 컨테이너 이미지의 모든 패키지를 업데이트합니다.ContainerImagePrepare: - push_destination: true ... modify_role: tripleo-modify-image modify_append_tag: "-updated" modify_vars: tasks_from: yum_update.yml compare_host_packages: true yum_repos_dir_path: /etc/yum.repos.d ...
-
containers-prepare-parameter.yaml
파일을 저장합니다. -
openstack overcloud deploy
명령을 실행할 때containers-prepare-parameter.yaml
파일을 포함합니다.
3.8. 컨테이너 이미지에 추가 RPM 파일 설치
컨테이너 이미지에 RPM 파일 디렉터리를 설치할 수 있습니다. 이 기능은 핫픽스, 로컬 패키지 빌드 또는 패키지 리포지토리를 통해 사용할 수 없는 패키지를 설치하는 데 유용합니다.
RHOSP(Red Hat OpenStack Platform) director는 Ceph 컨테이너가 아닌 RHOSP 컨테이너의 컨테이너 이미지에 추가 RPM 파일을 설치할 수 있도록 지원합니다.
기존 배포에서 컨테이너 이미지를 수정하는 경우 마이너 업데이트를 수행하여 오버클라우드에 변경 사항을 적용해야 합니다. 자세한 내용은 Red Hat OpenStack Platform의 마이너 업데이트 수행을 참조하십시오.
절차
다음 예제
ContainerImagePrepare
항목은nova-compute
이미지에만 일부 핫픽스 패키지를 설치합니다.ContainerImagePrepare: - push_destination: true ... includes: - nova-compute modify_role: tripleo-modify-image modify_append_tag: "-hotfix" modify_vars: tasks_from: rpm_install.yml rpms_path: /home/stack/nova-hotfix-pkgs ...
3.9. 사용자 지정 Dockerfile을 사용하여 컨테이너 이미지 수정
Dockerfile이 포함된 디렉터리를 지정하여 필요한 변경을 수행할 수 있습니다. tripleo-modify-image
역할을 호출하면 FROM
지시문을 변경하고 LABEL
지시문을 추가하는 Dockerfile.modified
파일이 생성됩니다.
RHOSP(Red Hat OpenStack Platform) director는 Ceph 컨테이너가 아닌 RHOSP 컨테이너의 사용자 지정 Dockerfile을 사용하여 컨테이너 이미지 수정을 지원합니다.
절차
다음 예제에서는
nova-compute
이미지에 대해 사용자 지정 Dockerfile을 실행합니다.ContainerImagePrepare: - push_destination: true ... includes: - nova-compute modify_role: tripleo-modify-image modify_append_tag: "-hotfix" modify_vars: tasks_from: modify_image.yml modify_dir_path: /home/stack/nova-custom ...
/home/stack/nova-custom/Dockerfile
파일의 예는 다음과 같습니다.USER
root 지시문을 실행한 후에는 원본 이미지의 기본 사용자로 다시 전환해야 합니다.FROM registry.redhat.io/rhosp-rhel9/openstack-nova-compute:latest USER "root" COPY customize.sh /tmp/ RUN /tmp/customize.sh USER "nova"
3.10. 컨테이너 이미지용 Satellite 서버 준비
Red Hat Satellite 6는 레지스트리 동기화 기능을 제공합니다. 이를 통해 여러 이미지를 Satellite 서버로 가져와 애플리케이션 라이프사이클의 일부로 관리할 수 있습니다. Satellite는 다른 컨테이너 활성화 시스템이 사용할 레지스트리 역할도 합니다. 컨테이너 이미지 관리 방법에 관한 자세한 내용은 Red Hat Satellite 6 Content Management Guide의 "Managing Container Images"를 참조하십시오.
다음 절차의 예제에서는 Red Hat Satellite 6용 hammer
명령행 툴과 ACME
라는 조직을 사용합니다. 이 조직을 실제로 사용하는 Satellite 6 조직으로 대체하십시오.
다음 절차에서는 registry.redhat.io
에서 컨테이너 이미지에 액세스하기 위해 인증 정보가 필요합니다. 개별 사용자 인증 정보를 사용하는 대신, 레지스트리 서비스 계정을 생성하고 해당 인증 정보를 사용하여 registry.redhat.io
콘텐츠에 액세스하는 것이 좋습니다. 자세한 내용은 "Red Hat Container Registry Authentication"을 참조하십시오.
절차
모든 컨테이너 이미지 목록을 생성합니다.
$ sudo podman search --limit 1000 "registry.redhat.io/rhosp-rhel9" --format="{{ .Name }}" | sort > satellite_images $ sudo podman search --limit 1000 "registry.redhat.io/rhceph" | grep <ceph_dashboard_image_file> $ sudo podman search --limit 1000 "registry.redhat.io/rhceph" | grep <ceph_image_file> $ sudo podman search --limit 1000 "registry.redhat.io/openshift4" | grep ose-prometheus
&
lt;ceph_dashboard_image_file
>을 배포에서 사용하는 Red Hat Ceph Storage 버전의 이미지 파일로 바꿉니다.-
Red Hat Ceph Storage 5:
rhceph-5-dashboard-rhel8
-
Red Hat Ceph Storage 6:
rhceph-6-dashboard-rhel9
-
Red Hat Ceph Storage 5:
&
lt;ceph_image_file
>을 배포에서 사용하는 Red Hat Ceph Storage 버전의 이미지 파일로 바꿉니다.-
Red Hat Ceph Storage 5:
rhceph-5-rhel8
Red Hat Ceph Storage 6:
rhceph-6-rhel9
참고openstack-ovn-bgp-agent
이미지는registry.redhat.io/rhosp-rhel9/openstack-ovn-bgp-agent-rhel9:17.1
에 있습니다.
-
Red Hat Ceph Storage 5:
Ceph를 설치하고 Ceph 대시보드를 활성화하려면 다음 ose-prometheus 컨테이너가 필요합니다.
registry.redhat.io/openshift4/ose-prometheus-node-exporter:v4.6 registry.redhat.io/openshift4/ose-prometheus:v4.6 registry.redhat.io/openshift4/ose-prometheus-alertmanager:v4.6
-
satellite_images_names
파일을 Satellite 6hammer
툴이 포함된 시스템으로 복사합니다. 또는 Hammer CLI 가이드의 지침에 따라hammer
툴을 언더클라우드에 설치합니다. 다음
hammer
명령을 실행하여 Satellite 조직에 새 제품(OSP Containers
)을 생성합니다.$ hammer product create \ --organization "ACME" \ --name "OSP Containers"
이 사용자 지정 제품에 이미지를 저장합니다.
satellite_images
파일에서 오버클라우드 컨테이너 이미지를 추가합니다.$ while read IMAGE; do \ IMAGE_NAME=$(echo $IMAGE | cut -d"/" -f3 | sed "s/openstack-//g") ; \ IMAGE_NOURL=$(echo $IMAGE | sed "s/registry.redhat.io\///g") ; \ hammer repository create \ --organization "ACME" \ --product "OSP Containers" \ --content-type docker \ --url https://registry.redhat.io \ --docker-upstream-name $IMAGE_NOURL \ --upstream-username USERNAME \ --upstream-password PASSWORD \ --name $IMAGE_NAME ; done < satellite_images
Ceph Storage 컨테이너 이미지를 추가합니다.
$ hammer repository create \ --organization "ACME" \ --product "OSP Containers" \ --content-type docker \ --url https://registry.redhat.io \ --docker-upstream-name rhceph/<ceph_image_name> \ --upstream-username USERNAME \ --upstream-password PASSWORD \ --name <ceph_image_name>
&
lt;ceph_image_file
>을 배포에서 사용하는 Red Hat Ceph Storage 버전의 이미지 파일로 바꿉니다.-
Red Hat Ceph Storage 5:
rhceph-5-rhel8
Red Hat Ceph Storage 6:
rhceph-6-rhel9
참고Ceph 대시보드를 설치하려면
hammer repository create
명령에--name <ceph_dashboard_image_name
>을 포함합니다.$ hammer repository create \ --organization "ACME" \ --product "OSP Containers" \ --content-type docker \ --url https://registry.redhat.io \ --docker-upstream-name rhceph/<ceph_dashboard_image_name> \ --upstream-username USERNAME \ --upstream-password PASSWORD \ --name <ceph_dashboard_image_name>
&
lt;ceph_dashboard_image_file
>을 배포에서 사용하는 Red Hat Ceph Storage 버전의 이미지 파일로 바꿉니다.-
Red Hat Ceph Storage 5:
rhceph-5-dashboard-rhel8
-
Red Hat Ceph Storage 6:
rhceph-6-dashboard-rhel9
-
Red Hat Ceph Storage 5:
-
Red Hat Ceph Storage 5:
컨테이너 이미지를 동기화합니다.
$ hammer product synchronize \ --organization "ACME" \ --name "OSP Containers"
Satellite 서버가 동기화를 완료할 때까지 기다립니다.
참고설정에 따라
hammer
에서 Satellite 서버 사용자 이름과 암호가 필요할 수 있습니다.hammer
를 구성한 후 구성 파일을 사용하여 자동으로 로그인할 수 있습니다. 자세한 내용은 Hammer CLI Guide의 "Authentication" 섹션을 참조하십시오.-
Satellite 6 서버에서 콘텐츠 뷰를 사용하는 경우, 새로운 콘텐츠 뷰 버전을 생성하여 이미지를 통합하고 애플리케이션 라이프사이클의 환경에 따라 승격합니다. 이 과정은 대체로 애플리케이션 라이프사이클을 구조화한 방법에 따라 달라집니다. 예를 들어 라이프사이클에
production
이라는 환경이 있고 해당 환경에서 컨테이너 이미지를 사용할 수 있도록 하려면 컨테이너 이미지가 포함된 콘텐츠 뷰를 생성하고 해당 콘텐츠 뷰를production
환경으로 승격합니다. 자세한 내용은 Managing Content Views를 참조하십시오. base
이미지에 사용 가능한 태그를 확인합니다.$ hammer docker tag list --repository "base" \ --organization "ACME" \ --lifecycle-environment "production" \ --product "OSP Containers"
이 명령을 수행하면 OpenStack Platform 컨테이너 이미지의 태그가 특정 환경의 콘텐츠 뷰에 표시됩니다.
언더클라우드로 돌아가서 Satellite 서버를 소스로 사용하여 이미지를 준비하는 기본 환경 파일을 생성합니다. 다음 예제 명령을 실행하여 환경 파일을 생성합니다.
$ sudo openstack tripleo container image prepare default \ --output-env-file containers-prepare-parameter.yaml
-
--output-env-file
은 환경 파일 이름입니다. 이 파일의 콘텐츠에는 언더클라우드의 컨테이너 이미지를 준비하는 데 필요한 매개변수가 포함되어 있습니다. 이 경우 파일 이름은containers-prepare-parameter.yaml
입니다.
-
containers-prepare-parameter.yaml
파일을 편집하여 다음 매개변수를 수정합니다.-
push_destination
- 선택한 컨테이너 이미지 관리 전략에 따라 이 값을true
또는false
로 설정합니다. 이 매개변수를false
로 설정하면 오버클라우드 노드는 Satellite에서 직접 이미지를 가져옵니다. 이 매개변수를true
로 설정하면 director가 Satellite에서 언더클라우드 레지스트리로 이미지를 가져오고 오버클라우드는 언더클라우드 레지스트리에서 이미지를 가져옵니다. -
namespace
- Satellite 서버에 있는 레지스트리의 URL입니다. name_prefix
- 접두사는 Satellite 6 규칙을 기반으로 하며, 콘텐츠 뷰 사용 여부에 따라 달라집니다.-
콘텐츠 뷰를 사용하는 경우 구조는
[org]-[environment]-[content view]-[product]-
입니다. 예:acme-production-myosp17-osp_containers-
. -
콘텐츠 뷰를 사용하지 않는 경우 구조는
[org]-[product]-
입니다. 예:acme-osp_containers-
.
-
콘텐츠 뷰를 사용하는 경우 구조는
-
ceph_namespace
,ceph_image
,ceph_tag
- Ceph Storage를 사용하는 경우 추가 매개변수를 포함하여 Ceph Storage 컨테이너 이미지 위치를 정의합니다. 이제ceph_image
에는 Satellite별 접두사가 포함됩니다. 이 접두사는name_prefix
옵션과 동일한 값입니다.
-
다음 예제 환경 파일에는 Satellite별 매개변수가 포함되어 있습니다.
parameter_defaults: ContainerImagePrepare: - push_destination: false set: ceph_image: acme-production-myosp17_1-osp_containers-rhceph-6 ceph_namespace: satellite.example.com:443 ceph_tag: latest name_prefix: acme-production-myosp17_1-osp_containers- name_suffix: '' namespace: satellite.example.com:5000 neutron_driver: null tag: '17.1' ...
Red Hat Satellite Server에 저장된 특정 컨테이너 이미지 버전을 사용하려면 태그
키-값 쌍을 set
사전의 특정 버전으로 설정합니다. 예를 들어 17.1.2 이미지 스트림을 사용하려면 set
사전에 tag: 17.1.2
를 설정합니다.
undercloud.conf
구성 파일에 containers-prepare-parameter.yaml
환경 파일을 정의해야 합니다. 그렇지 않으면 언더클라우드에서 기본값을 사용합니다.
container_images_file = /home/stack/containers-prepare-parameter.yaml
4장. 컨테이너가 포함된 언더클라우드 설치
이 장에서는 컨테이너 기반 언더클라우드를 생성하고 계속 업데이트하는 방법에 대한 정보를 제공합니다.
4.1. director 구성
director 설치 프로세스에는 director가 stack
사용자의 홈 디렉터리에서 읽어오는 undercloud.conf
구성 파일의 특정 설정이 필요합니다. 다음 단계에 따라 기본 템플릿을 복사하여 설정 기반으로 사용하십시오.
절차
기본 템플릿을
stack
사용자의 홈 디렉터리에 복사합니다.[stack@director ~]$ cp \ /usr/share/python-tripleoclient/undercloud.conf.sample \ ~/undercloud.conf
-
undercloud.conf
파일을 편집합니다. 이 파일에는 언더클라우드를 구성하는 설정이 포함되어 있습니다. 매개변수를 생략하거나 주석으로 처리하면 언더클라우드 설치에 기본값이 사용됩니다.
4.2. director 설정 매개변수
다음 목록에는 undercloud.conf
파일을 설정하기 위한 매개변수 정보가 나와 있습니다. 오류를 방지하려면 모든 매개변수를 관련 섹션에 보관합니다.
최소한 container_images_file
매개변수를 컨테이너 이미지 구성이 포함된 환경 파일로 설정해야 합니다. 이 매개변수를 적절한 파일로 올바르게 설정하지 않으면 director가 ContainerImagePrepare
매개변수에서 컨테이너 이미지 규칙 세트를 가져올 수 없거나 ImageRegistryCredentials
매개변수에서 컨테이너 레지스트리 인증 세부 정보를 가져올 수 없습니다.
기본값
다음 매개변수는 undercloud.conf
파일의 [DEFAULT]
섹션에 정의됩니다.
- additional_architectures
-
오버클라우드에서 지원하는 추가(커널) 아키텍처 목록입니다. 현재 오버클라우드는
x86_64
아키텍처만 지원합니다. - certificate_generation_ca
-
요청된 인증서에 서명하는 CA의
certmonger
닉네임입니다.generate_service_certificate
매개변수를 설정한 경우에만 이 옵션을 사용합니다.local
CA를 선택한 경우, certmonger는 로컬 CA 인증서를/etc/pki/ca-trust/source/anchors/cm-local-ca.pem
으로 추출하고 신뢰 체인에 인증서를 추가합니다. - clean_nodes
- 배포 중에 그리고 인트로스펙션 후에 하드 드라이브를 초기화할 것인지 여부를 정의합니다.
- cleanup
-
임시 파일을 삭제합니다. 배포 중에 사용되는 임시 파일을 유지하려면 이 값을
False
로 설정합니다. 임시 파일은 오류가 발생하는 경우 배포를 디버깅하는 데 도움이 될 수 있습니다. - container_cli
-
컨테이너 관리를 위한 CLI 툴입니다. 이 매개변수를
podman
으로 설정해 둡니다. Red Hat Enterprise Linux 9.2는podman
만 지원합니다. - container_healthcheck_disabled
-
컨테이너화된 서비스 상태 점검을 비활성화합니다. 상태 점검을 활성화하고 이 옵션을
false
로 설정해 두는 것이 좋습니다. - container_images_file
컨테이너 이미지 정보가 포함된 heat 환경 파일입니다. 이 파일은 다음 항목을 포함할 수 있습니다.
- 필요한 모든 컨테이너 이미지에 대한 매개변수
-
필요한 이미지 준비를 수행하는
ContainerImagePrepare
매개변수. 일반적으로 이 매개변수가 포함된 파일의 이름은containers-prepare-parameter.yaml
입니다.
- container_insecure_registries
-
podman
이 사용할 수 있는 비보안 레지스트리 목록입니다. 개인 컨테이너 레지스트리와 같은 다른 소스에서 이미지를 가져오려는 경우 이 매개변수를 사용합니다. 대부분의 경우 언더클라우드가 Satellite에 등록되어 있으면, Red Hat Container Catalog 또는 Satellite 서버에서 컨테이너 이미지를 가져올 수 있는 인증서가podman
에 있습니다. - container_registry_mirror
-
podman
에서 사용하도록 구성된registry-mirror
(선택 사항)입니다. - custom_env_files
- 언더클라우드 설치에 추가할 추가 환경 파일입니다.
- deployment_user
-
언더클라우드를 설치하는 사용자입니다. 현재 기본 사용자인
stack
을 사용하려면 이 매개변수를 설정되지 않은 상태로 두십시오. - discovery_default_driver
-
자동으로 등록된 노드의 기본 드라이버를 설정합니다.
enable_node_discovery
매개변수를 활성화해야 하며, 드라이버를enabled_hardware_types
목록에 포함해야 합니다. - enable_ironic; enable_ironic_inspector; enable_tempest; enable_validations
-
director를 위해 활성화할 코어 서비스를 정의합니다. 이 매개변수를
true
로 설정된 상태로 두십시오. - enable_node_discovery
-
인트로스펙션 램디스크를 PXE 부팅하는 알려지지 않은 노드를 자동으로 등록합니다. 새로운 노드는
fake
드라이버를 기본값으로 사용하지만 덮어쓸discovery_default_driver
를 설정할 수 있습니다. 또한 introspection 규칙을 사용하여 새로 등록된 노드의 드라이버 정보를 지정할 수 있습니다. - enable_routed_networks
- 라우팅된 컨트롤 플레인 네트워크에 대한 지원을 활성화할지 여부를 정의합니다.
- enabled_hardware_types
- 언더클라우드를 위해 활성화할 하드웨어 유형 목록입니다.
- generate_service_certificate
-
언더클라우드 설치 중에
undercloud_service_certificate
매개변수에 사용되는 SSL/TLS 인증서를 생성할지 여부를 정의합니다. 언더클라우드 설치에서 생성된 인증서/etc/pki/tls/certs/undercloud-[undercloud_public_vip].pem
을 저장합니다.certificate_generation_ca
매개변수에 정의된 CA가 이 인증서에 서명합니다. - heat_container_image
- 사용할 Heat 컨테이너 이미지의 URL입니다. 설정되지 않은 상태로 두십시오.
- heat_native
-
heat-all
을 사용하여 호스트 기반 언더클라우드 설정을 실행합니다.true
로 두십시오. - hieradata_override
-
director에서 Puppet hieradata를 구성하여
undercloud.conf
매개변수 이외의 사용자 지정 설정을 서비스에 제공하는hieradata
오버라이드 파일의 경로입니다. 설정한 경우 언더클라우드 설치 시 이 파일이/etc/puppet/hieradata
디렉터리에 복사되고 계층에서 첫 번째 파일로 설정됩니다. 이 기능 사용에 관한 자세한 내용은 언더클라우드에서 hieradata 구성을 참조하십시오. - inspection_extras
-
검사 프로세스 중에 추가 하드웨어 컬렉션의 활성화 여부를 정의합니다. 이 매개변수를 사용하려면 인트로스펙션 이미지에
python-hardware
또는python-hardware-detect
패키지가 필요합니다. - inspection_interface
-
director에서 노드 인트로스펙션에 사용하는 브릿지입니다. 이 브릿지는 director 구성으로 생성되는 사용자 지정 브릿지입니다.
LOCAL_INTERFACE
가 이 브릿지에 연결됩니다. 이 브릿지를 기본값br-ctlplane
으로 두십시오. - inspection_runbench
-
노드 인트로스펙션 중 벤치마크 집합을 실행합니다. 벤치마크를 활성화하려면 이 매개변수를
true
로 설정합니다. 등록된 노드의 하드웨어를 검사할 때 벤치마크 분석을 수행하려는 경우 이 옵션이 필요합니다. - ipv6_address_mode
언더클라우드 프로비저닝 네트워크의 IPv6 주소 구성 모드입니다. 다음 목록에 이 매개변수에 사용할 수 있는 값이 나와 있습니다.
- dhcpv6-stateless - RA(라우터 알림)를 사용한 주소 구성 및 DHCPv6을 사용한 선택적 정보입니다.
- dhcpv6-stateful - DHCPv6을 사용한 주소 설정 및 선택적 정보입니다.
- ipxe_enabled
-
iPXE 또는 표준 PXE 사용 여부를 정의합니다. 기본값은
true
이며, iPXE를 활성화합니다. 표준 PXE를 사용하려면 이 매개변수를false
로 설정하십시오. PowerPC 배포 또는 하이브리드 PowerPC 및 x86 배포의 경우 이 값을false
로 설정합니다. - local_interface
director 프로비저닝 NIC용으로 선택한 인터페이스로, director에서 해당 DHCP 및 PXE 부팅 서비스에 사용하는 장치이기도 합니다. 이 값을 원하는 장치로 변경하십시오. 연결된 장치를 확인하려면
ip addr
명령을 사용합니다. 예를 들면 다음은ip addr
명령을 실행한 결과입니다.2: em0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 52:54:00:75:24:09 brd ff:ff:ff:ff:ff:ff inet 192.168.122.178/24 brd 192.168.122.255 scope global dynamic em0 valid_lft 3462sec preferred_lft 3462sec inet6 fe80::5054:ff:fe75:2409/64 scope link valid_lft forever preferred_lft forever 3: em1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noop state DOWN link/ether 42:0b:c2:a5:c1:26 brd ff:ff:ff:ff:ff:ff
이 예제에서 외부 NIC는
em0
을 사용하고, 프로비저닝 NIC는 현재 구성되지 않은em1
을 사용합니다. 이 경우에는local_interface
를em1
로 설정합니다. 설정 스크립트는 이 인터페이스를inspection_interface
매개변수로 정의된 사용자 브릿지에 연결합니다.- local_ip
director 프로비저닝 NIC에 대해 정의된 IP 주소입니다. director에서 DHCP 및 PXE 부팅 서비스에 사용하는 IP 주소이기도 합니다. 프로비저닝 네트워크에 다른 서브넷을 사용하지 않는 경우, 예를 들어 이 IP 주소가 해당 환경의 기존 IP 주소 또는 서브넷과 충돌하는 경우 이 값을 기본값인
192.168.24.1/24
로 유지하십시오.IPv6의 경우 상태 저장 및 상태 비저장 연결을 모두 지원하려면 로컬 IP 주소 접두사 길이는
/64
여야 합니다.- local_mtu
-
local_interface
에 사용할 MTU(최대 전송 단위)입니다. 언더클라우드의 경우 1500을 초과하지 마십시오. - local_subnet
-
PXE 부팅 및 DHCP 인터페이스에 사용할 로컬 서브넷입니다.
local_ip
주소는 이 서브넷에 존재해야 합니다. 기본값은ctlplane-subnet
입니다. - net_config_override
-
네트워크 구성 덮어쓰기 템플릿의 경로입니다. 이 매개변수를 설정하면 언더클라우드는 JSON 또는 YAML 포멧 템플릿을 사용하여
os-net-config
로 네트워킹을 구성하고undercloud.conf
에 설정된 네트워크 매개변수를 무시합니다. 본딩을 구성하거나 인터페이스에 옵션을 추가하려는 경우 이 매개변수를 사용합니다. 언더클라우드 네트워크 인터페이스 사용자 지정에 대한 자세한 내용은 언더클라우드 네트워크 인터페이스 구성을 참조하십시오. - networks_file
-
heat
에 대해 오버라이드할 네트워크 파일입니다. - output_dir
- 상태, 처리된 heat 템플릿, Ansible 배포 파일을 출력할 디렉터리입니다.
- overcloud_domain_name
오버클라우드를 배포할 때 사용할 DNS 도메인 이름입니다.
참고오버클라우드를 구성할 때
CloudDomain
매개변수를 일치하는 값으로 설정해야 합니다. 오버클라우드 구성 시 환경 파일에서 이 매개변수를 설정하십시오.- roles_file
- 언더클라우드 설치를 위한 기본 역할 파일을 덮어쓰는 데 사용할 역할 파일입니다. director 설치에 기본 역할 파일이 사용되도록 이 매개변수를 설정되지 않은 상태로 두는 것이 좋습니다.
- scheduler_max_attempts
- 스케줄러가 인스턴스 배포를 시도하는 최대 횟수입니다. 이 값은 스케줄링할 때 잠재적인 경합 조건을 피하기 위해 즉시 배포해야 하는 베어 메탈 노드 수보다 크거나 같아야 합니다.
- service_principal
- 인증서를 사용하는 서비스에 대한 Kerberos 사용자입니다. FreeIPA와 같이 CA에 Kerberos 사용자가 필요한 경우에만 이 매개변수를 사용합니다.
- subnets
-
프로비저닝 및 인트로스펙션에 사용되는 라우팅된 네트워크 서브넷 목록입니다. 기본값은
ctlplane-subnet
서브넷만 포함합니다. 자세한 내용은 서브넷 의 내용을 참조하십시오. - templates
- 재정의할 heat 템플릿 파일입니다.
- undercloud_admin_host
SSL/TLS를 통해 director admin API 엔드포인트에 대해 정의된 IP 주소 또는 호스트 이름입니다. director 설정에 따라
/32
넷마스크를 사용하는 라우팅된 IP 주소로 IP 주소를 director 소프트웨어 브릿지에 연결합니다.undercloud_admin_host
가local_ip
와 동일한 IP 네트워크에 없는 경우 언더클라우드의 admin API가 수신 대기할 인터페이스를 구성해야 합니다. 기본적으로 admin API는br-ctlplane
인터페이스에서 수신 대기합니다. 언더클라우드 네트워크 인터페이스를 구성하는 방법에 대한 자세한 내용은 언더클라우드 네트워크 인터페이스 구성을 참조하십시오.- undercloud_debug
-
언더클라우드 서비스의 로그 수준을
DEBUG
로 설정합니다.DEBUG
로그 수준을 활성화하려면 이 값을true
로 설정합니다. - undercloud_enable_selinux
-
배포 중 SELinux를 사용 또는 사용 안 함으로 설정합니다. 문제를 디버깅하지 않는 경우 이 값을
true
로 설정된 상태로 두는 것이 좋습니다. - undercloud_hostname
- 언더클라우드에 대해 정규화된 호스트 이름을 정의합니다. 설정되어 있는 경우 언더클라우드 설치 시 모든 시스템 호스트 이름 설정이 구성됩니다. 설정되어 있지 않은 경우 언더클라우드에서 현재 호스트 이름을 사용하지만 사용자가 모든 시스템 호스트 이름 설정을 적절하게 구성해야 합니다.
- undercloud_log_file
-
언더클라우드 설치 및 업그레이드 로그를 저장할 로그 파일 경로입니다. 기본적으로 로그 파일은 홈 디렉터리에 있는
install-undercloud.log
입니다. 예를 들면/home/stack/install-undercloud.log
입니다. - undercloud_nameservers
- 언더클라우드 호스트 이름 확인에 사용할 DNS 이름 서버 목록입니다.
- undercloud_ntp_servers
- 언더클라우드의 날짜 및 시간을 동기화하는 데 사용되는 네트워크 시간 프로토콜 서버 목록입니다.
- undercloud_public_host
SSL/TLS를 통한 director 공용 API 엔드포인트에 대해 정의된 IP 주소 또는 호스트 이름입니다. director 설정에 따라
/32
넷마스크를 사용하는 라우팅된 IP 주소로 IP 주소를 director 소프트웨어 브릿지에 연결합니다.undercloud_public_host
가local_ip
와 동일한 IP 네트워크에 없는 경우PublicVirtualInterface
매개변수를 언더클라우드의 공용 API를 수신 대기할 공용 인터페이스로 설정해야 합니다. 기본적으로 공용 API는br-ctlplane
인터페이스에서 수신 대기합니다. 사용자 지정 환경 파일에서PublicVirtualInterface
매개변수를 설정하고custom_env_files
매개변수를 구성하여undercloud.conf
파일에 사용자 지정 환경 파일을 포함합니다.언더클라우드 네트워크 인터페이스 사용자 지정에 대한 자세한 내용은 언더클라우드 네트워크 인터페이스 구성을 참조하십시오.
- undercloud_service_certificate
- OpenStack SSL/TLS 통신을 위한 인증서 위치 및 파일 이름입니다. 이 인증서를 신뢰할 수 있는 인증 기관에서 가져오는 것이 가장 좋습니다. 또는 자체 서명된 고유 인증서를 생성합니다.
- undercloud_timezone
- 언더클라우드의 호스트 시간대입니다. 시간대를 지정하지 않으면 director는 기존의 표준 시간대 설정을 사용합니다.
- undercloud_update_packages
- 언더클라우드 설치 중 패키지 업데이트 여부를 정의합니다.
서브넷
각 프로비저닝 서브넷은 undercloud.conf
파일에서 이름이 지정된 섹션입니다. 예를 들어 ctlplane-subnet
이라는 서브넷을 생성하려면 undercloud.conf
파일에서 다음 샘플을 사용합니다.
[ctlplane-subnet] cidr = 192.168.24.0/24 dhcp_start = 192.168.24.5 dhcp_end = 192.168.24.24 inspection_iprange = 192.168.24.100,192.168.24.120 gateway = 192.168.24.1 masquerade = true
환경에 따라 필요한 만큼의 프로비저닝 네트워크를 지정할 수 있습니다.
director가 서브넷을 생성한 후에는 director가 서브넷의 IP 주소를 변경할 수 없습니다.
- cidr
-
director에서 오버클라우드 인스턴스를 관리하는 데 사용하는 네트워크입니다. 이 네트워크는 언더클라우드의
neutron
서비스에서 관리하는 프로비저닝 네트워크입니다. 프로비저닝 네트워크에 다른 서브넷을 사용하지 않는 경우 기본값192.168.24.0/24
로 두십시오. - masquerade
외부 액세스를 위해
cidr
에 정의된 네트워크를 마스커레이드할지 여부를 정의합니다. 그러면 프로비저닝 네트워크에 NAT(네트워크 주소 변환)가 제공되어 director를 통해 프로비저닝 네트워크에 외부 액세스 권한이 부여됩니다.참고director 구성은 적절한
sysctl
커널 매개변수를 사용하여 IP 포워딩을 자동으로 활성화합니다.- dhcp_start; dhcp_end
오버클라우드 노드의 DHCP 할당 범위 시작과 끝 값입니다. 이 범위에 노드에 할당할 충분한 IP 주소가 포함되어 있는지 확인합니다. 서브넷에 지정되지 않은 경우 director는 서브넷 전체 IP 범위에서
local_ip
,gateway
,undercloud_admin_host
,undercloud_public_host
,inspection_iprange
매개변수에 설정된 값을 제거하여 할당 풀을 결정합니다.시작 및 종료 주소 쌍 목록을 지정하여 언더클라우드 컨트롤 플레인 서브넷에 대해 무관한 할당 풀을 구성할 수 있습니다. 또는
dhcp_exclude
옵션을 사용하여 IP 주소 범위 내의 IP 주소를 제외할 수 있습니다. 예를 들어 다음 구성은 할당 풀172.20.0.100-172.20.0.150
과172.20.0.200-172.20.0.250
을 모두 생성합니다.옵션 1
dhcp_start = 172.20.0.100,172.20.0.200 dhcp_end = 172.20.0.150,172.20.0.250
옵션 2
dhcp_start = 172.20.0.100 dhcp_end = 172.20.0.250 dhcp_exclude = 172.20.0.151-172.20.0.199
- dhcp_exclude
DHCP 할당 범위에서 제외할 IP 주소입니다. 예를 들어 다음 구성은 IP 주소
172.20.0.105
및 IP 주소 범위172.20.0.210-172.20.0.219
를 제외합니다.dhcp_exclude = 172.20.0.105,172.20.0.210-172.20.0.219
- dns_nameservers
-
서브넷과 관련된 DNS 네임 서버입니다. 서브넷의 네임 서버가 정의되지 않은 경우 서브넷에서는
undercloud_nameservers
매개변수에 정의된 네임 서버를 사용합니다. - gateway
-
오버클라우드 인스턴스의 게이트웨이입니다. 트래픽을 외부 네트워크로 전달하는 언더클라우드 호스트입니다. director에 다른 IP 주소를 사용하거나 외부 게이트웨이를 직접 사용하려는 경우를 제외하고 기본값
192.168.24.1
로 두십시오. - host_routes
-
이 네트워크의 오버클라우드 인스턴스에 대한 Neutron 관리 서브넷의 호스트 경로입니다. 언더클라우드
local_subnet
의 호스트 경로도 구성합니다. - inspection_iprange
-
이 네트워크에서 노드가 검사 프로세스 중에 사용할 임시 IP 범위입니다. 이 범위는
dhcp_start
및dhcp_end
에 정의된 범위와 겹치지 않아야 하며, 동일한 IP 서브넷에 있어야 합니다.
이러한 매개변수의 값을 구성에 맞게 수정합니다. 완료되면 파일을 저장합니다.
4.3. director 설치
다음 단계에 따라 director를 설치하고 몇 가지 기본적인 설치 후 작업을 수행합니다.
절차
다음 명령을 실행하여 언더클라우드에 director를 설치합니다.
[stack@director ~]$ openstack undercloud install
이 명령은 director 설정 스크립트를 실행합니다. director는 추가 패키지를 설치하고,
undercloud.conf
의 설정에 따라 서비스를 구성하고, 모든 RHOSP 서비스 컨테이너를 시작합니다. 이 스크립트를 완료하는 데 몇 분이 걸립니다.이 스크립트는 다음 두 개의 파일을 생성합니다.
-
/home/stack/tripleo-deploy/undercloud/tripleo-undercloud-passwords.yaml
- director 서비스에 대한 모든 암호 목록입니다. -
/home/stack/stackrc
- director 명령줄 툴에 액세스할 수 있도록 지원하는 초기화 변수 세트입니다.
-
RHOSP 서비스 컨테이너가 실행 중인지 확인합니다.
[stack@director ~]$ sudo podman ps -a --format "{{.Names}} {{.Status}}"
다음 명령 출력은 RHOSP 서비스 컨테이너가 실행 중임을 나타냅니다(
최대
).memcached Up 3 hours (healthy) haproxy Up 3 hours rabbitmq Up 3 hours (healthy) mysql Up 3 hours (healthy) iscsid Up 3 hours (healthy) keystone Up 3 hours (healthy) keystone_cron Up 3 hours (healthy) neutron_api Up 3 hours (healthy) logrotate_crond Up 3 hours (healthy) neutron_dhcp Up 3 hours (healthy) neutron_l3_agent Up 3 hours (healthy) neutron_ovs_agent Up 3 hours (healthy) ironic_api Up 3 hours (healthy) ironic_conductor Up 3 hours (healthy) ironic_neutron_agent Up 3 hours (healthy) ironic_pxe_tftp Up 3 hours (healthy) ironic_pxe_http Up 3 hours (unhealthy) ironic_inspector Up 3 hours (healthy) ironic_inspector_dnsmasq Up 3 hours (healthy) neutron-dnsmasq-qdhcp-30d628e6-45e6-499d-8003-28c0bc066487 Up 3 hours ...
stack
사용자를 초기화하여 명령줄 툴을 사용하려면 다음 명령을 실행합니다.[stack@director ~]$ source ~/stackrc
OpenStack 명령이 언더클라우드에 대해 인증되어 실행됨을 나타내는 프롬프트 메시지가 표시됩니다.
(undercloud) [stack@director ~]$
director 설치가 완료되었습니다. 이제 director 명령행 툴을 사용할 수 있습니다.
4.4. 컨테이너화된 언더클라우드의 마이너 업데이트 수행
director는 언더클라우드 노드에서 기본 패키지를 업데이트하는 명령을 제공합니다. director를 사용하여 현재 RHOSP 환경에서 마이너 업데이트를 수행합니다.
프로세스
-
언더클라우드 호스트에
stack
사용자로 로그인합니다. stackrc
언더클라우드 인증 정보 파일을 소싱합니다.$ source ~/stackrc
dnf update
명령을 사용하여 director 기본 패키지를 업데이트합니다.$ sudo dnf update -y python3-tripleoclient ansible-*
언더클라우드 환경을 업데이트합니다.
$ openstack undercloud upgrade
- 언더클라우드 업데이트 프로세스가 완료될 때까지 기다립니다.
언더클라우드를 재부팅하여 운영 체제의 커널 및 기타 시스템 패키지를 업데이트합니다.
$ sudo reboot
- 노드가 부팅될 때까지 기다립니다.
5장. 컨테이너를 사용하여 오버클라우드 배포 및 업데이트
이 장에서는 컨테이너 기반 오버클라우드를 생성하고 계속 업데이트하는 방법에 대한 정보를 제공합니다.
5.1. 오버클라우드 배포
다음 절차에서는 최소 구성으로 오버클라우드를 배포하는 방법을 보여줍니다. 결과적으로 기본 2-노드 오버클라우드(컨트롤러 노드 1개, 컴퓨팅 노드 1개)가 생성됩니다.
절차
stackrc
파일을 소싱합니다.$ source ~/stackrc
배포
명령을 실행하고 오버클라우드 이미지 위치가 포함된 파일을 포함합니다(일반적으로overcloud_images.yaml
).(undercloud) $ openstack overcloud deploy --templates \ -e /home/stack/templates/overcloud_images.yaml \ --ntp-server pool.ntp.org
- 오버클라우드가 배포를 완료할 때까지 기다립니다.
5.2. 오버클라우드 업데이트
컨테이너화된 오버클라우드 업데이트에 대한 자세한 내용은 Red Hat OpenStack Platform 가이드의 마이너 업데이트 수행을 참조하십시오.
6장. 컨테이너화된 서비스 작업
이 장에서는 컨테이너를 관리하고 OpenStack Platform 컨테이너의 문제를 해결하는 방법에 대한 몇 가지 예제를 제공합니다.
6.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 및 해당 데몬을 사용하여 컨테이너를 관리했습니다. 이제 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: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
명령은 컨테이너 상태를 표시하지 않습니다.
컨테이너 로그 확인
Red Hat OpenStack Platform 17.1은 모든 컨테이너의 모든 표준 출력(stdout)과 /var/log/containers/stdout
의 각 컨테이너에 대해 하나의 파일로 통합된 표준 오류(stdout)를 기록합니다.
호스트는 이 디렉터리에 로그 회전을 적용하여 용량이 큰 파일 및 디스크 공간 관련 문제를 방지합니다.
컨테이너를 교체한 경우 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
6.2. 컨테이너화된 서비스 문제 해결
오버클라우드 배포 중 또는 이후에 컨테이너화된 서비스가 실패하면 다음 권장 사항을 사용하여 실패의 근본 원인을 확인합니다.
이러한 명령을 실행하기 전에 오버클라우드 노드에 로그인하고 언더클라우드에서 이러한 명령을 실행하지 않는지 확인합니다.
컨테이너 로그 확인
각 컨테이너는 메인 프로세스의 표준 출력을 유지합니다. 이 출력은 로그를 사용하여 컨테이너 실행 중에 실제로 수행되는 작업을 결정하는 데 도움이 됩니다. 예를 들어 keystone
컨테이너의 로그를 보려면 다음 명령을 사용합니다.
$ sudo podman logs keystone
대부분의 경우 이 로그는 컨테이너 오류의 원인을 제공합니다.
컨테이너 검사
컨테이너 정보를 확인해야 하는 경우가 있습니다. 예를 들어 다음 명령을 사용하여 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}}{{if .Mode}}:{{.Mode}}{{end}}{{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
명령을 사용하여 실행 중인 컨테이너 내에서 명령을 실행합니다. 예를 들어 keystone
컨테이너에서 명령을 실행하려면 다음을 수행합니다.
$ sudo podman exec -ti keystone <COMMAND>
-ti
옵션은 대화식 가상 터미널(pseudoterminal)에서 명령을 실행합니다.
< ;COMMAND&
gt;를 원하는 명령으로 바꿉니다. 예를 들어 각 컨테이너에는 서비스 연결을 확인하기 위한 상태 점검 스크립트가 있습니다. 다음 명령을 사용하여 keystone
에 대해 상태 점검 스크립트를 실행할 수 있습니다.
$ sudo podman exec -ti keystone /openstack/healthcheck
컨테이너 쉘에 액세스하려면 명령으로 /bin/bash
를 사용하여 podman exec
를 실행합니다.
$ sudo podman exec -ti keystone /bin/bash
컨테이너 내보내기
컨테이너가 실패하면 파일의 전체 콘텐츠를 확인해야 합니다. 이 경우 컨테이너의 전체 파일 시스템을 tar
아카이브로 내보낼 수 있습니다. 예를 들어 keystone
컨테이너 파일 시스템을 내보내려면 다음 명령을 실행합니다.
$ sudo podman export keystone -o keystone.tar
이 명령은 keystone.tar
아카이브를 생성하여 추출 및 확인할 수 있습니다.
7장. Systemd 서비스와 컨테이너화된 서비스 비교
이 장에서는 컨테이너화된 서비스가 Systemd 서비스와 다른 방식을 보여주는 참조 자료를 제공합니다.
7.1. systemd 서비스 및 컨테이너화된 서비스
다음 표는 Systemd 기반 서비스와 Systemd 서비스로 제어되는 podman
컨테이너 간의 상관 관계를 보여줍니다.
구성 요소 | systemd 서비스 | 컨테이너 |
---|---|---|
OpenStack Image Storage(glance) |
|
|
HAProxy |
|
|
OpenStack Orchestration(heat) |
|
|
OpenStack Bare Metal(ironic) |
|
|
Keepalived |
|
|
OpenStack Identity(keystone) |
|
|
logrotate |
|
|
Memcached |
|
|
MySQL |
|
|
OpenStack Networking(neutron) |
|
|
OpenStack Compute(nova) |
|
|
RabbitMQ |
|
|
OpenStack Object Storage(swift) |
|
|
OpenStack Messaging(zaqar) |
|
|
Aodh |
|
|
Gnocchi |
|
|
ceilometer |
|
|
7.2. systemd 로그 위치 및 컨테이너화된 로그 위치
다음 표에서는 Systemd 기반 OpenStack 로그와 컨테이너에 해당하는 로그를 보여줍니다. 모든 컨테이너 기반 로그 위치는 물리적 호스트에서 사용할 수 있으며 컨테이너에 마운트됩니다.
OpenStack 서비스 | systemd 서비스 로그 | 컨테이너 로그 |
---|---|---|
Aodh |
|
|
ceilometer |
|
|
cinder |
|
|
Glance |
|
|
Gnocchi |
|
|
Heat |
|
|
Horizon |
|
|
Keystone |
|
|
데이터베이스 |
|
|
Neutron |
|
|
Nova |
|
|
rabbitmq |
|
|
Redis |
|
|
swift |
|
|
7.3. systemd 구성 및 컨테이너화된 구성
다음 표에서는 Systemd 기반 OpenStack 구성과 컨테이너에 해당하는 구성을 보여줍니다. 모든 컨테이너 기반 구성 위치는 물리적 호스트에서 사용할 수 있으며 컨테이너에 마운트되며 각 컨테이너
내의 구성에 병합됩니다.
OpenStack 서비스 | systemd 서비스 구성 | 컨테이너 구성 |
---|---|---|
Aodh |
|
|
ceilometer |
|
|
cinder |
|
|
Glance |
|
|
Gnocchi |
|
|
haproxy |
|
|
Heat |
|
|
Horizon |
|
|
Keystone |
|
|
데이터베이스 |
|
|
Neutron |
|
|
Nova |
|
|
rabbitmq |
|
|
Redis |
|
|
swift |
|
|