Kubernetes/Flannel

Flannel 배포 오류 : pod cidr not assigned

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

환경

kubernetes version : 1.25.4
flannel version : v1.1.0
 

상황

flannel 배포 시 flannel daemonset pod가 error 상태로 실행이 안됨.
특이 사항으로
cluster pod cider 은 10.110.0.0/16으로 설정되어있음
해당 설정은 kube-controller를 보고 확인함

flannel cfg comfigmap 도 10.110.0.0/16으로 설정함
---
kind: ConfigMap
apiVersion: v1
metadata:
  name: kube-flannel-cfg
  namespace: kube-flannel
  labels:
    tier: node
    app: flannel
data:
  cni-conf.json: |
    {
      "name": "cbr0",
      "cniVersion": "0.3.1",
      "plugins": [
        {
          "type": "flannel",
          "delegate": {
            "hairpinMode": true,
            "isDefaultGateway": true
          }
        },
        {
          "type": "portmap",
          "capabilities": {
            "portMappings": true
          }
        }
      ]
    }
  net-conf.json: |
    {
      "Network": "10.110.0.0/16",
      "Backend": {
        "Type": "vxlan"
      }
    }
---
이와 같이 cluster의 pod cidr과 flannel의 cidr 설정을 동일하게 하면 정상 생성 될 줄 알았는데
배포가 안됨...

 

 
Error log
Defaulted container "kube-flannel" out of: kube-flannel, install-cni-plugin (init), install-cni (init)
I1202 06:49:52.276232       1 main.go:204] CLI flags config: {etcdEndpoints:http://127.0.0.1:4001,http://127.0.0.1:2379 etcdPrefix:/coreos.com/network etcdKeyfile: etcdCertfile: etcdCAFile: etcdUsername: etcdPassword: version:false kubeSubnetMgr:true kubeApiUrl: kubeAnnotationPrefix:flannel.alpha.coreos.com kubeConfigFile: iface:[] ifaceRegex:[] ipMasq:true ifaceCanReach: subnetFile:/run/flannel/subnet.env publicIP: publicIPv6: subnetLeaseRenewMargin:60 healthzIP:0.0.0.0 healthzPort:0 iptablesResyncSeconds:5 iptablesForwardRules:true netConfPath:/etc/kube-flannel/net-conf.json setNodeNetworkUnavailable:true}
W1202 06:49:52.276312       1 client_config.go:617] Neither --kubeconfig nor --master was specified.  Using the inClusterConfig.  This might not work.
I1202 06:49:52.376410       1 kube.go:126] Waiting 10m0s for node controller to sync
I1202 06:49:52.376489       1 kube.go:431] Starting kube subnet manager
I1202 06:49:53.377331       1 kube.go:133] Node controller sync successful
I1202 06:49:53.377362       1 main.go:224] Created subnet manager: Kubernetes Subnet Manager - iksoon-worker.novalocal
I1202 06:49:53.377369       1 main.go:227] Installing signal handlers
I1202 06:49:53.377508       1 main.go:467] Found network config - Backend type: vxlan
I1202 06:49:53.377541       1 match.go:206] Determining IP address of default interface
I1202 06:49:53.378390       1 match.go:259] Using interface with name eth0 and address 192.168.0.49
I1202 06:49:53.378430       1 match.go:281] Defaulting external address to interface address (192.168.0.49)
I1202 06:49:53.378535       1 vxlan.go:138] VXLAN config: VNI=1 Port=0 GBP=false Learning=false DirectRouting=false
E1202 06:49:53.378819       1 main.go:327] Error registering network: failed to acquire lease: node "iksoon-worker.novalocal" pod cidr not assigned
I1202 06:49:53.378977       1 main.go:447] Stopping shutdownHandler...
W1202 06:49:53.379009       1 reflector.go:347] github.com/flannel-io/flannel/subnet/kube/kube.go:432: watch of *v1.Node ended with: an error on the server ("unable to decode an event from the watch stream: context canceled") has prevented the request from succeeding
아래 log가 원인임
Error registering network: failed to acquire lease: node "iksoon-worker.novalocal" pod cidr not assigned
 

원인

controller에 cidr이 설정되어있으면 node에 podCIDR labels가 설정됨
이를 확인해봤는데 조회가 안됨.
확인 명령어
kubectl get nodes -o jsonpath='{.items[*].spec.podCIDR}'

 

결과

조회되지 않음.
node에 podCIDR 설정이 빠져있음.. 왜빠져있는지는 모르겠음
해당 설정이 빠져있어서 위 증상이 발생하는 것으로 분석됨
 

해결책

node에 pod cidr 를 수동으로 추가
kubectl patch node "node 이름" -p '{"spec":{"podCIDR":"10.110.0.0/24"}}'
주의 node마다 cidr 설정 ip주소는 다르게 해야함
ex)
master : 10.110.0.0/24
worker 1 : 10.110.1.0/24
worker 2 : 10.110.2.0/24
 
그리고 podCIDR 필드는 한번 설정하면 변경 불가능함으로 신중히 설정해야함.
 
위와같이 추가 하면 flannel 정상 배포 됨.
반응형