6장. OpenShift Container Platform 설치
OpenShift Container Platform 클러스터를 설치하려면 일련의 Ansible 플레이북을 실행합니다.
--tags
또는 --check
옵션을 사용하여 Ansible Playbook을 실행하는 것은 Red Hat에서 지원되지 않습니다.
OpenShift Container Platform을 독립형 레지스트리로 설치하려면 독립 실행형 레지스트리 설치를 참조하십시오.
6.1. 사전 요구 사항
OpenShift Container Platform을 설치하기 전에 클러스터 호스트를 준비합니다.
- 시스템 및 환경 요구 사항을 검토합니다.
- 대규모 클러스터가 있는 경우 설치 시간을 최적화하기 위한 제안 사항은 스케일링 및 성능 가이드 를 확인하십시오.
- 호스트를 준비합니다. 이 프로세스에는 구성 요소 유형별 시스템 및 환경 요구 사항 확인, docker 서비스 설치 및 구성, Ansible 버전 2.6 이상을 설치하는 작업이 포함됩니다. 설치 플레이북을 실행하려면 Ansible을 설치해야 합니다.
- 환경 및 OpenShift Container Platform 클러스터 구성을 정의하도록 인벤토리 파일을 구성합니다. 초기 설치 및 향후 클러스터 업그레이드는 이 인벤토리 파일을 기반으로 합니다.
- Red Hat Enterprise Linux에 OpenShift Container Platform을 설치하는 경우 RPM 또는 시스템 컨테이너 설치 방법을 사용할지 여부를 결정합니다. RHEL Atomic Host 시스템에 시스템 컨테이너 방법이 필요합니다.
6.1.1. RPM 기반 설치 프로그램 실행
RPM 기반 설치 프로그램은 RPM 패키지를 통해 설치된 Ansible을 사용하여 로컬 호스트에서 사용 가능한 플레이북 및 구성 파일을 실행합니다.
nohup
에서 OpenShift Ansible 플레이북을 실행하지 마십시오. 플레이북과 함께 nohup
을 사용하면 파일 설명자를 생성하지만 닫히지 않습니다. 따라서 시스템이 파일을 열어서 실행할 수 있으며 플레이북이 실패합니다.
RPM 기반 설치 프로그램을 실행하려면 다음을 수행합니다.
플레이북 디렉터리로 변경하고 prerequisites.yml 플레이북을 실행합니다. 이 Playbook은 필요한 소프트웨어 패키지를 설치하고 컨테이너 런타임을 수정합니다. 컨테이너 런타임을 구성할 필요가 없는 경우 클러스터를 처음으로 배포하기 전에 이 플레이북을 한 번만 실행합니다.
$ cd /usr/share/ansible/openshift-ansible $ ansible-playbook [-i /path/to/inventory] \ 1 playbooks/prerequisites.yml
- 1
- 인벤토리 파일이 /etc/ansible/hosts 디렉터리에 없는 경우
-i
및 인벤토리 파일의 경로를 지정합니다.
플레이북 디렉터리로 변경하고 deploy_cluster.yml 플레이북을 실행하여 클러스터 설치를 시작합니다.
$ cd /usr/share/ansible/openshift-ansible $ ansible-playbook [-i /path/to/inventory] \ 1 playbooks/deploy_cluster.yml
- 1
- 인벤토리 파일이 /etc/ansible/hosts 디렉터리에 없는 경우
-i
및 인벤토리 파일의 경로를 지정합니다.
. 설치에 성공하면 설치를 확인합니다. 설치에 실패하면 설치를 다시 시도합니다.
6.1.2. 컨테이너화된 설치 프로그램 실행
openshift3/ose-ansible 이미지는 컨테이너화된 OpenShift Container Platform 설치 프로그램의 버전입니다. 이 설치 프로그램 이미지는 RPM 기반 설치 프로그램과 동일한 기능을 제공하지만 호스트에 직접 설치하는 대신 모든 종속 항목을 제공하는 컨테이너화된 환경에서 실행됩니다. 이를 사용하는 유일한 요구 사항은 컨테이너를 실행하는 기능입니다.
6.1.2.1. 설치 프로그램을 시스템 컨테이너로 실행
설치 프로그램 이미지는 시스템 컨테이너로 사용할 수 있습니다. 시스템 컨테이너는 기존 docker 서비스 외부에서 저장 및 실행됩니다. 이렇게 하면 호스트에서 Docker를 다시 시작하는 데 문제가 없는 대상 호스트 중 하나에서 설치 프로그램 이미지를 실행할 수 있습니다.
Atomic CLI를 사용하여 설치 프로그램을 런타임 시스템 컨테이너로 실행하려면 root 사용자로 다음 단계를 수행합니다.
prerequisites.yml 플레이북을 실행합니다.
# atomic install --system \ --storage=ostree \ --set INVENTORY_FILE=/path/to/inventory \ 1 --set PLAYBOOK_FILE=/usr/share/ansible/openshift-ansible/playbooks/prerequisites.yml \ --set OPTS="-v" \ registry.redhat.io/openshift3/ose-ansible:v3.11
- 1
- 인벤토리 파일의 로컬 호스트의 위치를 지정합니다.
이 명령은 지정된 인벤토리 파일 및
root
사용자의 SSH 구성을 사용하여 사전 요구 사항 작업 세트를 실행합니다.deploy_cluster.yml 플레이북을 실행합니다.
# atomic install --system \ --storage=ostree \ --set INVENTORY_FILE=/path/to/inventory \ 1 --set PLAYBOOK_FILE=/usr/share/ansible/openshift-ansible/playbooks/deploy_cluster.yml \ --set OPTS="-v" \ registry.redhat.io/openshift3/ose-ansible:v3.11
- 1
- 인벤토리 파일의 로컬 호스트의 위치를 지정합니다.
이 명령은 지정된 인벤토리 파일과
root
사용자의 SSH 구성을 사용하여 클러스터 설치를 시작합니다. 터미널에 출력을 기록하고 /var/log/ansible.log 파일에 저장합니다. 이 명령을 처음 실행할 때 이미지를 OSTree 스토리지로 가져옵니다(시스템 컨테이너는 docker 데몬 스토리지 대신 이 값을 사용합니다). 후속 실행에서는 저장된 이미지를 재사용합니다.설치 프로그램을 다시 실행하기 전에 설치가 실패하는 경우 특정 명령 또는 해결 방법을 확인하기 위해 알려진 문제를 참조하십시오.
6.1.2.2. 다른 플레이북 실행
PLAYBOOK_FILE
환경 변수를 사용하여 컨테이너화된 설치 프로그램을 사용하여 실행할 다른 플레이북을 지정할 수 있습니다. PLAYBOOK_FILE
의 기본값은 /usr/share/ansible/openshift-ansible/playbooks/deploy_cluster.yml 이지만 컨테이너 내부의 다른 플레이북의 경로로 설정할 수 있습니다.
예를 들어 설치 전에 사전 설치 검사 플레이북을 실행하려면 다음 명령을 사용합니다.
# atomic install --system \ --storage=ostree \ --set INVENTORY_FILE=/path/to/inventory \ --set PLAYBOOK_FILE=/usr/share/ansible/openshift-ansible/playbooks/openshift-checks/pre-install.yml \ 1 --set OPTS="-v" \ 2 registry.redhat.io/openshift3/ose-ansible:v3.11
6.1.2.3. 설치 프로그램을 컨테이너로 실행
설치 프로그램 이미지는 docker 를 실행할 수 있는 Docker 컨테이너로도 실행할 수 있습니다.
설치 프로그램이 호스트에서 docker 를 재시작하고 설치를 중단할 수 있으므로 이 방법을 사용하여 구성 중인 호스트 중 하나에서 설치 프로그램을 실행할 수 없습니다.
이 방법과 위의 시스템 컨테이너 메서드는 동일한 이미지를 사용하지만 다른 진입점과 컨텍스트로 실행되므로 런타임 매개 변수는 동일하지 않습니다.
적어도 docker 컨테이너로 설치 프로그램을 실행하는 경우 다음을 제공해야 합니다.
- Ansible이 호스트에 연결할 수 있도록 SSH 키.
- Ansible 인벤토리 파일.
- 해당 인벤토리에 대해 실행할 Ansible 플레이북의 위치입니다.
docker
를 통해 설치를 실행하는 방법의 예는 docker
에 대한 액세스 권한이 있는root 가 아닌 사용자가 실행해야 합니다.
먼저 prerequisites.yml 플레이북을 실행합니다.
$ docker run -t -u `id -u` \ 1 -v $HOME/.ssh/id_rsa:/opt/app-root/src/.ssh/id_rsa:Z \ 2 -v $HOME/ansible/hosts:/tmp/inventory:Z \ 3 -e INVENTORY_FILE=/tmp/inventory \ 4 -e PLAYBOOK_FILE=playbooks/prerequisites.yml \ 5 -e OPTS="-v" \ 6 registry.redhat.io/openshift3/ose-ansible:v3.11
- 1
-u 'id -u'
는 현재 사용자와 동일한 UID로 컨테이너를 실행하여 해당 사용자가 컨테이너 내에서 SSH 키를 사용할 수 있도록 합니다. SSH 개인 키는 소유자만 읽을 수 있어야 합니다.- 2
-v $HOME/.ssh/id_rsa:/opt/app-root/.ssh/id_rsa:Z
는 컨테이너 사용자의$HOME/.ssh/id_rsa
디렉터리에 SSH 키인$HOME/.ssh
/id_rsa를 마운트합니다. /opt/app-root/src 는 컨테이너에 있는 사용자의$HOME
입니다. SSH 키를 다른 위치에 마운트하는 경우-e ANSIBLE_PRIVATE_KEY_FILE=/the/mount/point
또는ansible_ssh_private_key_file=/the/mount/point
를 인벤토리의 변수로 설정하여 Ansible을 가리키도록 환경 변수를 추가합니다. SSH 키는:Z
플래그를 사용하여 마운트됩니다. 컨테이너가 제한된 SELinux 컨텍스트에서 SSH 키를 읽을 수 있도록 이 플래그가 필요합니다. 또한 원래 SSH 키 파일의 레이블이system_u:object_r:container_file_t:s0:c113,c247
과 같은 항목에 다시 지정됩니다.:Z
에 대한 자세한 내용은docker-run(1)
매뉴얼 페이지를 참조하십시오. 예를 들어 전체$HOME/.ssh
디렉토리를 마운트(및 다시 레이블을 다시 레이블)하는 경우 호스트의 sshd 가 공개 키에 액세스하지 못하도록 차단되어 이러한 볼륨 마운트 사양을 제공하면 로그인할 수 있습니다. 따라서 원래 파일 레이블이 그대로 유지되도록 SSH 키 또는 디렉터리의 별도의 사본을 사용할 수 있습니다.- 3 4
-V $HOME/ansible/hosts:/tmp/inventory:Z와
후 해당 환경 변수를 해당 환경 변수를 가리키도록 설정합니다. SSH 키와 마찬가지로 기존 라벨에 따라 컨테이너에서 읽을 수 있도록-e INVENTORY_FILE=/tmp/inventory
는 정적 Ansible 인벤토리 파일을 컨테이너에 /tmp/inventory 로 마운트한:Z
플래그를 사용하여 인벤토리 파일 SELinux 레이블을 다시 지정해야 할 수 있습니다. 사용자$HOME
디렉터리의 파일의 경우 이 작업이 필요할 수 있습니다. 마운트하기 전에 인벤토리를 전용 위치에 복사하려고 할 수 있습니다.INVENTORY_URL
환경 변수를 지정하거나DYNAMIC_SCRIPT_URL
매개변수를 사용하여 동적 인벤토리를 제공하는 실행 가능 스크립트를 지정하여 웹 서버에서 인벤토리 파일을 다운로드할 수도 있습니다.- 5
-e PLAYBOOK_FILE=playbooks/prerequisites.yml
은 openshift-ansible 콘텐츠의 최상위 디렉터리에서 상대 경로로 실행할 플레이북을 지정합니다. 이 예에서는 사전 요구 사항 플레이북을 지정합니다. RPM에서 전체 경로 또는 컨테이너의 다른 플레이북 파일의 경로를 지정할 수도 있습니다.- 6
-EoctetsS="-v"
는 컨테이너 내에서 실행되는ansible-playbook
명령에 임의의 명령행 옵션을 제공합니다. 이 예에서 세부 정보 표시를 늘리려면-v
를 지정합니다.
다음으로 deploy_cluster.yml 플레이북을 실행하여 클러스터 설치를 시작합니다.
$ docker run -t -u `id -u` \ -v $HOME/.ssh/id_rsa:/opt/app-root/src/.ssh/id_rsa:Z \ -v $HOME/ansible/hosts:/tmp/inventory:Z \ -e INVENTORY_FILE=/tmp/inventory \ -e PLAYBOOK_FILE=playbooks/deploy_cluster.yml \ -e OPTS="-v" \ registry.redhat.io/openshift3/ose-ansible:v3.11
6.1.2.4. OpenStack용 설치 Playbook 실행
기존 OpenStack 설치에 OpenShift Container Platform을 설치하려면 OpenStack 플레이북을 사용합니다. 자세한 사전 요구 사항을 포함하여 플레이북에 대한 자세한 내용은 OpenStack Provisioning readme 파일을 참조하십시오.
Playbook을 실행하려면 다음 명령을 실행합니다.
$ ansible-playbook --user openshift \ -i openshift-ansible/playbooks/openstack/inventory.py \ -i inventory \ openshift-ansible/playbooks/openstack/openshift-cluster/provision_install.yml
6.1.3. 설치 플레이북 정보
설치 프로그램은 모듈식 플레이북을 사용하므로 관리자가 필요에 따라 특정 구성 요소를 설치할 수 있습니다. 역할 및 플레이북을 분리하면 애드혹 관리 작업을 더 잘 목표로 지정할 수 있습니다. 이로 인해 설치 중에 제어 수준이 높아지고 시간이 단축됩니다.
기본 설치 플레이북 /usr/share/ansible/openshift-ansible/playbooks/deploy_cluster.yml 은 특정 순서로 개별 구성 요소 플레이북 세트를 실행하고 설치 프로그램이 어떤 단계를 반복했는지 보고합니다. 설치에 실패하면 Ansible 실행 오류와 함께 어떤 단계가 실패했는지 알 수 있습니다.
RHEL Atomic Host는 OpenShift Container Platform 서비스를 시스템 컨테이너로 실행하는 데 지원되지만 설치 방법은 RHEL Atomic Host에서 사용할 수 없는 Ansible을 사용합니다. 따라서 RPM 기반 설치 프로그램은 RHEL 7 시스템에서 실행해야 합니다. 설치를 시작하는 호스트는 OpenShift Container Platform 클러스터에 포함하기위한 것이 아니라 다음 작업을 수행할 수 있습니다. 또는 컨테이너화된 버전의 설치 프로그램을 RHEL Atomic Host 시스템에서 실행할 수 있는 시스템 컨테이너로 사용할 수 있습니다.