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

IP 풀 블록 크기 변경하기

원문 보기 위키 갱신

Calico는 기본으로 64개 주소짜리 IPAM 블록(IPv4는 /26, IPv6는 /122)을 써요. IP 공간을 더 효율적으로 쓰고 싶다면 블록 크기를 조정할 수 있는데, 설치 후에는 blockSize를 직접 고칠 수 없어서 임시 풀을 만들어 워크로드를 옮기는 절차를 밟아야 해요. 이 문서에서는 파드 연결성 중단을 최소화하면서 IP 풀 블록 크기를 바꾸는 방법을 안내해요.

출처: 문서

본문

큰 그림

IP 풀 블록 크기를 바꿔서 IP 풀 주소를 효율적으로 관리해요.

가치

설치 후에 IP 풀 블록 크기를 바꾸려면 순서가 정해진 단계를 밟아야 파드 연결성 중단을 최소화할 수 있어요.

개념

IP 풀이란

기본적으로 Calico는 64개 주소짜리 IPAM 블록을 사용해요 – IPv4는 /26, IPv6는 /122죠. 하지만 블록 크기는 IP 풀 주소 패밀리에 따라 바꿀 수 있어요.

  • IPv4: 20-32(포함)
  • IPv6: 116-128(포함)

설치 매니페스트에는 프로토콜당 기본 IP 풀을 하나만 둘 수 있어요. 이 예시에서는 IPv4용 IP 풀(/26) 하나와 IPv6용 IP 풀(/122) 하나가 있어요.

apiVersion: operator.tigera.io/v1
kind: Installation
metadata:
  name: default
spec:
    # Configures Calico networking.
  calicoNetwork:
    ipPools:
    - blockSize: 26
      cidr: 10.48.0.0/21
      encapsulation: IPIP
      natOutgoing: Enabled
      nodeSelector: all()
    - blockSize: 122
      cidr: 2001::00/64
      encapsulation: None
      natOutgoing: Enabled
      nodeSelector: all()

반면 다음 구성은 IPv4용 IP 풀이 두 개라서 유효하지 않아요.

apiVersion: operator.tigera.io/v1
kind: Installation
metadata:
  name: default
spec:
    # Configures Calico networking.
  calicoNetwork:
    ipPools:
    - blockSize: 26
      cidr: 10.48.0.0/21
      encapsulation: IPIP
      natOutgoing: Enabled
      nodeSelector: all()
    - blockSize: 31
      cidr: 10.48.8.0/21
      encapsulation: IPIP
      natOutgoing: Enabled
      nodeSelector: all()

IP 풀 블록 크기 늘리거나 줄이기

기본적으로 IP 풀의 Calico IPAM 블록 크기는 /26이에요. 기본 크기 /26에서 늘리려면 blockSize를 낮추면 돼요(예: /24). 기본 /26에서 줄이려면 숫자를 올리면 돼요(예: /28).

모범 사례: 설치 전에 IP 풀 블록 크기 바꾸기

blockSize 필드는 Calico 설치 후에 직접 편집할 수 없기 때문에, 파드 연결성 중단을 최소화하려면 설치 전에 IP 풀 블록 크기를 바꾸는 게 가장 좋아요.

시작하기 전에...

필수

Calico IPAM을 사용 중인지 확인하세요.

클러스터가 어떤 IPAM을 쓰는지 확실하지 않다면, 확인 방법은 설치 방식에 따라 달라져요.

Tab: Operator

기본 Installation 리소스에서 IPAM 플러그인을 조회할 수 있어요.

kubectl get installation default -o go-template --template {{.spec.cni.ipam.type}}

클러스터가 Calico IPAM을 사용 중이라면 위 명령은 Calico를 반환해요.

Tab: Manifest

Kubernetes 노드 중 하나에 SSH로 접속해서 CNI 구성을 살펴보세요.

cat /etc/cni/net.d/10-calico.conflist

다음 항목을 찾으세요:

         "ipam": {
              "type": "calico-ipam"
          },

이 항목이 있으면 Calico IPAM을 사용 중이에요. IPAM이 Calico가 아니거나 10-calico.conflist 파일이 없다면, 클러스터에서 이 기능들을 사용할 수 없어요.

방법

SECONDARY: 파드 연결성 중단을 최소화하려면 아래 단계를 순서대로 따르세요. 파드는 재배포될 때 연결성을 잃을 수 있고, 임시 풀에 있는 동안 외부 연결성을 잃을 수도 있어요. 또 파드가 삭제될 때 애플리케이션이 잠시 사용 불가 상태가 될 수 있어요(애플리케이션 유형에 따라 다름). 변경 계획을 이에 맞춰 세우세요.

큰 흐름은 다음과 같아요:

  1. 임시 IP 풀 만들기 참고: 임시 IP 풀은 기존 풀과 겹치면 안 돼요.
  2. 기존 IP 풀 비활성화하기 참고: IP 풀을 비활성화하면 새 IP 주소 할당만 막을 뿐, 기존 파드의 네트워킹은 영향을 받지 않아요.
  3. 기존 IP 풀에서 파드 삭제하기 풀을 비활성화하기 전에 기존 IP 풀로 생성된 새 파드도 포함돼요. 새 파드가 임시 IP 풀에서 주소를 받는지 확인하세요.
  4. 기존 IP 풀 삭제하기
  5. 원하는 블록 크기로 새 IP 풀 만들기
  6. 임시 IP 풀 비활성화하기
  7. 임시 IP 풀에서 파드 삭제하기
  8. 임시 IP 풀 삭제하기

튜토리얼

다음 단계에서는 Kubernetes 클러스터의 기본 CIDR 블록 크기가 /26이라고 가정해요. 풀을 더 효율적으로 쓰기 위해 블록 크기를 /28로 줄이고 싶어요.

임시 IP 풀 만들기

CIDR 범위 10.0.0.0/16인 새 IPPool을 추가해요.

temporary-pool.yaml을 만들어요.

apiVersion: projectcalico.org/v3
kind: IPPool
metadata:
  name: temporary-pool
spec:
  cidr: 10.0.0.0/16
  ipipMode: Always
  natOutgoing: true

변경 사항을 적용해요.

calicoctl apply -f temporary-pool.yaml

임시 IP 풀을 확인해 봐요.

calicoctl get ippool -o wide
NAME                  CIDR             NAT    IPIPMODE   DISABLED
default-ipv4-ippool   192.168.0.0/16   true   Always     false
temporary-pool        10.0.0.0/16      true   Always     false

기존 IP 풀 비활성화하기

기본 풀의 할당을 비활성화해요.

calicoctl patch ippool default-ipv4-ippool -p '{"spec": {"disabled": true}}'

변경 사항을 확인해요.

calicoctl get ippool -o wide
NAME                  CIDR             NAT    IPIPMODE   DISABLED
default-ipv4-ippool   192.168.0.0/16   true   Always     true
temporary-pool        10.0.0.0/16      true   Always     false

기존 IP 풀에서 파드 삭제하기

이 예시에서는 coredns가 유일한 파드예요. 파드가 여러 개라면 클러스터의 모든 파드에 삭제를 트리거하면 돼요.

kubectl delete pod -n kube-system coredns-6f4fd4bdf-8q7zp

명령 하나로 모든 파드를 재시작할 수도 있어요.

WARNING: 다음 명령은 중단을 일으키고, 배포된 파드 수에 따라 몇 분 걸릴 수 있어요.

kubectl delete pod -A --all

기존 IP 풀 삭제하기

이제 파드가 새 범위에서 IP를 받는 걸 확인했으니 기존 풀을 안전하게 삭제할 수 있어요.

calicoctl delete ippool default-ipv4-ippool

원하는 블록 크기로 새 IP 풀 만들기

이 단계에서는 IPPool을 새 블록 크기(/28)로 업데이트해요.

apiVersion: projectcalico.org/v3
kind: IPPool
metadata:
  name: default-ipv4-ippool
spec:
  blockSize: 28
  cidr: 192.0.0.0/16
  ipipMode: Always
  natOutgoing: true

변경 사항을 적용해요.

calicoctl apply -f pool.yaml

임시 IP 풀 비활성화하기

calicoctl patch ippool temporary-pool -p '{"spec": {"disabled": true}}'

임시 IP 풀에서 파드 삭제하기

이 예시에서는 coredns가 유일한 파드예요. 파드가 여러 개라면 클러스터의 모든 파드에 삭제를 트리거하면 돼요.

kubectl delete pod -n kube-system coredns-6f4fd4bdf-8q7zp

명령 하나로 모든 파드를 재시작할 수도 있어요.

WARNING: 다음 명령은 중단을 일으키고, 배포된 파드 수에 따라 몇 분 걸릴 수 있어요.

kubectl delete pod -A --all

다음 명령을 실행해서 파드와 블록 크기가 올바른지 검증해요:

kubectl get pods --all-namespaces -o wide
calicoctl ipam show --show-blocks

임시 IP 풀 삭제하기

임시 IP 풀을 삭제해서 IP 풀을 정리해요.

calicoctl delete pool temporary-pool

더 알아보기 (Learn more)

블록 크기는 풀 생성 시점에만 정할 수 있으니, 가능하면 설치 전에 결정하는 게 제일 편해요. 임시 풀의 CIDR이 기존 풀과 절대 겹치지 않도록 주의하세요. 마지막에는 calicoctl ipam show --show-blocks로 블록 크기가 의도대로 바뀌었는지 꼭 확인하세요.