Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

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 릴리스가 될 수 있습니다.

표 1: 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 프로세스는 다음과 같은 순서로 구성됩니다.

  1. 새 클러스터를 배포합니다.

  2. 새 클러스터와 이전 클러스터를 동기화합니다.

  3. 계산 노드를 업그레이드합니다.

  4. 동기화를 완료하고 업그레이드를 완료합니다.

필수 구성 요소

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 절차의 시스템 준비 단계에 대한 일반적인 단계입니다.

  1. Contrail ansible deployer를 사용하여 새 버전의 Contrail을 구축하되, 다음 Contrail 컨트롤러 서비스만 포함해야 합니다.

    • 구성

    • 컨트롤

    • 분석

    • 데이터베이스

    • rmq, kafka 및 zookeeper와 같은 추가 지원 서비스. (vrouter 서비스는 나중에 이전 계산 노드에 배포됩니다.)

    참고:

    설정을 위해 keystone 권한 부여 정보를 제공해야 합니다.

  2. 구축이 완료되면 Contrail 웹 인터페이스에 로그인하여 작동하는지 확인할 수 있습니다.

ansible deployer를 사용하여 새 컨트롤러를 배포하는 자세한 단계는 다음과 같습니다.

  1. 새 컨트롤러를 구축하려면 주니퍼 네트웍스에서 프로비저닝 호스트로 contrail-ansible-deployer-release-tag.tgz 를 다운로드합니다.

  2. 새 컨트롤러 파일 config/instances.yaml 은 예제와 같이 변수 대신 실제 값을 사용하여 다음과 같이 나타납니다.

  3. 마지막으로 ansible 플레이북을 실행하여 새 컨트롤러를 배포합니다.

이러한 명령을 성공적으로 완료하면 새 컨트롤러가 작동 중이어야 합니다.

제어 노드 프로비저닝 및 동기화 단계 수행

요약하면 다음은 Contrail Ansible Deployer ISSU 절차의 노드 프로비저닝 및 동기화 단계에 대한 일반적인 단계입니다.

  1. 이전 클러스터에 새 제어 노드를 프로비저닝하고 새 클러스터에 이전 제어 노드를 프로비저닝합니다.

  2. 모든 노드의 새 클러스터에서 다음 컨테이너를 중지합니다.

    • contrail-device-manager

    • contrail-schema-transformer

    • contrail-svcmonitor

  3. 새 컨트롤러를 유지 관리 모드로 전환하여 새 클러스터에서 컴퓨팅을 프로비저닝하지 않도록 합니다.

  4. ISSU를 위한 구성 파일을 준비합니다.

  5. ISSU 패키지에서 사전 동기화 스크립트를 실행합니다.

  6. ISSU 패키지의 run-sync 스크립트를 백그라운드 모드로 실행합니다.

제어 노드를 프로비저닝하고 동기화를 수행하는 세부 단계는 다음과 같습니다.

  1. 새 클러스터에서 이전 제어 노드를 쌍으로 구성합니다. 모든 config-api 컨테이너에서 실행하는 것이 좋습니다.

  2. 각 이전 제어 노드에 대해 다음 명령을 실행하고 표시된 경우 실제 값을 대체합니다.

  3. 이전 클러스터의 새 제어 노드를 유사한 명령(특정 구문은 이전 클러스터의 배포 방법에 따라 다름)과 쌍으로 구성하여 표시된 경우 실제 값으로 다시 대체합니다.

  4. 모든 컨트롤러 노드의 새 클러스터에서 contrail-device-manager, contrail-schema-transformer 및 contrail-svcmonitor에 대한 모든 컨테이너를 중지합니다.

  5. Kolla/Juju 설정의 경우 다음 단계를 수행하여 contrail-device-manager 컨테이너가 중지된 후 Contrail rabbitmq에서 contrail-device-manager 대기열을 삭제합니다.

    참고:

    하나의 새 컨트롤러에서만 이 단계에 나열된 명령을 실행합니다.

    1. Contrail rabbitmq 컨테이너를 입력합니다.
    2. contrail-device-manager 대기열의 이름을 찾습니다.

    3. contrail-device-manager 대기열을 삭제합니다.

    RHOSP 설정의 경우 contrail-device-manager 컨테이너가 중지된 후 Contrail rabbitmq에서 contrail-device-manager 대기열을 삭제하려면 다음 단계를 수행합니다.

    1. Contrail rabbitmq 컨테이너를 입력합니다.
    2. contrail-device-manager 대기열의 이름을 찾습니다.

    3. contrail-device-manager 대기열을 삭제합니다.

이러한 다음 단계는 새 컨트롤러에서 수행해야 합니다. 그런 다음 ISSU를 위해 준비된 구성이 실행됩니다. (현재로서는 수동 준비만 가능합니다.)

참고:

다양한 배포에서 이전 카산드라는 포트 9160 또는 9161을 사용할 수 있습니다. 이전 컨트롤러 노드의 이전 서비스에 대한 구성 세부 정보는 / etc/contrail-contrail-api.conf 파일에서 확인할 수 있습니다.

구성은 다음과 같이 나타나며 로컬에 저장할 수 있습니다.

  1. config-api 이미지 ID를 감지합니다.

  2. 사전 동기화를 실행합니다.

  3. run-synchronization을 실행합니다.

  4. run-sync 프로세스의 로그를 확인합니다. 이렇게 하려면 run-sync 컨테이너를 엽니다.

컴퓨팅 노드를 새 클러스터로 전송

요약하자면, 다음은 Contrail ansible deployer ISSU 절차의 노드 전송 단계에 대한 일반적인 단계입니다.

참고:

컴퓨팅 노드를 새 클러스터로 전송하기 전에 Docker가 성공적으로 업데이트되었는지 확인합니다.

  1. 새 클러스터로 전송할 컴퓨팅 노드를 선택합니다. 그러면 계산 노드의 가상 머신이 선택됩니다.

  2. VM(Virtual Machines)을 한 컴퓨팅 노드에서 다른 컴퓨팅 노드로 수동으로 마이그레이션합니다. 단계는 다음과 같습니다.

    참고:

    이 절차는 실시간 마이그레이션을 수행할 수 없는 경우에 유용합니다.

    1. 마이그레이션할 VM 및 해당 호스트를 식별합니다. 다음 명령을 실행하여 VM을 중지합니다.

    2. VM 인스턴스가 시작된 소스 컴퓨팅 노드에서 VM 디스크 이미지 위치를 식별합니다. 일반적으로 디스크 이미지 위치는 다음과 같습니다.

    3. 이 디렉터리를 대상 컴퓨팅 노드에 복사합니다.

    4. 대상 계산 노드에서 다음 명령을 실행하여 이 디렉터리의 사용 권한을 변경합니다.

    5. 이 인스턴스의 nova 데이터베이스를 새 호스트로 업데이트합니다.

      예제:

    6. 다음 명령을 실행하여 VM을 시작합니다.

  3. Contrail 릴리스 3.x의 경우 다음과 같이 노드에서 Contrail을 제거합니다.

    • vrouter-agent 서비스를 중지합니다.

    • vhost0 인터페이스를 제거합니다.

    • 물리적 인터페이스를 아래로 전환한 다음 위로 전환합니다.

    • 커널에서 vrouter.ko 모듈을 제거합니다.

  4. Contrail 릴리스 4.x 이상에서는 다음과 같이 노드에서 Contrail을 제거하십시오.

    • 에이전트 컨테이너를 중지합니다.

    • 물리적 인터페이스를 복원합니다.

  5. roles vrouter openstack_legacy_compute와 함께 instances.yml에 필요한 노드를 추가합니다.

  6. Contrail ansible 배포자를 실행하여 새 vrouter를 구축하고 기존 컴퓨팅 서비스를 구성합니다.

  7. 모든 새 컴퓨팅 노드에는 다음이 포함됩니다.

    • 컬렉터 설정이 새 Contrail 클러스터를 가리켰습니다

    • Control/DNS 노드가 새 Contrail 클러스터를 가리켰습니다

    • vnc_api_lib.ini의 config-api 설정은 새로운 Contrail 클러스터를 가리켰습니다

  8. (선택 사항) 전송된 노드에서 테스트 워크로드를 실행하여 새 vrouter-agent가 올바르게 작동하는지 확인합니다.

필요한 경우 다음 단계에 따라 컴퓨팅 노드를 롤백합니다.

  1. 컴퓨팅 노드에서 워크로드를 이동합니다.

  2. 새 Contrail 컨테이너를 중지합니다.

  3. 네트워크 구성이 성공적으로 되돌려졌는지 확인합니다.

  4. 해당 버전의 구축 방법을 사용하여 이전 버전의 Contrail을 구축합니다.

계산 노드를 새 클러스터로 전송하는 자세한 단계는 다음과 같습니다.

참고:

선택한 컴퓨팅 노드에서 워크로드를 이동한 후에는 이전 버전의 contrail-agent를 제거해야 합니다. 예를 들어, 호스트에 직접 설치된 Ubuntu 16.04 및 vrouter-agent의 경우 이전 contrail-agent를 제거하는 단계는 다음과 같습니다.

다른 종류의 배포의 경우 vrouter-agent 및 vrouter-agent-nodemgr 컨테이너를 제거하고 vhost0 인터페이스를 사용하지 않도록 설정합니다.

  1. 새 인스턴스는 vrouter 및 openstack_compute_legacy의 두 가지 역할로 instances.yaml 에 추가되어야 합니다. 컴퓨팅 노드를 다시 프로비저닝하지 않으려면 유지 관리 모드를 로 TRUE설정합니다. 예를 들어:

    instances.yaml 노드 정의에 업그레이드하려는 컴퓨팅 노드만 포함되어 있는지 확인합니다. 다른 모든 노드는 주석 처리해야 합니다.

  2. ansible 플레이북을 실행합니다.

  3. 컴퓨팅 노드의 contrail-status는 다음과 같이 나타납니다.

  4. 업그레이드가 완료된 후 모든 새 컨트롤러 노드에서 contrail-control을 다시 시작합니다.
  5. 컴퓨팅 노드를 업그레이드한 후 SSL핸드셰이크 문제로 인해 XMPP가 다운됩니다. 예제:

    XMPP를 불러오는 단계는 다음과 같습니다.

    1. 새 제어 노드에서 업그레이드된 컴퓨팅 노드로 다음 두 파일을 복사합니다.
    2. 업그레이드된 컴퓨팅 노드의 VR 외부 에이전트를 다시 시작합니다.

  6. 새 컴퓨팅 노드에서 실행하여 contrail-status 상태를 확인합니다. 이제 모든 구성 요소가 활성화되어야 합니다. 또한 새 컴퓨팅 노드로 AZ/aggregates를 생성하여 새 인스턴스의 상태를 확인하고 일부 테스트 워크로드를 실행하여 올바르게 작동하는지 확인할 수 있습니다.

Contrail Ansible Deployer ISSU 프로세스 마무리

다음과 같이 Contrail Ansible Deployer ISSU를 마무리합니다.

  1. issu-run-sync 컨테이너를 중지합니다.

  2. 사후 동기화 명령을 실행합니다.

  3. 모든 새 컨트롤러 노드에서 다음 명령을 실행합니다.

  4. 컨테이너를 다시 시작합니다.

  5. 유지 관리 모드를 해제하고 이전에 중지된 모든 컨테이너를 시작합니다. 이렇게 하려면 instances.yaml의 항목을 MAINTENANCE_MODE FALSE로 설정한 다음, 배포 노드에서 다음 명령을 실행합니다.

    이 단계에서는 컴퓨팅 노드만 instances.yaml에 포함되어야 하며 다른 노드는 주석 처리해야 합니다.

  6. 기존 Contrail 컨트롤러를 정리하고 제거합니다. config-api 컨테이너에서 호출된 provision-issu.py 스크립트를 issu.conf 구성과 함께 사용합니다. 자격 증명 변수 및 API 서버 IP를 표시된 대로 적절한 값으로 바꿉니다.

    참고:

    현재 이전 단계는 호스트 이름에서만 작동하며 IP 주소에서는 작동하지 않습니다.

  7. 컨트롤러 노드에서 다음 명령을 실행합니다.

    참고:

    모든 *host_info 매개 변수에는 새 호스트 목록이 포함되어야 합니다.

  8. 다른 서비스가 없는 경우 서버를 정리할 수 있습니다.

  9. 이전 컨트롤러에서 다음 경로로 이동합니다.
  10. api_server_ip 및 analytics_api_ip 주소를 새 컨트롤러 IP 주소로 수정합니다.

  11. 이전 컨트롤러에서 neutron-server 컨테이너를 다시 시작합니다.

  12. 이전 제어 노드의 neutron_server 컨테이너로 이동합니다. ContrailPlugin.ini 파일에 새 컨트롤러 IP가 포함되어 있는지 확인합니다. 새 컨트롤러 IP를 포함해야 합니다.

  13. 열 구성에도 동일한 변경이 필요합니다. 매개 변수를 [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를 수동으로 제거합니다.