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

Kubernetes에서 Calico 업그레이드

원문 보기 위키 갱신

Kubernetes에서 Calico 업그레이드 (Upgrade Calico on Kubernetes)

이 문서는 Kubernetes에서 Calico Open Source를 v3.33으로 업그레이드하는 방법을 설명해요. Helm 설치, operator 관리 설치, 매니페스트 기반 설치를 모두 다루고, Kubernetes API 데이터스토어와 etcd 데이터스토어 두 경우 모두 안내해요. 설치 방식에 맞는 절차를 골라 따라 하면 돼요.

출처: 문서

본문

Calico 업그레이드 소개

참고 (SECONDARY): 업그레이드는 클러스터의 CRD 모드를 바꾸지 않아요. 집계(aggregation) API 서버(v1 CRD)를 사용하는 클러스터는 집계 API 서버에 그대로 머물고, 네이티브 v3 CRD를 사용하는 클러스터는 v3에 그대로 머물러요. operator는 존재하는 CRD를 보고 모드를 선택하며, 기존 클러스터의 모드를 바꾸지 않아요. 집계 API 서버에서 네이티브 v3 CRD로 이동하려면 네이티브 v3 CRD로 마이그레이션을 참고하세요.

시작하기 전에 각 릴리스에서 주의가 필요한 변경 사항을 담은 업그레이드 노트를 확인하세요.

이 페이지는 이전 두 개의 Calico 릴리스에서 v3.33으로 업그레이드하는 내용을 다뤄요.

절차는 데이터스토어 유형과 설치 방법에 따라 달라져요.

Kubernetes 클러스터에서 Calico를 etcd 모드로 사용 중이라면, 여기 설명대로 Kubernetes API 데이터스토어로 업그레이드하는 것을 권장해요.

calico.yaml 매니페스트로 Calico를 설치했다면, 여기 설명대로 Calico operator로 업그레이드하는 것을 권장해요.

참고 (SECONDARY): 업그레이드 후에는 구버전의 calicoctl을 사용하지 마세요. 예상치 못한 동작과 데이터 문제를 일으킬 수 있어요.

Helm으로 설치한 설치 업그레이드

tigera-operator 차트에는 Calico CRD가 포함되어 있지 않아요. Helm은 helm upgrade 시 CRD를 업그레이드하지 않거든요. v3.33 CRD를 클러스터에 넣는 방법은 두 가지예요.

  • helm upgrade를 실행하기 전에 직접 CRD를 적용한다. 권장 방식이에요. 새 operator가 시작되기 전에 새 CRD가 자리 잡기 때문에 업그레이드 전에 새 필드를 미리 구성할 수 있고, CRD가 나머지 매니페스트에 쓰는 도구로 관리돼요.
  • operator가 적용하게 둔다. values.yaml에서 manageCRDs: true(기본값)를 사용하면 새 팟이 시작될 때 operator가 직접 CRD를 적용해요. 별도 단계는 필요 없지만, 새 CRD는 새 operator가 실행된 후에야 존재하기 때문에 업그레이드가 끝나기 전에는 새 구성을 적용할 수 없어요.

직접 CRD를 적용하는 방법은 다음과 같아요.

  1. v3.33 CRD를 적용하세요.

    kubectl apply --server-side --force-conflicts -f https://raw.githubusercontent.com/projectcalico/calico/v3.33.0/manifests/v1_crd_projectcalico_org.yaml
    

    또는 CRD 차트를 사용할 수도 있어요.

    helm template calico-crds projectcalico/crd.projectcalico.org.v1 --version v3.33.0 | kubectl apply --server-side --force-conflicts -f -
    

    참고 (SECONDARY): 위 명령은 v1 CRD를 적용해요. 집계 API 서버를 사용하는 클러스터(일반적인 경우)에는 이것이 맞아요. 클러스터가 네이티브 v3 CRD를 사용한다면 v1_crd_projectcalico_org.yaml 대신 v3_projectcalico_org.yaml을, projectcalico/crd.projectcalico.org.v1 차트 대신 projectcalico/projectcalico.org.v3 차트를 사용하세요.

    Kubernetes 1.36 이상에서 v3 차트를 템플릿으로 렌더링할 때는 --api-versions admissionregistration.k8s.io/v1/MutatingAdmissionPolicy도 추가하세요. 이 옵션이 없으면 Helm이 MutatingAdmissionPolicy 리소스를 v1beta1로 렌더링하는데, Kubernetes 1.36은 이 버전을 서빙하지 않아요.

  2. Helm 업그레이드를 실행하세요.

    helm upgrade calico projectcalico/tigera-operator
    

operator를 사용하는 설치 업그레이드

  1. Tigera Operator 매니페스트와 커스텀 리소스 정의를 다운로드하세요.

    curl https://raw.githubusercontent.com/projectcalico/calico/v3.33.0/manifests/v1_crd_projectcalico_org.yaml -O
    curl https://raw.githubusercontent.com/projectcalico/calico/v3.33.0/manifests/tigera-operator.yaml -O
    
  2. 다음 명령으로 업그레이드를 시작하세요.

    kubectl apply --server-side --force-conflicts -f v1_crd_projectcalico_org.yaml
    kubectl apply --server-side --force-conflicts -f tigera-operator.yaml
    

    참고 (SECONDARY): 위 명령은 v1 CRD를 적용해요. 집계 API 서버를 사용하는 클러스터(일반적인 경우)에는 이것이 맞아요. 클러스터가 네이티브 v3 CRD를 사용한다면 위 명령에서 v1_crd_projectcalico_org.yaml 대신 v3_projectcalico_org.yaml을 사용하세요.

  3. 플로우 로그 API와 Calico Whisker(버전 3.30에서 도입)를 활성화하려면 Goldmane와 Whisker 커스텀 리소스를 적용하세요.

    성공 (SUCCESS): Calico Cloud Free Tier의 옵저버빌리티 도구를 사용할 계획이라면, 콘솔에 플로우 로그를 공급하도록 Goldmane를 활성화해야 해요.

    kubectl apply -f - <<EOF
    apiVersion: operator.tigera.io/v1
    kind: Goldmane
    metadata:
      name: default
    ---
    apiVersion: operator.tigera.io/v1
    kind: Whisker
    metadata:
      name: default
    EOF
    

매니페스트와 Kubernetes API 데이터스토어를 사용하는 설치 업그레이드

  1. 원래 설치 방법에 해당하는 v3.33 매니페스트를 다운로드하세요.

    Calico 정책 + 네트워킹

    curl https://raw.githubusercontent.com/projectcalico/calico/v3.33.0/manifests/calico.yaml -o upgrade.yaml
    

    Calico 정책 + flannel 네트워킹

    curl https://raw.githubusercontent.com/projectcalico/calico/v3.33.0/manifests/canal.yaml -o upgrade.yaml
    

    Calico 정책만 (고급)

    curl https://raw.githubusercontent.com/projectcalico/calico/v3.33.0/manifests/calico-policy-only.yaml -o upgrade.yaml
    

    참고 (SECONDARY): 매니페스트를 수동으로 수정했다면, 다운로드한 매니페스트에 같은 변경을 수동으로 적용해야 해요.

  2. 다음 명령으로 롤링 업데이트를 시작하세요.

    kubectl apply --server-side --force-conflicts -f upgrade.yaml
    
  3. 다음과 같이 업그레이드 상태를 지켜보세요.

    watch kubectl get pods -n kube-system
    

    모든 Calico 팟의 상태가 Running인지 확인하세요.

    calico-node-hvvg8     2/2   Running   0    3m
    calico-node-vm8kh     2/2   Running   0    3m
    calico-node-w92wk     2/2   Running   0    3m
    
  4. 기존 calicoctl 인스턴스를 제거하고, 새 calicoctl을 설치하고, 데이터스토어에 연결되도록 구성하세요.

  5. 다음 명령으로 Calico 버전 번호를 확인하세요.

    calicoctl version
    

    Cluster Version이 v3.33.x로 반환되어야 해요.

  6. 애플리케이션 레이어 정책을 활성화했다면, 아래 지침에 따라 업그레이드를 완료하세요. Istio를 Calico와 함께 사용하지 않는다면 건너뛰세요.

  7. 축하해요! Calico v3.33으로 업그레이드했어요.

etcd 데이터스토어를 사용하는 설치 업그레이드

  1. 원래 설치 방법에 해당하는 v3.33 매니페스트를 다운로드하세요.

    Calico 정책 + 네트워킹

    curl https://raw.githubusercontent.com/projectcalico/calico/v3.33.0/manifests/calico-etcd.yaml -o upgrade.yaml
    

    Calico 정책 + flannel 네트워킹

    curl https://raw.githubusercontent.com/projectcalico/calico/v3.33.0/manifests/canal-etcd.yaml -o upgrade.yaml
    

    참고 (SECONDARY): 설치 당시 매니페스트에 적용했던 변경을 다운로드한 v3.33 매니페스트에 직접 적용해야 해요. 최소한 etcd_endpoints 값은 설정해야 해요.

  2. 다음 명령으로 롤링 업데이트를 시작하세요.

    kubectl apply --server-side --force-conflicts -f upgrade.yaml
    
  3. 다음과 같이 업그레이드 상태를 지켜보세요.

    watch kubectl get pods -n kube-system
    

    모든 Calico 팟의 상태가 Running인지 확인하세요.

    calico-kube-controllers-6d4b9d6b5b-wlkfj   1/1       Running   0          3m
    calico-node-hvvg8                          1/2       Running   0          3m
    calico-node-vm8kh                          1/2       Running   0          3m
    calico-node-w92wk                          1/2       Running   0          3m
    

    성공 (SUCCESS): calico-node 팟은 표시된 것처럼 READY 열에 1/2로 보고될 거예요.

  4. 기존 calicoctl 인스턴스를 제거하고, 새 calicoctl을 설치하고, 데이터스토어에 연결되도록 구성하세요.

  5. 다음 명령으로 Calico 버전 번호를 확인하세요.

    calicoctl version
    

    Cluster Version이 v3.33으로 반환되어야 해요.

  6. 애플리케이션 레이어 정책을 활성화했다면, 아래 지침에 따라 업그레이드를 완료하세요. Istio를 Calico와 함께 사용하지 않는다면 건너뛰세요.

  7. 축하해요! Calico v3.33으로 업그레이드했어요.

애플리케이션 레이어 정책이 활성화된 경우 업그레이드

Dikastes는 Calico의 다른 구성 요소와 같은 버전 체계를 따르지만, 업그레이드된 calico-node도 구버전 Dikastes와 함께 동작할 수 있어서 업그레이드 중에 데이터플레인 연결이 끊기지 않아요. calico-node 업그레이드가 끝나면 업데이트된 버전의 Dikastes로 서비스 팟을 다시 배포하기 시작하면 돼요.

애플리케이션 레이어 정책을 활성화했다면, 애플리케이션 팟에서 실행 중인 Dikastes 사이드카를 업그레이드하려면 다음 단계를 따르세요. Istio를 Calico와 함께 사용하지 않는다면 건너뛰세요.

  1. Istio 사이드카 인젝터 템플릿을 새 버전의 Dikastes를 사용하도록 업데이트하세요. 아래 <your Istio version>을 설치한 Istio의 전체 버전 문자열(예: 1.4.2)로 바꾸세요.

    kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.33.0/manifests/alp/istio-inject-configmap-<your Istio version>.yaml
    
  2. 새 템플릿이 적용되면 새로 만들어지는 팟은 업그레이드된 버전의 Dikastes를 사용해요. 각 서비스 배포를 롤링 업데이트해서 새 버전의 Dikastes로 옮기세요.

자동 호스트 엔드포인트로 마이그레이션

경고 (WARNING):

자동 호스트 엔드포인트에는 allow-all 프로필이 붙어 있어서 네트워크 정책이 없을 때 모든 트래픽을 허용해요. 예상치 못한 동작과 데이터 문제를 일으킬 수 있어요.

기존의 전체 인터페이스(all-interfaces) 호스트 엔드포인트를 Calico가 관리하는 자동 호스트 엔드포인트로 마이그레이션하려면 다음을 수행하세요.

  1. 기존 전체 인터페이스 호스트 엔드포인트의 라벨을 해당 Kubernetes 노드에 추가하세요. Calico는 노드에서 라벨을 동기화해서 자동 호스트 엔드포인트의 라벨을 관리해요. 기존 전체 인터페이스 호스트 엔드포인트의 라벨은 각각의 노드에 추가되어야 해요. 예를 들어 노드 node1의 기존 전체 인터페이스 호스트 엔드포인트에 environment: dev 라벨이 있다면 같은 라벨을 노드에 추가해야 해요.

    kubectl label node node1 environment=dev
    
  2. 자동 호스트 엔드포인트 활성화 방법 가이드에 따라 자동 호스트 엔드포인트를 활성화하세요. 자동 호스트 엔드포인트는 네트워크 정책이 없을 때 모든 트래픽을 허용하는 프로필이 붙은 채로 만들어진다는 점에 유의하세요.

    calicoctl patch kubecontrollersconfiguration default --patch ={"spec": {"controllers": {"node": {"hostEndpoint": {"autoCreate": "Enabled"}}}}}
    
  3. 오래된 전체 인터페이스 호스트 엔드포인트를 삭제하세요. Calico가 관리하는 호스트 엔드포인트는 여러 방법으로 구분할 수 있어요. 첫째, 자동 호스트 엔드포인트에는 projectcalico.org/created-by: calico-kube-controllers 라벨이 있어요. 둘째, 자동 호스트 엔드포인트 이름에는 -auto-hep 접미사가 붙어요.

    calicoctl delete hostendpoint <old_hostendpoint_name>
    

더 알아보기 (Learn more)

업그레이드 절차는 설치 방식(Helm, operator, 매니페스트, etcd)에 따라 달라지니 자기 설치에 맞는 섹션만 따라 하면 돼요. 업그레이드가 CRD 모드를 바꾸지 않는다는 점과, 업그레이드 후 구버전 calicoctl을 쓰지 말아야 한다는 점이 핵심이에요. 업그레이드 전에는 반드시 업그레이드 노트를 확인하세요.