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개 이상의 가상 서브넷을 지원할 수 있음.
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 종류에 따라 어떻게 관리하는지 확인해보자
Flannel 관련 코드
예외 처리를 확인해보자
사용할 수 있는 경우
-
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 사이 인지만 확인함.
관련 발생할 수 있는 에러
상황
클러스터 생성 시 아래와 같이 설정함.
-
pod network cidr : 10.100.0.0/26
-
subnetlength : 28
이후 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 설정 참고
반응형