본문으로 바로가기 본문 바로가기
WIKI 기술 지식 베이스

Ubuntu

원문 보기 위키 갱신

Ubuntu 컴퓨트 노드에서 동작하는 OpenStack 배포에 Calico 오픈 소스를 설치하는 문서예요. 컨트롤 노드와 컴퓨트 노드 각각에 필요한 단계와 공통 단계를 나눠서 안내해요. etcd 기반 데이터스토어를 쓰는 OpenStack용 Calico의 첫 설치 절차예요.

출처: 문서

본문

이 안내는 Calico를 처음 설치하는 과정을 다뤄요. 기존 시스템을 업그레이드한다면 OpenStack에서 Calico 업그레이드를 대신 참고하세요.

설치는 두 섹션으로 이루어져 있어요. OpenStack 컨트롤 노드에 Calico를 추가하는 것과, OpenStack 컴퓨트 노드에 Calico를 추가하는 것이요. 컨트롤/컴퓨트 섹션의 개별 지침으로 넘어가기 전에 각 노드에서 공통 단계를 먼저 수행해요. 컨트롤과 컴퓨트 역할을 겸한 노드를 만들고 싶다면 세 섹션을 모두 진행해요.

시작하기 전에

  • 요구 사항을 충족하는지 확인해요.
  • 하나 이상의 Ubuntu 호스트(여러분의 OpenStack 컴퓨트 또는 컨트롤 노드)에 SSH 접근과 root 권한이 있는지 확인해요.
  • Ubuntu 호스트에 OpenStack을 설치해요.

공통 단계

Calico를 설치하는 모든 머신에서 필요한 몇 가지 단계가 있어요. 이 섹션에 자세히 설명되어 있어요.

  1. APT가 Calico PPA를 사용하도록 구성해요.

    add-apt-repository ppa:project-calico/calico-3.33
    
  2. 공식 BIRD PPA를 추가해요. 이 PPA는 Ubuntu에서 아직 제공되지 않는 BIRD 수정 사항을 담고 있어요. PPA를 추가하려면 다음을 실행해요.

    add-apt-repository ppa:cz.nic-labs/bird
    

    SUCCESS: 위 명령이 'ascii' codec can't decode byte 오류로 실패하면, UTF-8이 활성화된 로캘로 명령을 실행해 보세요. LC_ALL=en_US.UTF-8 add-apt-repository ppa:cz.nic-labs/bird

  3. 각 머신에서 패키지 관리자를 업데이트해요.

    apt-get update
    
  4. etcd3gw Python 패키지를 설치해요. Calico의 OpenStack 드라이버와 DHCP 에이전트에 필요해요. Ubuntu 24.04(Noble) 이상에서는 Ubuntu 아카이브에 들어 있는 버전을 사용해요.

    apt-get install -y python3-etcd3gw
    

    Ubuntu 22.04(Jammy) 이하에서는 Ubuntu 아카이브의 etcd3gw가 너무 오래되었거나 아예 없어서, 대신 PyPI에서 설치해요.

    apt-get install -y python3-pip
    pip3 install etcd3gw==2.4.0
    
  5. /etc/neutron/neutron.conf 파일을 편집해요. 다음 내용을 담은 [calico] 섹션을 추가하는데, <ip>는 etcd 서버의 IP 주소예요.

    [calico]
    etcd_host = <ip>
    

컨트롤 노드 설치

각 컨트롤 노드에서 다음 단계를 수행해요.

  1. 구성된 OpenStack 상태를 모두 삭제해요. 특히 위에서 참조한 설치 과정이 만든 인스턴스, 라우터, 서브넷, 네트워크(이 순서대로)를 지워요. 웹 대시보드나 명령줄로 할 수 있어요.

    SUCCESS: 웹 대시보드의 Admin과 Project 섹션 둘 다 네트워크와 라우터 하위 섹션이 있어요. 일부 네트워크는 Admin 섹션에서 삭제해야 할 수 있어요.

    WARNING: 호환되지 않는 상태가 남아 있으면 Calico 설치가 실패해요.

  2. apt-get upgrade와 apt-get dist-upgrade를 실행해요. 이 명령들은 OpenStack 패키지와 dnsmasq에 대한 Calico 전용 업데이트를 가져와요.

  3. /etc/neutron/neutron.conf 파일을 편집해요. [DEFAULT] 섹션에서 core_plugin으로 시작하는 줄을 찾아 core_plugin = calico로 바꿔요.

  4. calico-control 패키지를 설치해요.

    apt-get install -y calico-control
    
  5. Neutron server 프로세스를 재시작해요.

    service neutron-server restart
    

컴퓨트 노드 설치

각 컴퓨트 노드에서 다음 단계를 수행해요.

  1. /etc/nova/nova.conf 파일을 열고 [DEFAULT] 섹션에서 다음 줄을 제거해요.

    linuxnet_interface_driver = nova.network.linux_net.LinuxOVSInterfaceDriver
    

    [neutron] 섹션에서 service_neutron_metadata_proxy 또는 service_metadata_proxy를 True로 설정하는 줄이 있다면 함께 지워요.

    nova compute를 재시작해요.

    service nova-compute restart
    
  2. 실행 중이라면 Open vSwitch 서비스를 중지해요.

    service openvswitch-switch stop
    service neutron-plugin-openvswitch-agent stop
    

    그다음, 재부팅 시 서비스가 다시 뜨지 않도록 만들어요.

    sh -c "echo 'manual' > /etc/init/openvswitch-switch.override"
    sh -c "echo 'manual' > /etc/init/openvswitch-force-reload-kmod.override"
    sh -c "echo 'manual' > /etc/init/neutron-plugin-openvswitch-agent.override"
    

    이어서 컨트롤 노드에서 다음 명령을 실행해 방금 중지한 에이전트들을 찾아요.

    neutron agent-list
    

    각 에이전트를 컨트롤 노드에서 다음 명령으로 삭제해요. <agent-id>는 해당 에이전트의 ID로 바꿔요.

    neutron agent-delete <agent-id>
    
  3. 몇 가지 추가 패키지를 설치해요.

    apt-get install -y neutron-common neutron-dhcp-agent nova-api-metadata
    
  4. apt-get upgrade와 apt-get dist-upgrade를 실행해요. 이 명령들은 OpenStack 패키지와 dnsmasq에 대한 Calico 전용 업데이트를 가져와요.

  5. /etc/neutron/neutron.conf 파일을 편집해요. [oslo_concurrency] 섹션에서 lock_path 변수가 주석 해제되어 있고 다음과 같이 설정되어 있는지 확인해요.

    # Directory to use for lock files. For security, the specified directory should
    # only be writable by the user running the processes that need locking.
    # Defaults to environment variable OSLO_LOCK_PATH. If external locks are used,
    # a lock path must be set.
    lock_path = $state_path/lock
    
  6. Calico DHCP 에이전트를 설치하고(etcd를 사용하기 때문에 더 많은 호스트로 확장할 수 있어요) Neutron이 제공하는 것은 비활성화해요.

    service neutron-dhcp-agent stop
    echo manual | tee /etc/init/neutron-dhcp-agent.override
    apt-get install -y calico-dhcp-agent
    
  7. calico-compute 패키지를 설치해요.

    apt-get install -y calico-compute
    

    이 단계에서 iptables 규칙을 재시작 후에도 유지하도록 저장할지 물어보면 yes를 누르세요.

  8. BIRD를 구성해요. Calico는 기본적으로 풀 BGP 메시를 피하기 위해 라우트 리플렉터를 배포한다고 가정해요. 이를 위해 라우트 리플렉터로의 단일 피어링을 담은 BIRD 구성 파일을 준비하는 구성 스크립트를 포함하고 있어요. 네트워크에 맞는 상황이라면 다음 명령 중 하나 또는 둘 다를 실행할 수 있어요.

    컴퓨트 호스트 간 IPv4 연결용이에요.

    calico-gen-bird-conf.sh <compute_node_ip> <route_reflector_ip> <bgp_as_number>
    

    그리고/또는 컴퓨트 호스트 간 IPv6 연결용이에요.

    calico-gen-bird6-conf.sh <compute_node_ipv4> <compute_node_ipv6> <route_reflector_ipv6> <bgp_as_number>
    

    컴퓨트 노드를 라우트 리플렉터 클라이언트로 받아들이도록 라우트 리플렉터를 구성해야 할 수도 있어요.

    풀 BGP 메시를 구성하는 경우에는 각 컴퓨트 호스트에서 BGP 구성을 적절히 직접 처리해야 해요. 위 스크립트는 <route_reflector_ip>를 다른 컴퓨트 호스트의 IP로 바꾸면 BIRD용 샘플 구성을 만드는 데도 쓸 수 있어요. 이렇게 하면 단일 피어 연결용 구성이 생성되고, 이를 복제해서 메시의 각 컴퓨트 호스트에 맞게 갱신하면 돼요.

    BIRD가 크래시하거나 업그레이드될 때 VM 간 연결을 유지하려면 BIRD graceful restart를 구성해요.

    • /etc/bird/envvars의 BIRD_ARGS에 -R을 추가해요(이 옵션의 주석을 풀어야 할 수도 있어요).

    • upstart 잡인 /etc/init/bird.conf와 bird6.conf(IPv6를 사용한다면)를 편집하고 다음 스크립트를 추가해요.

      pre-stop script
      PID=`status bird | egrep -oi '([0-9]+)$' | head -n1`
      kill -9 $PID
      end script
      
  9. 다음 내용을 담은 /etc/calico/felix.cfg를 만들어요. <ip>는 etcd 서버의 IP 주소예요.

    [global]
    DatastoreType = etcdv3
    EtcdAddr = <ip>:2379
    EndpointStatusPathPrefix = none
    
  10. Felix 서비스를 재시작해요.

    service calico-felix restart
    

etcd 인증 구성

etcd 클러스터에서 인증이 활성화되어 있다면, 관련 Calico 구성 요소에도 etcd 사용자 이름과 비밀번호를 구성해야 해요. /calico/로 시작하는 모든 키를 읽고 쓸 권한이 있는 단일 etcd 사용자를 Calico용으로 만들 수도 있고, 구성 요소마다 더 정밀한 권한을 가진 별도의 etcd 사용자를 만들 수도 있어요.

다음 표는 Calico for OpenStack의 각 구성 요소를 어디서 구성해야 하는지, 그리고 각 구성 요소에 필요한 상세 접근 권한을 정리한 거예요.

구성 요소 구성 위치 접근 권한
Felix 각 컴퓨트 노드의 Felix 환경에 있는 CALICO_ETCD_USERNAME과 CALICO_ETCD_PASSWORD 변수. 여기 참고
Neutron driver 각 컨트롤 노드의 /etc/neutron/neutron.conf [calico] 섹션에 있는 etcd_username과 etcd_password. 여기 참고
DHCP agent 각 컴퓨트 노드의 /etc/neutron/neutron.conf [calico] 섹션에 있는 etcd_username과 etcd_password. 여기 참고

더 알아보기 (Learn more)

Ubuntu에서는 APT PPA(calico-3.33, BIRD)로 패키지를 받고, Ubuntu 버전에 따라 etcd3gw 설치 방법이 갈린다는 점이 특징이에요. 설치 전에 기존 OpenStack 상태를 정리하고, BIRD graceful restart를 구성해 두면 VM 연결 안정성이 크게 좋아져요.