OpenStack에서 Calico 업그레이드
OpenStack에 설치된 Calico Open Source를 업그레이드하는 방법을 안내해요. CentOS 또는 Ubuntu 기반의 컴퓨트 노드와 컨트롤 노드에서 시스템 패키지를 갱신하는 절차를 다뤄요. v3.32 이전 버전에서 올라올 때 필요한 정책 데이터 마이그레이션도 함께 설명해요.
출처: 문서
본문
Calico 패키지 업데이트
시작하기 전에 각 릴리스에서 주의해야 할 변경 사항을 업그레이드 노트에서 확인해요.
이 페이지는 이전 두 Calico 릴리스에서 v3.33으로 업그레이드하는 내용을 다뤄요.
절차는 Linux 배포판에 따라 달라요.
v3.32보다 이전 버전에서 업그레이드한다면 패키지 업그레이드 후에 정책 데이터 마이그레이션을 한 번 실행해야 해요. 아래의 정책 데이터 마이그레이션을 참고하세요.
SECONDARY: 업그레이드 후에는 구버전
calicoctl을 사용하지 마세요. 예상치 못한 동작과 데이터가 생길 수 있어요.
CentOS 기반 OpenStack 클러스터 업그레이드
-
모든 노드에서 Calico 패키지 위치가 v3.33 저장소를 가리키도록 바꿔요:
sudo sed -i 's/calico-X.X/calico-Y.Y/g' /etc/yum.repos.d/calico.repoX.X는 업그레이드 전 버전으로,Y.Y는 업그레이드할 버전으로 바꾸세요. 둘 다v접두사 없이 주 버전과 부 버전 숫자만 적어요. -
모든 컴퓨트 노드에서 패키지를 업데이트해요:
sudo yum update여기서 보여주는 것처럼 배포판 전체를 업그레이드하는 것을 권장해요. 특정 패키지만 업그레이드하고 싶다면, Calico 컴퓨트 노드에 필요한 패키지는 다음과 같아요.
calico-commoncalico-computecalico-dhcp-agentcalico-felixdnsmasqnetworking-calicoopenstack-neutronopenstack-nova-apiopenstack-nova-compute
-
컴퓨트 노드에서 다음 명령으로 Felix가 v3.33으로 업그레이드됐는지 확인해요.
calico-felix --versionv3.33이 반환되어야 해요. -
모든 컴퓨트 노드에서
/etc/calico/felix.cfg의 데이터스토어 타입이etcdv3인지 확인해요:DatastoreType = etcdv3EtcdEndpoints 주소를 바꿔야 한다면(예: 기존 etcdv2 클러스터를 업그레이드하는 대신 새 etcdv3 클러스터를 설치한 경우) 이 시점에
/etcd/calico/felix.cfg의 EtcdEndpoints 주소를 업데이트해야 해요. -
모든 컨트롤 노드에서 패키지를 업데이트해요:
sudo yum update여기서 보여주는 것처럼 배포판 전체를 업그레이드하는 것을 권장해요. 특정 패키지만 업그레이드하고 싶다면, Calico 컨트롤 노드에 필요한 패키지는 다음과 같아요.
calico-commoncalico-controlnetworking-calicoopenstack-neutron
-
모든 컨트롤 노드에서
neutron-server를 재시작해요:sudo systemctl restart neutron-server -
이전에 OpenStack 외부 데이터를 마이그레이션하려고
calico-upgrade를 실행했다면 컨트롤 노드에서 다음을 실행해요:calico-upgrade complete -
기존
calicoctl인스턴스를 모두 제거하고 새calicoctl을 설치해요. -
v3.32 이전 버전에서 업그레이드한다면 정책 데이터 마이그레이션을 실행해요.
-
축하해요! Calico v3.33으로 업그레이드를 마쳤어요.
Ubuntu 기반 OpenStack 클러스터 업그레이드
-
모든 노드에서 Calico 패키지 위치가 v3.33 저장소를 가리키도록 바꿔요:
sudo bash -c 'cat > /etc/apt/sources.list.d/project-calico-calico-X_X-trusty.list' << EOF deb http://ppa.launchpad.net/project-calico/calico-X.X/ubuntu trusty main # deb-src http://ppa.launchpad.net/project-calico/calico-X.X/ubuntu trusty main EOFX_X와X.X는 업그레이드할 버전으로 바꾸세요.v접두사 없이, 각각 밑줄과 점으로 적어요. 그리고trusty도 사용 중인 Ubuntu 버전의 코드명으로 바꾸세요. -
모든 컴퓨트 노드에서 패키지를 업데이트해요:
sudo apt-get update sudo apt-get install calico-compute calico-felix calico-common \ networking-calico calico-dhcp-agent -
컴퓨트 노드에서 다음 명령으로 Felix가 v3.33으로 업그레이드됐는지 확인해요.
calico-felix --versionv3.33이 반환되어야 해요. -
모든 컴퓨트 노드에서
/etc/calico/felix.cfg의 데이터스토어 타입이etcdv3인지 확인해요:DatastoreType = etcdv3EtcdEndpoints 주소를 바꿔야 한다면(예: 기존 etcdv2 클러스터를 업그레이드하는 대신 새 etcdv3 클러스터를 설치한 경우) 이 시점에
/etcd/calico/felix.cfg의 EtcdEndpoints 주소를 업데이트해야 해요. -
모든 컨트롤 노드에서 패키지를 업데이트해요:
sudo apt-get update sudo apt-get install calico-control calico-common networking-calico -
모든 컨트롤 노드에서
neutron-server를 재시작해요:sudo service neutron-server restart -
이전에 OpenStack 외부 데이터를 마이그레이션하려고
calico-upgrade를 실행했다면 컨트롤 노드에서 다음을 실행해요:calico-upgrade complete -
기존
calicoctl인스턴스를 모두 제거하고 새calicoctl을 설치해요. -
v3.32 이전 버전에서 업그레이드한다면 정책 데이터 마이그레이션을 실행해요.
-
축하해요! Calico v3.33으로 업그레이드를 마쳤어요.
v3.32 이전에서 업그레이드할 때 정책 데이터 마이그레이션
Calico v3.32에서는 etcd 데이터스토어에 저장되는 정책 이름 규칙이 바뀌었어요. 기본 티어의 정책은 이제 순수 이름(접두사 없는 이름)으로 저장되지만, Calico v3.29.4부터 v3.31.x까지는 default.my-policy처럼 티어 접두사가 붙은 이름으로 저장했어요. Kubernetes 클러스터에서는 이 데이터가 kube-controllers에 의해 자동으로 마이그레이션돼요. OpenStack 클러스터는 kube-controllers를 서비스로 실행하지 않기 때문에, 같은 마이그레이션을 업그레이드 후에 직접 한 번 실행해야 해요.
이 단계를 건너뛰면, 업그레이드 전에 만들어진 정책들이 각각 마이그레이션되거나 다시 만들어지기 전까지 아래와 같이 잘못 동작해요:
-
calicoctl get,calicoctl delete같은 명령은 그런 정책을 저장된 이름으로만 찾아요. 예를 들어calicoctl get globalnetworkpolicy default.my-policy처럼요. 순수 이름으로 조회하면 리소스가 존재하지 않는다고 나와요. -
순수 이름으로 그런 정책을 다시 적용하면 기존 정책을 업데이트하는 게 아니라 별개의 두 번째 정책 객체가 만들어져요. 그래서 둘 중 하나를 삭제하기 전까지 두 객체가 모두 살아 있는 정책으로 동작해요.
-
Felix의
LogPrefix구성에 있는%n,%p지정자는 저장된 이름으로 확장되기 때문에, 업그레이드 전 정책의 로그 항목에는default.접두사가 붙고 새로 작성된 정책의 항목에는 붙지 않아요.
시작하기 전에
-
먼저 모든 노드를 업그레이드하세요. 마이그레이션을 실행하기 전에 모든 Felix 인스턴스(컴퓨트 노드)와 모든 neutron-server 인스턴스(컨트롤 노드)가 Calico v3.32 이상으로 동작하고 있어야 해요. Kubernetes 클러스터에서는 이 순서가 자동으로 검증되지만, OpenStack에서는 여러분이 직접 챙겨야 해요.
-
calicoctl을 설치하고 구성하세요. 최소 한 개 이상의 클러스터 노드에서calicoctl을 성공적으로 실행할 수 있어야 해요. -
중복 정책을 정리하세요. 업그레이드 이후에 정책을 이미 다시 적용했다면 중복 쌍이 생겼을 수 있어요.
calicoctl get globalnetworkpolicy목록에 같은 정책 이름이 두 번 나오고, 하나는 티어가default로, 다른 하나는 티어 열이 비어 있는 경우죠. 각 쌍에 대해 두 객체를 비교해 보세요:calicoctl get globalnetworkpolicy default.my-policy -o yaml calicoctl get globalnetworkpolicy my-policy -o yaml순수 이름 객체가 원하는 spec을 담고 있는지 확인했다면, 레거시 객체를 삭제해요:
calicoctl delete globalnetworkpolicy default.my-policy중복 쌍을 직접 정리하지 않으면, 마이그레이션이 순수 이름 객체를 남기고 레거시 객체를 삭제해요.
마이그레이션 실행
calicoctl이 설치되어 있고 etcd 데이터스토어에 접근하도록 구성된 아무 머신에서 다음을 실행해요:
calicoctl datastore migrate-policy-names
검증
업그레이드 전에 만들어진 정책을 하나 골라서, 이제 순수 이름으로 접근할 수 있는지 확인해요:
calicoctl get globalnetworkpolicy my-policy
그리고 레거시 이름이 사라졌는지도 확인해요:
calicoctl get globalnetworkpolicy default.my-policy
두 번째 명령은 리소스가 존재하지 않는다고 알려 주면 돼요.
더 알아보기 (Learn more)
OpenStack에서의 Calico 업그레이드는 배포판별 패키지 저장소를 바꾸는 방식으로 진행해요. v3.32 이전에서 올라올 때는 정책 이름 규칙 변경 때문에 수동 마이그레이션이 꼭 필요해요. 업그레이드 전에 릴리스별 업그레이드 노트를 꼭 읽어 보세요.