OpenStack 및 Kolla Ansible과 함께 Contrail 설치
대부분의 Contrail Networking 구축에서 Contrail Command를 사용하여 기존 Contrail 클러스터에 컴퓨팅 노드를 추가하는 것이 좋습니다. Contrail Command를 사용하여 기존 Contrail 클러스터에 새 컴퓨팅 노드 추가를 참조하십시오.
이 문서의 절차는 Contrail Command GUI를 사용하지 않는 환경에서 상당한 YAML 파일 전문 지식을 갖춘 네트워크 관리자만 수행해야 합니다.
이 주제의 목표는 Kolla Ansible 플레이북 contrail-kolla-ansible
을 사용하여 OpenStack과 함께 Contrail Networking을 설치하는 것입니다.
Kolla는 OpenStack 서비스용 컨테이너 이미지를 빌드하는 도구를 제공하는 OpenStack 프로젝트입니다. Kolla Ansible은 Kolla 이미지를 배포하기 위한 Ansible 플레이북을 제공합니다.
플레이북은 contrail-kolla-ansible
와 contrail-ansible-deployer
함께 작동하여 OpenStack 및 Contrail Networking 컨테이너를 설치합니다.
Contrail Command를 사용하여 Contrail 클러스터를 구축하려면 Contrail Command 및 instances.yml을 사용하여 Contrail Cluster 설치를 참조하십시오.
절차에 따라 다음을 사용하여 contrail-kolla-ansible
Kolla 컨테이너를 배포하고 다음을 사용하여 contrail-ansible-deployer
Contrail Networking 컨테이너를 배포합니다.
기본 호스트 설정
CentOS 및 커널 버전을 업데이트합니다. 지원되는 플랫폼 목록은 https://www.juniper.net/documentation/en_US/release-independent/contrail/topics/reference/contrail-supported-platforms.pdf 를 참조하십시오.
vRouter는 호스트 커널과 종속성 이 있습니다.
기본 호스트를 설정하려면 다음을 수행합니다.
Contrail Downloads(Contrail 다운로드) 페이지에서 Ansible Deployer 설치 프로그램 패키지를 다운로드합니다.
Ansible을 설치합니다.
yum -y install epel-release
yum -y install git ansible-2.7.10
python-pip를 설치합니다.
yum install -y python-pip
다음 명령을 실행합니다.
yum -y remove PyYAML python-requests
pip install PyYAML requests
tgz 파일의 압축을 풉니다.
- tar xvf contrail-ansible-deployer-19<xx>.<NN>.tgz
instances.yaml은contrail-ansible-deployer/config/에 있습니다.
다음 지침에 따라 instances.yaml 파일에서 Contrail 및 Kolla 매개 변수를 구성합니다.
프로바이더 구성(
provider_config
) 섹션은 Contrail 클러스터가 호스팅될 클라우드 프로바이더를 나타내며, 프로바이더와 관련된 모든 매개 변수를 포함합니다. 베어메탈 서버의 경우 공급자는bms
.이 섹션은
kolla_globals
OpenStack 서비스를 참조합니다. 가능한kolla_globals
모든 에 대한 자세한 내용은 https://github.com/Juniper/contrail-kolla-ansible/.../globals.yml 를 참조하십시오.추가 Kolla 구성(
contrail-kolla-ansible
)은 로contrail_additions
가능합니다. Kolla에 가능한contrail_additions
모든 것에 대한 자세한 내용은 https://github.com/Juniper/contrail-kolla-ansible/.../all.yml 를 참조하십시오.이
contrail_configuration
섹션에는 Contrail 서비스에 대한 매개 변수가 포함되어 있습니다.CONTAINER_REGISTRY
은(는) Contrail 컨테이너를 가져올 레지스트리를 지정합니다. 자체 컨테이너를 빌드하는 경우 로컬 Docker 레지스트리로 설정할 수 있습니다. 레지스트리를 지정하지 않으면 Docker 허브에서 컨테이너를 끌어오려고 시도합니다.사용자 지정 레지스트리가 지정된 경우 아래에
kolla_globals
contrail_docker_registry
동일한 레지스트리도 지정합니다.CONTRAIL_VERSION
을 지정하지 않으면 기본적으로 "latest" 태그가 사용됩니다.에 사용할 수 있는
contrail_configuration
모든 매개 변수에 대한 자세한 내용은 https://github.com/tungstenfabric/tf-container-builder/blob/master/containers/base/common.sh 단원을 참조하십시오.instances.yaml 파일에서 을roles(를) 지정해야 합니다. 그렇지 않으면 설치 절차가 실패합니다.
호스트마다 호스트별 값이 있는 경우, 예를 들어 "network_interface"에 사용되는 인터페이스 이름이 클러스터의 서버에서 다른 경우 멀티 노드 OpenStack HA 및 Contrail(멀티 인터페이스)에 대한 구성 샘플의 구성 예제를 사용합니다.
많은 매개변수가 자동으로 정상적인 기본값(첫 번째 구성의 작동 방식)으로 파생됩니다. 필요한 경우 파생된 값을 재정의할 변수를 명시적으로 지정할 수 있습니다. 코드를 검토하여 파생 논리를 확인합니다.
예: instances.yaml
이 예는 단일 노드, 단일 인터페이스, 올인원 클러스터에 대한 최소한의 구성입니다.
provider_config: bms: ssh_pwd: <password> ssh_user: root ntpserver: <IP NTP server> domainsuffix: local instances: bms1: provider: bms ip: <IP BMS> roles: config_database: config: control: analytics_database: analytics: analytics_alarm: analytics_snmp: webui: vrouter: openstack: openstack_compute: contrail_configuration: RABBITMQ_NODE_PORT: 5673 AUTH_MODE: keystone KEYSTONE_AUTH_URL_VERSION: /v3 kolla_config: kolla_globals: enable_haproxy: no kolla_passwords: keystone_admin_password: <Keystone admin password>
예: instances.yaml
이 예는 단일 노드, 단일 인터페이스, 올인원 클러스터에 대한 보다 정교한 구성입니다.
provider_config: bms: ssh_pwd: <password> ssh_user: root ntpserver: <IP NTP server> domainsuffix: local instances: bms1: provider: bms ip: <IP BMS> roles: config_database: config: control: analytics_database: analytics: analytics_alarm: analytics_snmp: webui: vrouter: openstack: openstack_compute: global_configuration: CONTAINER_REGISTRY: <Registry FQDN/IP>:<Registry Port> REGISTRY_PRIVATE_INSECURE: True contrail_configuration: CONTRAIL_VERSION: latest CLOUD_ORCHESTRATOR: openstack VROUTER_GATEWAY: <IP gateway> RABBITMQ_NODE_PORT: 5673 PHYSICAL_INTERFACE: <interface name> AUTH_MODE: keystone KEYSTONE_AUTH_URL_VERSION: /v3 kolla_config: kolla_globals: kolla_internal_vip_address: <Internal VIP> contrail_api_interface_address: <Contrail API Addr> enable_haproxy: no kolla_passwords: keystone_admin_password: <Keystone Admin Password>
폴더에서 다음 명령을 contrail-ansible-deployer 실행합니다.
ansible-playbook -e orchestrator=openstack -i inventory/ playbooks/configure_instances.yml
ansible-playbook -i inventory/ playbooks/install_openstack.yml
ansible-playbook -e orchestrator=openstack -i inventory/ playbooks/install_contrail.yml
웹 브라우저를 열고 https://contrail-server-ip:8143 입력하여 Contrail 웹 UI에 액세스합니다.
기본 로그인 사용자 이름은 admin입니다. 6단계에서 입력한 것과 동일한 암호를 사용합니다
멀티노드 OpenStack HA 및 Contrail을 위한 다중 인터페이스 구성 샘플
이것은 고가용성 OpenStack 및 Contrail Networking의 다중 인터페이스, 다중 노드 구축을 위한 구성 샘플입니다. 이 샘플을 사용하여 시스템과 관련된 매개 변수를 구성할 수 있습니다.
자세한 내용이나 최신 업데이트는 github 항목 멀티 노드 OpenStack HA 및 Contrail(멀티 인터페이스)에 대한 구성 샘플을 참조하십시오.
구성 샘플 - 다중 인터페이스
provider_config: bms: ssh_pwd: <Pwd> ssh_user: root ntpserver: <NTP Server> domainsuffix: local instances: bms1: provider: bms ip: <BMS1 IP> roles: openstack: bms2: provider: bms ip: <BMS2 IP> roles: openstack: bms3: provider: bms ip: <BMS3 IP> roles: openstack: bms4: provider: bms ip: <BMS4 IP> roles: config_database: config: control: analytics_database: analytics: analytics_alarm: analytics_snmp: webui: bms5: provider: bms ip: <BMS5 IP> roles: config_database: config: control: analytics_database: analytics: analytics_alarm: analytics_snmp: webui: bms6: provider: bms ip: <BMS6 IP> roles: config_database: config: control: analytics_database: analytics: analytics_alarm: analytics_snmp: webui: bms7: provider: bms ip: <BMS7 IP> roles: vrouter: PHYSICAL_INTERFACE: <Interface name> VROUTER_GATEWAY: <Gateway IP> openstack_compute: bms8: provider: bms ip: <BMS8 IP> roles: vrouter: # Add following line for TSN Compute Node TSN_EVPN_MODE: True openstack_compute: contrail_configuration: CLOUD_ORCHESTRATOR: openstack KEYSTONE_AUTH_URL_VERSION: /v3 IPFABRIC_SERVICE_HOST: <Service Host IP> # Add following line for TSN Compute Node TSN_NODES: <TSN NODE IP List> # For EVPN VXLAN TSN ENCAP_PRIORITY: "VXLAN,MPLSoUDP,MPLSoGRE" PHYSICAL_INTERFACE: <Interface name> kolla_config: kolla_globals: kolla_internal_vip_address: <Internal VIP> kolla_external_vip_address: <External VIP> contrail_api_interface_address: <Contrail API IP> kolla_passwords: keystone_admin_password: <Keystone Admin Password>
멀티노드 OpenStack HA 및 Contrail을 위한 단일 인터페이스 구성 샘플
이것은 고가용성 OpenStack 및 Contrail Networking의 다중 노드, 단일 인터페이스 구축을 위한 구성 샘플입니다. 이 샘플을 사용하여 시스템과 관련된 매개 변수를 구성할 수 있습니다.
자세한 내용이나 최신 업데이트는 github 항목 멀티 노드 OpenStack HA 및 Contrail(단일 인터페이스)에 대한 구성 샘플을 참조하십시오.
구성 샘플—단일 인터페이스
provider_config: bms: ssh_pwd: <password> ssh_user: root ntpserver: xx.xx.x.xx domainsuffix: local instances: centos1: provider: bms ip: ip-address roles: openstack: centos2: provider: bms ip: ip-address roles: openstack: centos3: provider: bms ip: ip-address roles: openstack: centos4: provider: bms ip: ip-address roles: config_database: config: control: analytics_database: analytics: analytics_alarm: analytics_snmp: webui: centos5: provider: bms ip: ip-address roles: config_database: config: control: analytics_database: analytics: analytics_alarm: analytics_snmp: webui: centos6: provider: bms ip: ip-address roles: config_database: config: control: analytics_database: analytics: analytics_alarm: analytics_snmp: webui: centos7: provider: bms ip: ip-address roles: vrouter: openstack_compute: centos8: provider: bms ip: ip-address roles: vrouter: openstack_compute: contrail_configuration: CONTRAIL_VERSION: <contrail_version> CONTROLLER_NODES: ip-addresses separated by comma CLOUD_ORCHESTRATOR: openstack RABBITMQ_NODE_PORT: 5673 VROUTER_GATEWAY: gateway-ip-address PHYSICAL_INTERFACE: eth1 IPFABRIC_SERVICE_IP: ip-address KEYSTONE_AUTH_HOST: ip-address KEYSTONE_AUTH_URL_VERSION: /v3 kolla_config: kolla_globals: kolla_internal_vip_address: ip-address contrail_api_interface_address: ip-address network_interface: "eth1" enable_haproxy: "yes" kolla_passwords: keystone_admin_password: <password>
contrail_container_tag
을 Contrail 릴리스에 적합한 값으로 바꿉니다<contrail_version>. 각 contrail_container_tag
값은 Contrail Registry 19XX에 대한 README 액세스에 나열되어 있습니다.
자주 묻는 질문
이 섹션에서는 몇 가지 일반적인 오류 상황을 제공하고 오류 조건을 해결하는 방법에 대한 지침을 제공합니다.
- 호스트별 매개 변수 사용
- 개인 레지스트리의 컨테이너에 액세스할 수 없음
- 오류: vrouter 커널 모듈을 삽입하지 못했습니다.
- vrouter가 OpenStack을 지정하지 않은 경우 치명적인 오류
- 단일 OpenStack 클러스터에서 HAProxy 및 가상 IP의 필요성
- kolla_toolbox 컨테이너를 사용하여 OpenStack 명령 실행
호스트별 매개 변수 사용
호스트별 매개 변수를 지정해야 하는 상황(예: 클러스터의 다른 서버에 대해 인터페이스 이름이 다른 경우)이 발생할 수 있습니다. 이 경우 각 역할에서 개별 이름을 지정할 수 있으며 보다 구체적인 설정이 우선합니다.
예를 들어, "openstack" 역할 아래에 "network_interface" 설정이 없는 경우(예: "bms1") 전역 변수에서 해당 설정을 가져옵니다.
확장된 예제는 멀티 노드 OpenStack HA 및 Contrail 구성 샘플에서 확인할 수 있습니다.
개인 레지스트리의 컨테이너에 액세스할 수 없음
CONTAINER_REGISTRY라는 개인 레지스트리에서 가져온 컨테이너에 액세스할 수 없는 상황이 있을 수 있습니다.
이 문제를 해결하려면 REGISTRY_PRIVATE_INSECURE가 True로 설정되어 있는지 확인합니다.
오류: vrouter 커널 모듈을 삽입하지 못했습니다.
vrouter 컨테이너가 오류 상태이고 Docker 로그에 오류가 표시된 상태에서 vrouter 모듈이 컴퓨팅 노드에 설치되지 않는 상황이 발생할 수 있습니다.
[srvr5] ~ # docker logs vrouter_vrouter-kernel-init_1 /bin/cp: cannot create regular file '/host/bin/vif': No such file or directory INFO: Load kernel module for kver=3.10.0 INFO: Modprobing vrouter /opt/contrail/vrouter-kernel-modules/3.10.0-957.11.6.el7.x86_64/vrouter.ko total used free shared buff/cache available Mem: 62G 999M 55G 9.1M 5.9G 60G Swap: 0B 0B 0B total used free shared buff/cache available Mem: 62G 741M 61G 9.1M 923M 61G Swap: 0B 0B 0B insmod: ERROR: could not insert module /opt/contrail/vrouter-kernel-modules/3.10.0-957.11.6.el7.x86_64/vrouter.ko: Unknown symbol in module ERROR: Failed to insert vrouter kernel module
이 릴리스에서 vrouter 모듈을 사용하려면 호스트 커널 버전이 3.10.0-957.11.6.el7.x86_64이어야 합니다. 이 커널 버전을 가져오려면 provision을 실행하기 전에 대상 노드에 커널 버전을 설치합니다.
yum -y install kernel-3.10.0-957.11.6.el7.x86_64 yum update reboot
vrouter가 OpenStack을 지정하지 않은 경우 치명적인 오류
nova-compute 없이 vrouter를 프로비저닝해야 하는 경우 치명적인 오류가 발생할 수 있습니다.
2018-03-21 00:47:16,884 p=16999 u=root | TASK [iscsi : Ensuring config directories exist] ******************** 2018-03-21 00:47:16,959 p=16999 u=root | fatal: [ip-address]: FAILED! => {"msg": "The conditional check 'inventory_hostname in groups['compute'] or inventory_hostname in groups['storage']' failed. The error was: error while evaluating conditional (inventory_hostname in groups['compute'] or inventory_hostname in groups['storage']): Unable to look up a name or access an attribute in template string ({% if inventory_hostname in groups['compute'] or inventory_hostname in groups['storage'] %} True {% else %} False {% endif %}).\nMake sure your variable name does not contain invalid characters like '-': argument of type 'StrictUndefined' is not iterable\n\nThe error appears to have been in '/root/contrail-kolla- ansible/ansible/roles/iscsi/tasks/config.yml': line 2, column 3, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n---\n- name: Ensuring config directories exist\n ^ here\n"} 2018-03-21 00:47:16,961 p=16999 u=root | to retry, use: --limit @/root/contrail-ansible- deployer/playbooks/install_contrail.retry
nova-compute와 함께 vrouter를 프로비저닝해야 하는 사용 사례가 있습니다. 따라서 "vrouter" 역할이 지정될 때 "openstack_compute"가 자동으로 유추되지 않습니다. 이 문제를 해결하려면 "vrouter"와 함께 "openstack_compute" 역할을 명시적으로 명시해야 합니다.
이 사용 사례에 대한 자세한 내용은 버그 #1756133을 참조하세요.
단일 OpenStack 클러스터에서 HAProxy 및 가상 IP의 필요성
기본적으로 모든 OpenStack 서비스는 config/instances.yaml의 섹션 아래에 있는 변수에서 kolla_internal_vip_address/network_interface
제공하는 IP 인터페이스에서 수신 대기합니다kolla_globals
. 대부분의 경우 이것은 ctrl-data 네트워크에 해당하며, 이는 Horizon도 이제 ctrl-data 네트워크에서만 실행됨을 의미합니다. Kolla가 관리 네트워크에서 Horizon에 대한 액세스를 제공하는 유일한 방법은 HAProxy 및 keepalived를 사용하는 것입니다. keepalived를 활성화하려면 VRRP에 대한 가상 IP가 필요하며 인터페이스 IP가 될 수 없습니다. Kolla 구성 매개변수를 사용할 때 keepalived를 활성화하지 않고는 HAProxy를 활성화할 수 있는 방법이 없습니다. 따라서 관리()와 ctrl-data-network(kolla_external_vip_address
kolla_internal_vip_address
)에 각각 하나씩 두 개의 가상 IP 주소를 제공해야 합니다. 이 구성을 사용하면 Horizon은 를 통해 관리 네트워크에서 액세스할 수 있습니다kolla_external_vip_address
.
kolla_toolbox 컨테이너를 사용하여 OpenStack 명령 실행
OpenStack 컨테이너가 실행 중인 기본 호스트의 디렉터리 /etc/kolla/kolla-toolbox
가 마운트되고 컨테이너 내부에서와 같이 /var/lib/kolla/config_files
액세스할 수 있습니다 kolla_toolbox
. OpenStack 명령을 실행할 때 다른 파일이 필요한 경우(예: 명령에 openstack image create
이미지 파일이 필요한 경우) 관련 파일을 /etc/kolla/kolla-toolbox
기본 호스트의 디렉터리에 복사하여 컨테이너 내에서 사용할 수 있습니다.
다음 예제에서는 이러한 방식으로 OpenStack 명령을 실행하는 방법을 보여줍니다.
# ON BASE HOST OF OPENSTACK CONTROL NODE cd /etc/kolla/kolla-toolbox wget http://download.cirros-cloud.net/0.4.0/cirros-0.4.0-x86_64-disk.img docker exec -it kolla_toolbox bash # NOW YOU ARE INSIDE THE KOLLA_TOOLBOX CONTAINER (kolla-toolbox)[ansible@server1 /]$ source /var/lib/kolla/config_files/admin-openrc.sh (kolla-toolbox)[ansible@server1 /]$ cd /var/lib/kolla/config_files (kolla-toolbox)[ansible@server1 /var/lib/kolla/config_files]$ openstack image create cirros2 --disk-format qcow2 --public --container-format bare --file cirros-0.4.0-x86_64-disk.img +------------------+------------------------------------------------------+ | Field | Value | +------------------+------------------------------------------------------+ | checksum | 443b7623e27ecf03dc9e01ee93f67afe | | container_format | bare | | created_at | 2018-03-29T21:37:48Z | | disk_format | qcow2 | | file | /v2/images/e672b536-0796-47b3-83a6-df48a5d074be/file | | id | e672b536-0796-47b3-83a6-df48a5d074be | | min_disk | 0 | | min_ram | 0 | | name | cirros2 | | owner | 371bdb766278484bbabf868cf7325d4c | | protected | False | | schema | /v2/schemas/image | | size | 12716032 | | status | active | | tags | | | updated_at | 2018-03-29T21:37:50Z | | virtual_size | None | | visibility | public | +------------------+------------------------------------------------------+ (kolla-toolbox)[ansible@server1 /var/lib/kolla/config_files]$ openstack image list +--------------------------------------+---------+--------+ | ID | Name | Status | +--------------------------------------+---------+--------+ | e672b536-0796-47b3-83a6-df48a5d074be | cirros2 | active | | 57e6620e-796a-40ee-ae6e-ea1daa253b6c | cirros2 | active | +--------------------------------------+---------+--------+