Kubernetes/Flannel

Flannel Subentlen, Network 설정

이쿠우우 2024. 7. 15. 21:11
반응형

 

Flannel Subentlen, Network 설정

 
변경 방법
  net-conf.json: |
    {
      "Network": "10.100.0.0/16",
      "Subnetlen": 24,
      "Backend": {
        "Type": "$FLANNEL_BACKEND"
      }
    }
설정 중 Network, Subnetlen에 원하는 값을 입력.
 

설정 예시

Netowrk가 "10.100.0.0/16"로 설정되고 Subnetlen이 24로 설정된다면
CIDR 블록은 256개 이상의 가상 서브넷을 지원할 수 있음.
 
CIDR 표기법에서 "10.100.0.0/16"은 IP 주소 범위가 "10.244.0.0"에서 "10.244.255.255"까지이며, 총 65,536개의 IP 주소가 포함됨.
 
Flannel은 기본적으로 각 노드에 대해 하나의 가상 서브넷을 할당함.
그러므로 최소한 네 개의 가상 서브넷이 필요함.
"10.244.0.0/16"과 같은 CIDR 블록은 이러한 요구 사항을 충족시킬 수 있음.
예를 들어, Flannel 구성에서 "10.244.0.0/16" CIDR 블록을 사용하면,
다음과 같은 4개 이상의 가상 서브넷을 구성할 수 있음
이렇게 구성하면 Flannel이 정상적으로 작동할 수 있도록 네 개 이상의 가상 서브넷을 제공할 수 있음
 

주의 사항

만약 아래와 같이 prefix가 24로 동일하거나
  • "Network": "10.100.0.0/24"
  • "Subnetlen": 24
아래와 같이 Network의 prefix가 더 큰 경우
  • "Network": "10.100.0.0/26"
  • "Subnetlen": 24
 
flannel 실행 시 아래와 같은 에러가 발생함
Network must be able to accommodate at least four subnets
해당 에러는 Flannel 구성에서 Network 설정이 너무 작아서 (CIDR 블록이 너무 작아서)
노드 간 통신을 위한 가상 네트워크 대역폭을 충분히 지원할 수 없을 때 발생함.
 
kubernetes subnetlen 설정에 의하면
pod network cidr prefix 설정 가능 범위 : 8 ~ 24 (default : 16)
subnetlen : 그 이상으로 설정해야함, CNI 종류에 따라 어떻게 관리하는지 확인해보자

예외 처리를 확인해보자
 
사용할 수 있는 경우
  • 1 <= SubnetLen <= 30
    • SubnetLen 은 1 이상이여야함.
    • SubnetLen 은 30 이하이여야함.
  • (pod network cidr prefix + 2)  <= SubnetLen
    • SubnetLen 은 pod network cidr prefix보다 2이상의 값이 되어야함.
네트워크가 /28보다 작으면(29, 30, 31, 32인 경우) 네트워크가 flannel에 대해 충분히 크지 않으므로 오류를 반환합니다.
 
기본적으로 각 호스트에 최소 /24를 부여합니다(네트워크가 최소 4개의 호스트를 지원할 만큼 충분히 큰 경우)
 
그렇지 않으면 네트워크가 너무 작아 각 호스트에 /24를 제공할 수 없는 경우 네트워크를 4개로 분할하면 됩니다.
 
각 서브넷에는 최소 4개의 주소(/30)가 필요하고 네트워크는 첫 번째 서브넷이 사용되지 않으므로 최소 4개를 수용해야 하므로 두 개로 분할하면 사용 가능한 호스트 하나만 제공됩니다.
 
따라서 최소 유용한 PrefixLen은 /28입니다.

 

 

Calico 관련 코드

calico는 20 ~32 사이 인지만 확인함.

 

 

관련 발생할 수 있는 에러

상황

클러스터 생성 시 아래와 같이 설정함.
이후 kube-controller-manager가 실행되지 않고 계속 재기동되어 pod가 할당되지 않음...

에러명

Apr  6 11:59:22 iksoon-subnet-24-master-0 bash[4680]: F0406 02:59:22.008558      11 node_ipam_controller.go:110] Controller: Invalid --cluster-cidr, mask size of cluster CIDR must be less than or equal to --node-cidr-mask-size configured for CIDR family
원인
"--node-cidr-mask-size" 값에 설정되어있는 값 보다
"--pod-network-cidr" 값에 설정되어있는 CIDR prefix 크기가 더 커서 에러가 발생함.
ex) node-cidr-mask-size : 24,  pod-network-cidr : 10.100.0.0/26  인 경우 에러 발생

 

해결책

kube-controller-manager에 설정되는 "--node-cidr-mask-size" 값보다
--pod-network-cidr 설정의 CIDR Prefix 값이 같거나 작아도록 조정해야함.
 
--node-cidr-mask-size 설정 참고
반응형