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

Red Hat Enterprise Linux

원문 보기 위키 갱신

RHEL 컴퓨트 노드에서 동작하는 OpenStack 배포에 Calico 오픈 소스를 설치하는 문서예요. etcd 기반 데이터스토어를 쓰는 OpenStack용 Calico의 첫 설치 절차를 안내해요.

출처: 문서

본문

SECONDARY: OpenStack RHEL 설치 경로는 더 이상 활발하게 테스트되지 않아서 동작하지 않을 수 있어요. 이 안내는 혹시 도움이 될 수 있으리라는 희망으로 남겨둔 것이에요.

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

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

시작하기 전에

  • 요구 사항을 충족하는지 확인해요.
  • 하나 이상의 RHEL(Red Hat Enterprise Linux) 호스트에 SSH 접근과 root 권한이 있는지 확인해요.
  • RHEL 호스트 사이에서 DNS가 동작하도록 만들어요(네트워크에 DNS가 없다면 /etc/hosts를 사용해요).
  • RHEL 호스트에 OpenStack을 설치해요.

공통 단계

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

  1. EPEL 리포지터리를 추가해요. OpenStack을 설치하면서 이미 추가했을 수도 있어요.

  2. Calico 리포지터리를 구성해요.

    cat > /etc/yum.repos.d/calico.repo <<EOF
    [calico]
    name=Calico Repository
    baseurl=https://binaries.projectcalico.org/rpm/calico-3.33/
    enabled=1
    skip_if_unavailable=0
    gpgcheck=1
    gpgkey=https://binaries.projectcalico.org/rpm/calico-3.33/key
    priority=97
    EOF
    
  3. etcd3gw Python 패키지를 설치해요. Calico의 OpenStack 드라이버와 DHCP 에이전트에 필요해요.

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

    [calico]
    etcd_host = <ip>
    

컨트롤 노드 설치

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

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

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

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

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

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

    yum install -y calico-control
    
  4. 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로 설정하는 줄이 있다면 함께 지워요. 또 metadata_proxy_shared_secret을 설정하는 줄이 있다면 그 줄도 주석 처리해요.

    nova compute를 재시작해요.

    service openstack-nova-compute restart
    

    이 노드가 컨트롤러이기도 하다면 nova-api도 추가로 재시작해요.

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

    service neutron-openvswitch-agent stop
    service openvswitch stop
    

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

    chkconfig openvswitch off
    chkconfig neutron-openvswitch-agent off
    

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

    neutron agent-list
    

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

    neutron agent-delete <agent-id>
    
  3. 컴퓨트 호스트에 Neutron 인프라 코드를 설치해요.

    yum install -y openstack-neutron
    
  4. /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
    
  5. Neutron DHCP 에이전트를 중지하고 비활성화한 뒤, Calico DHCP 에이전트를 설치해요. Calico DHCP 에이전트는 etcd를 사용하기 때문에 더 많은 호스트로 확장할 수 있어요.

    service neutron-dhcp-agent stop
    chkconfig neutron-dhcp-agent off
    yum install -y calico-dhcp-agent
    
  6. L3 라우팅 에이전트나 Linux 브리징 에이전트 같은 다른 라우팅/브리징 에이전트도 중지하고 비활성화해요. 이것들은 Calico와 충돌해요.

    service neutron-l3-agent stop
    chkconfig neutron-l3-agent off
    

    브리징 에이전트와 그 외 다른 에이전트에도 똑같이 반복해요.

  7. 이 노드가 컨트롤러가 아니라면 Nova Metadata API를 설치하고 시작해요. 컴퓨트와 컨트롤러를 겸한 노드에서는 이 단계가 필요 없어요.

    yum install -y openstack-nova-api
    service openstack-nova-metadata-api restart
    chkconfig openstack-nova-metadata-api on
    
  8. BIRD BGP 클라이언트를 설치해요.

    yum install -y bird bird6
    
  9. calico-compute 패키지를 설치해요.

    yum install -y calico-compute
    
  10. 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를 구성해요. systemd 유닛 파일 /usr/lib/systemd/system/bird.service(IPv6라면 bird6.service)를 편집해요.

    • ExecStart 줄 끝에 -R을 추가해요.
    • [Service] 섹션에 KillSignal=SIGKILL을 새 줄로 추가해요.
    • systemctl daemon-reload를 실행해 systemd에게 그 파일을 다시 읽으라고 알려줘요.

    BIRD(IPv6라면 BIRD 6)가 실행 중이고 재부팅 시에도 시작되도록 확인해요.

    service bird restart
    service bird6 restart
    chkconfig bird on
    chkconfig bird6 on
    
  11. 다음 내용을 담은 /etc/calico/felix.cfg를 만들어요. <ip>는 etcd 서버의 IP 주소예요.

    [global]
    DatastoreType = etcdv3
    EtcdAddr = <ip>:2379
    EndpointStatusPathPrefix = none
    
  12. 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)

OpenStack용 Calico 설치는 컨트롤 노드와 컴퓨트 노드 양쪽에 공통 단계를 먼저 적용한 뒤 역할별 패키지를 설치하는 구조예요. 기존 OpenStack 상태(인스턴스, 라우터, 서브넷, 네트워크)를 미리 정리하는 것이 설치 성공의 중요한 전제라는 점을 기억해 두세요.