OpenStack 환경에서 Ansible Deployer In-Service 소프트웨어 업그레이드 절차를 사용하여 21.4.L2까지 Contrail Networking 업그레이드
이 절차는 언제 사용합니까?
업그레이드 절차를 수행하기 전에 컨테이너에 Docker를 직렬로 설치합니다. 그러나 스크립트를 통해 Docker와 병렬로 계산을 업그레이드할 수 있습니다. 각 Docker 호스트를 업그레이드한 후 Contrail 및 서비스의 상태를 확인합니다. contrail-status 보고서의 모든 서비스가 제대로 실행될 때까지 다음 호스트에서 업그레이드를 진행하지 마십시오.
ZIU(Zero Impact Upgrade) 절차를 사용하여 Openstack 오케스트레이션을 사용하는 대부분의 환경에서 네트워크 중단을 최소화하면서 Contrail Networking을 업그레이드하는 것이 좋습니다.
ZIU 업그레이드를 수행하려면 Ansible Deployer를 사용하여 제로 임팩트 Contrail Networking 업그레이드를 수행하는 방법의 지침을 따르십시오. Red Hat Openstack 13 또는 16.1을 실행 중인 경우 Red Hat Openstack 13을 사용하는 환경에서 제로 영향 업그레이드 프로세스를 사용하여 Contrail 네트워킹 업데이트 또는 Red Hat Openstack 16.1을 사용하는 환경에서 제로 영향 업그레이드 프로세스를 사용하여 Contrail 네트워킹 업데이트를 참조하십시오.
이 문서의 절차에서는 Openstack 오케스트레이션을 사용하는 환경에서 Ansible 배포자를 사용하여 네트워크 중단을 최소화하면서 Contrail Networking을 업그레이드하는 방법도 제공합니다.
이 문서의 절차는 Contrail Networking을 릴리스 3.2 이상에서 릴리스 5.0 이상으로 업그레이드하기 위한 것으로 검증되었습니다. 이 업그레이드의 시작 Contrail 릴리스는 모든 Contrail Networking 4, 5, 19, 20, 21에서 21.4.L1 릴리스를 포함하여 릴리스 3.2 이후의 모든 Contrail Networking 릴리스가 될 수 있습니다. 이 업그레이드의 대상 릴리스는 모든 Contrail Networking 5, 19, 20, 21부터 21.4.L2 릴리스까지 포함하여 릴리스 5.0 이후의 모든 Contrail Networking 릴리스가 될 수 있습니다.
Contrail Networking 릴리스 시작 |
업그레이드된 대상 Contrail Networking 릴리스 |
---|---|
릴리스 3.2 이상 모든 릴리스 4 모든 릴리스 5 모든 릴리스 19 모든 릴리스 20 21.4.L2 이전의 모든 릴리스 21 |
모든 릴리스 5 모든 릴리스 19 모든 릴리스 20 21.4.L2까지 모든 릴리스 21 |
Contrail ISSU(In-Service Software Upgrade) 개요
설치된 버전이 Contrail 릴리스 3.2 이상인 경우 ISSU(In-Service Software Upgrade)를 수행하여 Ansible 배포자를 통해 이 업그레이드를 수행할 수 있습니다. ISSU를 수행할 때 Contrail 컨트롤러 클러스터는 병렬 설정과 나란히 업그레이드되고 컴퓨팅 노드는 현재 위치에서 업그레이드됩니다.
업그레이드 프로세스를 진행하기 전에 현재 시스템의 스냅샷을 생성하는 것이 좋습니다.
Contrail Ansible 구축자를 사용하여 ISSU를 수행하는 절차는 이전 ISSU 업그레이드 절차와 유사합니다.
이 Contrail ansible deployer ISSU 절차에는 OpenStack 업그레이드 단계가 포함되어 있지 않습니다. OpenStack 버전 업그레이드가 필요한 경우 해당 OpenStack 절차를 사용하여 수행해야 합니다.
요약하면 ISSU 프로세스는 다음과 같은 순서로 구성됩니다.
새 클러스터를 배포합니다.
새 클러스터와 이전 클러스터를 동기화합니다.
계산 노드를 업그레이드합니다.
동기화를 완료하고 업그레이드를 완료합니다.
필수 구성 요소
Contrail ansible deployer ISSU 절차를 사용하려면 다음과 같은 사전 요구 사항이 필요합니다.
Contrail의 이전 버전이 설치되어 있어야 하며, 릴리스 3.2 이전 버전이 설치되어 있어야 합니다.
OpenStack 컨트롤러 및 컴퓨팅 노드와 Contrail 노드가 있습니다.
OpenStack은 패키지에서 설치해야 합니다.
Contrail과 OpenStack은 서로 다른 노드에 설치해야 합니다.
Ubuntu 14.04를 사용하는 컴퓨팅 노드에 대한 업그레이드는 지원되지 않습니다. 컴퓨팅 노드는 먼저 Ubuntu 16.04로 업그레이드해야 합니다.
Ansible Deployer ISSU 절차를 위한 Contrail System 준비
요약하면 다음은 Contrail Ansible Deployer ISSU 절차의 시스템 준비 단계에 대한 일반적인 단계입니다.
-
Contrail ansible deployer를 사용하여 새 버전의 Contrail을 구축하되, 다음 Contrail 컨트롤러 서비스만 포함해야 합니다.
-
구성
-
컨트롤
-
분석
-
데이터베이스
-
rmq, kafka 및 zookeeper와 같은 추가 지원 서비스. (vrouter 서비스는 나중에 이전 계산 노드에 배포됩니다.)
참고:설정을 위해 keystone 권한 부여 정보를 제공해야 합니다.
-
-
구축이 완료되면 Contrail 웹 인터페이스에 로그인하여 작동하는지 확인할 수 있습니다.
ansible deployer를 사용하여 새 컨트롤러를 배포하는 자세한 단계는 다음과 같습니다.
-
새 컨트롤러를 구축하려면 주니퍼 네트웍스에서 프로비저닝 호스트로 contrail-ansible-deployer-release-tag.tgz 를 다운로드합니다.
-
새 컨트롤러 파일 config/instances.yaml 은 예제와 같이 변수 대신 실제 값을 사용하여 다음과 같이 나타납니다.
provider_config: bms: domainsuffix: local ssh_user: user ssh_pwd: password instances: server1: ip: controller 1 ip provider: bms roles: analytics: null analytics_database: null config: null config_database: null control: null webui: null contrail_configuration: CONTROLLER_NODES: controller ip-s from api/mgmt network CONTROL_NODES: controller ip-s from ctrl/data network AUTH_MODE: keystone KEYSTONE_AUTH_ADMIN_TENANT: old controller's admin's tenant KEYSTONE_AUTH_ADMIN_USER: old controller's admin's user name KEYSTONE_AUTH_ADMIN_PASSWORD: password for admin user KEYSTONE_AUTH_HOST: keystone host/ip of old controller KEYSTONE_AUTH_URL_VERSION: "/v3" KEYSTONE_AUTH_USER_DOMAIN_NAME: user's domain in case of keystone v3 KEYSTONE_AUTH_PROJECT_DOMAIN_NAME: project's domain in case of keystone v3 RABBITMQ_NODE_PORT: 5673 IPFABRIC_SERVICE_HOST: metadata service host/ip of old controller AAA_MODE: cloud-admin METADATA_PROXY_SECRET: secret phrase that is used in old controller kolla_config: kolla_globals: kolla_internal_vip_address: keystone host/ip of old controller kolla_external_vip_address: keystone host/ip of old controller
-
마지막으로 ansible 플레이북을 실행하여 새 컨트롤러를 배포합니다.
ansible-playbook -v -e orchestrator=none -i inventory/ playbooks/configure_instances.yml ansible-playbook -v -e orchestrator=openstack -i inventory/ playbooks/install_contrail.yml
이러한 명령을 성공적으로 완료하면 새 컨트롤러가 작동 중이어야 합니다.
제어 노드 프로비저닝 및 동기화 단계 수행
요약하면 다음은 Contrail Ansible Deployer ISSU 절차의 노드 프로비저닝 및 동기화 단계에 대한 일반적인 단계입니다.
이전 클러스터에 새 제어 노드를 프로비저닝하고 새 클러스터에 이전 제어 노드를 프로비저닝합니다.
모든 노드의 새 클러스터에서 다음 컨테이너를 중지합니다.
contrail-device-manager
contrail-schema-transformer
contrail-svcmonitor
새 컨트롤러를 유지 관리 모드로 전환하여 새 클러스터에서 컴퓨팅을 프로비저닝하지 않도록 합니다.
ISSU를 위한 구성 파일을 준비합니다.
ISSU 패키지에서 사전 동기화 스크립트를 실행합니다.
ISSU 패키지의 run-sync 스크립트를 백그라운드 모드로 실행합니다.
제어 노드를 프로비저닝하고 동기화를 수행하는 세부 단계는 다음과 같습니다.
-
새 클러스터에서 이전 제어 노드를 쌍으로 구성합니다. 모든 config-api 컨테이너에서 실행하는 것이 좋습니다.
config_api_image=`docker ps | awk '/config-api/{print $1}' | head`
-
각 이전 제어 노드에 대해 다음 명령을 실행하고 표시된 경우 실제 값을 대체합니다.
docker exec -it $config_api_image /bin/bash -c "LOG_LEVEL=SYS_NOTICE source /common.sh ; python /opt/contrail/utils/provision_control.py --host_name hostname of old control node --host_ip IP of old control node --api_server_ip $(hostname -i) --api_server_port 8082 --oper add --router_asn 64512 --ibgp_auto_mesh \$AUTH_PARAMS"
-
이전 클러스터의 새 제어 노드를 유사한 명령(특정 구문은 이전 클러스터의 배포 방법에 따라 다름)과 쌍으로 구성하여 표시된 경우 실제 값으로 다시 대체합니다.
python /opt/contrail/utils/provision_control.py --host_name new controller hostname --host_ip new controller IP --api_server_ip old api-server IP/VIP --api_server_port 8082 --oper add --admin_user admin --admin_password password --admin_tenant_name admin --router_asn 64512 --ibgp_auto_mesh
-
모든 컨트롤러 노드의 새 클러스터에서 contrail-device-manager, contrail-schema-transformer 및 contrail-svcmonitor에 대한 모든 컨테이너를 중지합니다.
docker stop config_devicemgr_1 docker stop config_schema_1 docker stop config_svcmonitor_1
-
Kolla/Juju 설정의 경우 다음 단계를 수행하여 contrail-device-manager 컨테이너가 중지된 후 Contrail rabbitmq에서 contrail-device-manager 대기열을 삭제합니다.
참고:하나의 새 컨트롤러에서만 이 단계에 나열된 명령을 실행합니다.
- Contrail rabbitmq 컨테이너를 입력합니다.
docker exec -it config_database_rabbitmq_1 bash
-
contrail-device-manager 대기열의 이름을 찾습니다.
rabbitmqctl list_queues | grep -F device_manager
-
contrail-device-manager 대기열을 삭제합니다.
rabbitmqctl delete_queue <device_manager.queue>
RHOSP 설정의 경우 contrail-device-manager 컨테이너가 중지된 후 Contrail rabbitmq에서 contrail-device-manager 대기열을 삭제하려면 다음 단계를 수행합니다.
- Contrail rabbitmq 컨테이너를 입력합니다.
podman exec -it contrail_config_rabbitmq bash
-
contrail-device-manager 대기열의 이름을 찾습니다.
rabbitmqctl list_queues | grep -F device_manager
-
contrail-device-manager 대기열을 삭제합니다.
rabbitmqctl delete_queue <device_manager.queue>
- Contrail rabbitmq 컨테이너를 입력합니다.
이러한 다음 단계는 새 컨트롤러에서 수행해야 합니다. 그런 다음 ISSU를 위해 준비된 구성이 실행됩니다. (현재로서는 수동 준비만 가능합니다.)
다양한 배포에서 이전 카산드라는 포트 9160 또는 9161을 사용할 수 있습니다. 이전 컨트롤러 노드의 이전 서비스에 대한 구성 세부 정보는 / etc/contrail-contrail-api.conf 파일에서 확인할 수 있습니다.
구성은 다음과 같이 나타나며 로컬에 저장할 수 있습니다.
[DEFAULTS] # details about oldrabbit old_rabbit_user = contrail old_rabbit_password = ab86245f4f3640a29b700def9e194f72 old_rabbit_q_name = vnc-config.issu-queue old_rabbit_vhost = contrail old_rabbit_port = 5672 old_rabbit_address_list = ip-addresses # details about new rabbit # new_rabbit_user = rabbitmq # new_rabbit_password = password # new_rabbit_ha_mode = new_rabbit_q_name = vnc-config.issu-queue new_rabbit_vhost = / new_rabbit_port = 5673 new_rabbit_address_list = ip-addresses # details about other old/new services old_cassandra_user = controller old_cassandra_password = 04dc0540b796492fad6f7cbdcfb18762 old_cassandra_address_list = ip-address:9161 old_zookeeper_address_list = ip-address:2181 new_cassandra_address_list = ip-address:9161 ip-address:9161 ip-address:9161 new_zookeeper_address_list = ip-address:2181 # details about new controller nodes new_api_info = {"ip-address": [("root"), ("password")], "ip-address": [("root"), ("password")], "ip-address": [("root"), ("password")]}
config-api 이미지 ID를 감지합니다.
image_id=`docker images | awk '/config-api/{print $3}' | head -1`
사전 동기화를 실행합니다.
docker run --rm -it --network host -v $(pwd)/contrail-issu.conf:/etc/contrail/contrail-issu.conf --entrypoint /bin/bash -v /root/.ssh:/root/.ssh $image_id -c "/usr/bin/contrail-issu-pre-sync -c /etc/contrail/contrail-issu.conf"
run-synchronization을 실행합니다.
docker run --rm --detach -it --network host -v $(pwd)/contrail-issu.conf:/etc/contrail/contrail-issu.conf --entrypoint /bin/bash -v /root/.ssh:/root/.ssh --name issu-run-sync $image_id -c "/usr/bin/contrail-issu-run-sync -c /etc/contrail/contrail-issu.conf"
run-sync 프로세스의 로그를 확인합니다. 이렇게 하려면 run-sync 컨테이너를 엽니다.
docker exec -it issu-run-sync /bin/bash cat /var/log/contrail/issu_contrail_run_sync.log
컴퓨팅 노드를 새 클러스터로 전송
요약하자면, 다음은 Contrail ansible deployer ISSU 절차의 노드 전송 단계에 대한 일반적인 단계입니다.
컴퓨팅 노드를 새 클러스터로 전송하기 전에 Docker가 성공적으로 업데이트되었는지 확인합니다.
-
새 클러스터로 전송할 컴퓨팅 노드를 선택합니다. 그러면 계산 노드의 가상 머신이 선택됩니다.
-
VM(Virtual Machines)을 한 컴퓨팅 노드에서 다른 컴퓨팅 노드로 수동으로 마이그레이션합니다. 단계는 다음과 같습니다.
참고:이 절차는 실시간 마이그레이션을 수행할 수 없는 경우에 유용합니다.
-
마이그레이션할 VM 및 해당 호스트를 식별합니다. 다음 명령을 실행하여 VM을 중지합니다.
openstack server stop <vm-uuid>
-
VM 인스턴스가 시작된 소스 컴퓨팅 노드에서 VM 디스크 이미지 위치를 식별합니다. 일반적으로 디스크 이미지 위치는 다음과 같습니다.
/var/lib/docker/volumes/nova_compute/_data/instances/<vm-UUID>
-
이 디렉터리를 대상 컴퓨팅 노드에 복사합니다.
-
대상 계산 노드에서 다음 명령을 실행하여 이 디렉터리의 사용 권한을 변경합니다.
chown -R 42436:42436 /var/lib/docker/volumes/nova_compute/_data/instances/<vm-UUID>
-
이 인스턴스의 nova 데이터베이스를 새 호스트로 업데이트합니다.
docker exec -it mariadb bash mysql -u <username> -p <password> nova update instances set node='new host fqname', host='new hostname' where uuid='<VM-UUID>'
예제:
(mariadb)[mysql@nodem1 /]$ mysql -u root -p contrail123 nova MariaDB [nova]> update instances -> set node='nodem2.englab.juniper.net', host='nodem2' -> where uuid='b7178be6-d4da-4074-9124-d246fa3a2105' -> ;
-
다음 명령을 실행하여 VM을 시작합니다.
openstack server start <vm-uuid>
-
-
Contrail 릴리스 3.x의 경우 다음과 같이 노드에서 Contrail을 제거합니다.
-
vrouter-agent 서비스를 중지합니다.
-
vhost0
인터페이스를 제거합니다. -
물리적 인터페이스를 아래로 전환한 다음 위로 전환합니다.
-
커널에서 vrouter.ko 모듈을 제거합니다.
-
-
Contrail 릴리스 4.x 이상에서는 다음과 같이 노드에서 Contrail을 제거하십시오.
-
에이전트 컨테이너를 중지합니다.
-
물리적 인터페이스를 복원합니다.
-
-
roles
vrouter
openstack_legacy_compute
와 함께 instances.yml에 필요한 노드를 추가합니다. -
Contrail ansible 배포자를 실행하여 새 vrouter를 구축하고 기존 컴퓨팅 서비스를 구성합니다.
-
모든 새 컴퓨팅 노드에는 다음이 포함됩니다.
-
컬렉터 설정이 새 Contrail 클러스터를 가리켰습니다
-
Control/DNS 노드가 새 Contrail 클러스터를 가리켰습니다
-
vnc_api_lib.ini의 config-api 설정은 새로운 Contrail 클러스터를 가리켰습니다
-
-
(선택 사항) 전송된 노드에서 테스트 워크로드를 실행하여 새 vrouter-agent가 올바르게 작동하는지 확인합니다.
필요한 경우 다음 단계에 따라 컴퓨팅 노드를 롤백합니다.
-
컴퓨팅 노드에서 워크로드를 이동합니다.
-
새 Contrail 컨테이너를 중지합니다.
-
네트워크 구성이 성공적으로 되돌려졌는지 확인합니다.
-
해당 버전의 구축 방법을 사용하여 이전 버전의 Contrail을 구축합니다.
계산 노드를 새 클러스터로 전송하는 자세한 단계는 다음과 같습니다.
선택한 컴퓨팅 노드에서 워크로드를 이동한 후에는 이전 버전의 contrail-agent를 제거해야 합니다. 예를 들어, 호스트에 직접 설치된 Ubuntu 16.04 및 vrouter-agent의 경우 이전 contrail-agent를 제거하는 단계는 다음과 같습니다.
# stop services systemctl stop contrail-vrouter-nodemgr systemctl stop contrail-vrouter-agent # remove packages apt-get purge -y contrail* # restore original interfaces definition cd /etc/network/interfaces.d/ cp 50-cloud-init.cfg.save 50-cloud-init.cfg rm vrouter.cfg # restart networking systemctl restart networking.service # remove old kernel module rmmod vrouter # maybe you need to restore default route ip route add 0.0.0.0/0 via 10.0.10.1 dev ens3
다른 종류의 배포의 경우 vrouter-agent 및 vrouter-agent-nodemgr 컨테이너를 제거하고 vhost0 인터페이스를 사용하지 않도록 설정합니다.
-
새 인스턴스는 vrouter 및 openstack_compute_legacy의 두 가지 역할로 instances.yaml 에 추가되어야 합니다. 컴퓨팅 노드를 다시 프로비저닝하지 않으려면 유지 관리 모드를 로
TRUE
설정합니다. 예를 들어:instances: server10: ip: compute 10 ip provider: bms roles: vrouter: MAINTENANCE_MODE: TRUE VROUTER_ENCRYPTION: FALSE openstack_compute_legacy: null
instances.yaml 노드 정의에 업그레이드하려는 컴퓨팅 노드만 포함되어 있는지 확인합니다. 다른 모든 노드는 주석 처리해야 합니다.
-
ansible 플레이북을 실행합니다.
ansible-playbook -v -e orchestrator=none -e config_file=/root/contrail-ansible-deployer/instances.yaml playbooks/configure_instances.yml ansible-playbook -v -e orchestrator=openstack -e config_file=/root/contrail-ansible-deployer/instances.yaml playbooks/install_contrail.yml
-
컴퓨팅 노드의 contrail-status는 다음과 같이 나타납니다.
vrouter kernel module is PRESENT == Contrail vrouter == nodemgr: active agent: initializing (No Configuration for self)
- 업그레이드가 완료된 후 모든 새 컨트롤러 노드에서 contrail-control을 다시 시작합니다.
docker restart control_control_1
-
컴퓨팅 노드를 업그레이드한 후 SSL핸드셰이크 문제로 인해 XMPP가 다운됩니다. 예제:
vrouter kernel module is PRESENT == Contrail vrouter == nodemgr: active agent: initializing (XMPP:control-node:10.10.10.1, XMPP:dns-server:10.10.10.1 connection down, No Configuration for self)
XMPP를 불러오는 단계는 다음과 같습니다.
- 새 제어 노드에서 업그레이드된 컴퓨팅 노드로 다음 두 파일을 복사합니다.
/etc/contrail/ssl/private/server-privkey.pem /etc/contrail/ssl/certs/server.pem
-
업그레이드된 컴퓨팅 노드의 VR 외부 에이전트를 다시 시작합니다.
docker restart vrouter_vrouter-agent_1
- 새 제어 노드에서 업그레이드된 컴퓨팅 노드로 다음 두 파일을 복사합니다.
-
새 컴퓨팅 노드에서 실행하여
contrail-status
상태를 확인합니다. 이제 모든 구성 요소가 활성화되어야 합니다. 또한 새 컴퓨팅 노드로 AZ/aggregates를 생성하여 새 인스턴스의 상태를 확인하고 일부 테스트 워크로드를 실행하여 올바르게 작동하는지 확인할 수 있습니다.
Contrail Ansible Deployer ISSU 프로세스 마무리
다음과 같이 Contrail Ansible Deployer ISSU를 마무리합니다.
-
issu-run-sync 컨테이너를 중지합니다.
docker rm -f issu-run-sync
-
사후 동기화 명령을 실행합니다.
docker run --rm -it --network host -v $(pwd)/contrail-issu.conf:/etc/contrail/contrail-issu.conf --entrypoint /bin/bash -v /root/.ssh:/root/.ssh --name issu-run-sync $image_id -c "/usr/bin/contrail-issu-post-sync -c /etc/contrail/contrail-issu.conf" docker run --rm -it --network host -v $(pwd)/contrail-issu.conf:/etc/contrail/contrail-issu.conf --entrypoint /bin/bash -v /root/.ssh:/root/.ssh --name issu-run-sync $image_id -c "/usr/bin/contrail-issu-zk-sync -c /etc/contrail/contrail-issu.conf"
-
모든 새 컨트롤러 노드에서 다음 명령을 실행합니다.
docker-compose -f /etc/contrail/config/docker-compose.yaml restart api docker-compose -f /etc/contrail/config/docker-compose.yaml up -d
-
컨테이너를 다시 시작합니다.
docker restart config_api_1
-
유지 관리 모드를 해제하고 이전에 중지된 모든 컨테이너를 시작합니다. 이렇게 하려면 instances.yaml의 항목을
MAINTENANCE_MODE
FALSE로 설정한 다음, 배포 노드에서 다음 명령을 실행합니다.ansible-playbook -v -e orchestrator=openstack -i inventory/ playbooks/install_contrail.yml
이 단계에서는 컴퓨팅 노드만 instances.yaml에 포함되어야 하며 다른 노드는 주석 처리해야 합니다.
-
기존 Contrail 컨트롤러를 정리하고 제거합니다. config-api 컨테이너에서 호출된 provision-issu.py 스크립트를 issu.conf 구성과 함께 사용합니다. 자격 증명 변수 및 API 서버 IP를 표시된 대로 적절한 값으로 바꿉니다.
[DEFAULTS] db_host_info={"ip-address": "node-ip-address or hostname", "ip-address": "node-ip-address or hostname", "ip-address": "node-ip-address or hostname"} config_host_info={"ip-address": "node-ip-address or hostname", "ip-address": "node-ip-address or hostname", "ip-address": "node-ip-address or hostname"} analytics_host_info={"ip-address": "node-ip-address or hostname", "ip-address": "node-ip-address or hostname", "ip-address": "node-ip-address or hostname"} control_host_info={"ip-address": "node-ip-address or hostname", "ip-address": "node-ip-address or hostname", "ip-address": "node-ip-address or hostname"} admin_password = <admin password> admin_tenant_name = <admin tenant> admin_user = <admin username> api_server_ip= <any IP of new config-api controller> api_server_port=8082
참고:현재 이전 단계는 호스트 이름에서만 작동하며 IP 주소에서는 작동하지 않습니다.
-
컨트롤러 노드에서 다음 명령을 실행합니다.
참고:모든 *host_info 매개 변수에는 새 호스트 목록이 포함되어야 합니다.
docker cp issu.conf config_api_1:issu.conf docker exec -it config_api_1 python /opt/contrail/utils/provision_issu.py -c issu.conf
-
다른 서비스가 없는 경우 서버를 정리할 수 있습니다.
- 이전 컨트롤러에서 다음 경로로 이동합니다.
[root@nodem1 ~]# cd /etc/kolla/neutron-server/ [root@nodem1 neutron-server]# pwd /etc/kolla/neutron-server [root@nodem1 neutron-server]# cat ContrailPlugin.ini [APISERVER] api_server_port = 8082 api_server_ip = <old_controller_ip> multi_tenancy = True contrail_extensions = ipam:neutron_plugin_contrail.plugins.opencontrail.contrail_plugin_ipam.NeutronPluginContrailIpa m,policy:neutron_plugin_contrail.plugins.opencontrail.contrail_plugin_policy.NeutronPluginContr ailPolicy,routetable:neutron_plugin_contrail.plugins.opencontrail.contrail_plugin_vpc.NeutronPluginContrailVpc ,contrail:None,service-interface:None,vf-binding:None [COLLECTOR] analytics_api_ip = <old_controller_ip> analytics_api_port = 8081 [keystone_authtoken] auth_host = <old_controller_ip> auth_port = 5000 auth_protocol = http admin_user = admin admin_password = password admin_tenant_name = admin insecure = True region_name = RegionOne
-
api_server_ip 및 analytics_api_ip 주소를 새 컨트롤러 IP 주소로 수정합니다.
[root@nodem1 neutron-server]# pwd /etc/kolla/neutron-server [root@nodem1 neutron-server]# cat ContrailPlugin.ini [APISERVER] api_server_port = 8082 api_server_ip = <new_controller_ip> multi_tenancy = True contrail_extensions = ipam:neutron_plugin_contrail.plugins.opencontrail.contrail_plugin_ipam.NeutronPluginContrailIpa m,policy:neutron_plugin_contrail.plugins.opencontrail.contrail_plugin_policy.NeutronPluginContr ailPolicy,routetable:neutron_plugin_contrail.plugins.opencontrail.contrail_plugin_vpc.NeutronPluginContrailVpc ,contrail:None,service-interface:None,vf-binding:None [COLLECTOR] analytics_api_ip = <new_controller_ip> analytics_api_port = 8081 [keystone_authtoken] auth_host = <keystone_ip_addr> auth_port = 5000 auth_protocol = http admin_user = admin admin_password = password admin_tenant_name = admin insecure = True region_name = RegionOne
-
이전 컨트롤러에서 neutron-server 컨테이너를 다시 시작합니다.
[root@nodem1]# docker restart neutron_server
-
이전 제어 노드의 neutron_server 컨테이너로 이동합니다. ContrailPlugin.ini 파일에 새 컨트롤러 IP가 포함되어 있는지 확인합니다. 새 컨트롤러 IP를 포함해야 합니다.
[root@nodem1 ~]# docker exec -it neutron_server bash (neutron-server)[neutron@nodem1 /]$ cd /etc/neutron/plugins/opencontrail (neutron-server)[neutron@nodem1 /etc/neutron/plugins/opencontrail]$ cat ContrailPlugin.ini [APISERVER] api_server_port = 8082 api_server_ip = <new_controller_ip> multi_tenancy = True contrail_extensions = ipam:neutron_plugin_contrail.plugins.opencontrail.contrail_plugin_ipam.NeutronPluginContrailIpa m,policy:neutron_plugin_contrail.plugins.opencontrail.contrail_plugin_policy.NeutronPluginContr ailPolicy,routetable:neutron_plugin_contrail.plugins.opencontrail.contrail_plugin_vpc.NeutronPluginContrailVpc ,contrail:None,service-interface:None,vf-binding:None [COLLECTOR] analytics_api_ip = <new_controller_ip> analytics_api_port = 8081 [keystone_authtoken] auth_host = <keystone_ip_addr> auth_port = 5000 auth_protocol = http admin_user = admin admin_password = password admin_tenant_name = admin insecure = True region_name = RegionOne
-
열 구성에도 동일한 변경이 필요합니다. 매개 변수를
[clients_contrail]/api_server
찾아 새 config-api IP 주소 목록을 가리키도록 변경합니다.
릴리스 21.4.L2의 링크 루프 문제 해결
Contrail Networking 릴리스 21.4.L2의 ansible 배포자는 contrail 구성 노드에 있는 디렉터리에 링크 루프를 /var/log/contrail
도입합니다. 이는 Contrail Networking 릴리스 21.4.L2 ansible deployer가 시작될 때마다 발생합니다. 언급된 재귀로 인해 ansible deployer 플레이북을 다시 실행하지 못합니다. 이 문제는 Contrail Networking 릴리스 21.4.L3에서 해결되었습니다. 그러나 Contrail Networking 릴리스 21.4.L2의 경우 지정된 해결 방법을 따르려면 수동 개입이 필요합니다.
해결 방법: 모든 Contrail Config 노드에서 잘못된 symlink를 수동으로 제거합니다.
sudo unlink /var/log/contrail/config-database-rabbitmq/config-database-rabbitmq