Ubuntu
Ubuntu 컴퓨트 노드에서 동작하는 OpenStack 배포에 Calico 오픈 소스를 설치하는 문서예요. 컨트롤 노드와 컴퓨트 노드 각각에 필요한 단계와 공통 단계를 나눠서 안내해요. etcd 기반 데이터스토어를 쓰는 OpenStack용 Calico의 첫 설치 절차예요.
출처: 문서
본문
이 안내는 Calico를 처음 설치하는 과정을 다뤄요. 기존 시스템을 업그레이드한다면 OpenStack에서 Calico 업그레이드를 대신 참고하세요.
설치는 두 섹션으로 이루어져 있어요. OpenStack 컨트롤 노드에 Calico를 추가하는 것과, OpenStack 컴퓨트 노드에 Calico를 추가하는 것이요. 컨트롤/컴퓨트 섹션의 개별 지침으로 넘어가기 전에 각 노드에서 공통 단계를 먼저 수행해요. 컨트롤과 컴퓨트 역할을 겸한 노드를 만들고 싶다면 세 섹션을 모두 진행해요.
시작하기 전에
- 요구 사항을 충족하는지 확인해요.
- 하나 이상의 Ubuntu 호스트(여러분의 OpenStack 컴퓨트 또는 컨트롤 노드)에 SSH 접근과 root 권한이 있는지 확인해요.
- Ubuntu 호스트에 OpenStack을 설치해요.
공통 단계
Calico를 설치하는 모든 머신에서 필요한 몇 가지 단계가 있어요. 이 섹션에 자세히 설명되어 있어요.
-
APT가 Calico PPA를 사용하도록 구성해요.
add-apt-repository ppa:project-calico/calico-3.33 -
공식 BIRD PPA를 추가해요. 이 PPA는 Ubuntu에서 아직 제공되지 않는 BIRD 수정 사항을 담고 있어요. PPA를 추가하려면 다음을 실행해요.
add-apt-repository ppa:cz.nic-labs/birdSUCCESS: 위 명령이
'ascii' codec can't decode byte오류로 실패하면, UTF-8이 활성화된 로캘로 명령을 실행해 보세요.LC_ALL=en_US.UTF-8 add-apt-repository ppa:cz.nic-labs/bird -
각 머신에서 패키지 관리자를 업데이트해요.
apt-get update -
etcd3gwPython 패키지를 설치해요. Calico의 OpenStack 드라이버와 DHCP 에이전트에 필요해요. Ubuntu 24.04(Noble) 이상에서는 Ubuntu 아카이브에 들어 있는 버전을 사용해요.apt-get install -y python3-etcd3gwUbuntu 22.04(Jammy) 이하에서는 Ubuntu 아카이브의 etcd3gw가 너무 오래되었거나 아예 없어서, 대신 PyPI에서 설치해요.
apt-get install -y python3-pip pip3 install etcd3gw==2.4.0 -
/etc/neutron/neutron.conf파일을 편집해요. 다음 내용을 담은[calico]섹션을 추가하는데,<ip>는 etcd 서버의 IP 주소예요.[calico] etcd_host = <ip>
컨트롤 노드 설치
각 컨트롤 노드에서 다음 단계를 수행해요.
-
구성된 OpenStack 상태를 모두 삭제해요. 특히 위에서 참조한 설치 과정이 만든 인스턴스, 라우터, 서브넷, 네트워크(이 순서대로)를 지워요. 웹 대시보드나 명령줄로 할 수 있어요.
SUCCESS: 웹 대시보드의 Admin과 Project 섹션 둘 다 네트워크와 라우터 하위 섹션이 있어요. 일부 네트워크는 Admin 섹션에서 삭제해야 할 수 있어요.
WARNING: 호환되지 않는 상태가 남아 있으면 Calico 설치가 실패해요.
-
apt-get upgrade와apt-get dist-upgrade를 실행해요. 이 명령들은 OpenStack 패키지와dnsmasq에 대한 Calico 전용 업데이트를 가져와요. -
/etc/neutron/neutron.conf파일을 편집해요.[DEFAULT]섹션에서core_plugin으로 시작하는 줄을 찾아core_plugin = calico로 바꿔요. -
calico-control패키지를 설치해요.apt-get install -y calico-control -
Neutron server 프로세스를 재시작해요.
service neutron-server restart
컴퓨트 노드 설치
각 컴퓨트 노드에서 다음 단계를 수행해요.
-
/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 -
실행 중이라면 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> -
몇 가지 추가 패키지를 설치해요.
apt-get install -y neutron-common neutron-dhcp-agent nova-api-metadata -
apt-get upgrade와apt-get dist-upgrade를 실행해요. 이 명령들은 OpenStack 패키지와dnsmasq에 대한 Calico 전용 업데이트를 가져와요. -
/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 -
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 -
calico-compute패키지를 설치해요.apt-get install -y calico-compute이 단계에서 iptables 규칙을 재시작 후에도 유지하도록 저장할지 물어보면 yes를 누르세요.
-
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
-
-
다음 내용을 담은
/etc/calico/felix.cfg를 만들어요.<ip>는 etcd 서버의 IP 주소예요.[global] DatastoreType = etcdv3 EtcdAddr = <ip>:2379 EndpointStatusPathPrefix = none -
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 연결 안정성이 크게 좋아져요.