다른 CNI에 비해 cilium을 쓰는 이유는 ebpf 때문
kube-proxy와 cilium 사이의 iptable 충돌 문제로 예상되므로 flannel로 CNI 변경
flannel Github
Flannel is a simple and easy way to configure a layer 3 network fabric designed for Kubernetes.
# 아래 명령어를 통해 cilium을 삭제한다
kubectl delete -f https://raw.githubusercontent.com/cilium/cilium/1.7.2/install/kubernetes/quick-install.yaml
# kubectl을 통해 flannel 설치
kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml
# helm을 통한 flannel 설치
# Needs manual creation of namespace to avoid helm error
kubectl create ns kube-flannel
kubectl label --overwrite ns kube-flannel pod-security.kubernetes.io/enforce=privileged
helm repo add flannel https://flannel-io.github.io/flannel/
helm install flannel --set podCidr="10.244.0.0/16" --namespace kube-flannel flannel/flannel
mkdir -p /opt/cni/bin
curl -O -L https://github.com/containernetworking/plugins/releases/download/v1.2.0/cni-plugins-linux-amd64-v1.2.0.tgz
tar -C /opt/cni/bin -xzf cni-plugins-linux-amd64-v1.2.0.tgz
# flannel 삭제
# 추후 CNI 변경을 위해 첨부한다
kubectl delete -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml
kubeadm reset
systemctl stop kubelet
# flannel 관련 파일 삭제
rm -rf /var/lib/cni/
rm -rf /etc/cni/
rm -rf /run/flannel
# kube 설정 파일 삭제
rm -rf $HOME/.kube
# 네트워크 설정 삭제
ifconfig cni0 down
ip link delete cni0
ip link delete flannel.1
아래 명령어들을 통해 flannel이 정상적으로 설치되었는지 알 수 있다
하지만 아래와 같이 flannel을 설치하고도 coreDNS가 pending되어
다른 CNI를 적용해보는 방향으로 변경하였다
kubectl get pod -A
kubectl get pod -n kube-system
NAME READY STATUS RESTARTS AGE
coredns-5dd5756b68-h5hq7 0/1 Pending 0 3m9s
coredns-5dd5756b68-rwvg2 0/1 Pending 0 3m9s
etcd-master.example.com 1/1 Running 0 3m16s
kube-apiserver-master.example.com 1/1 Running 0 3m13s
kube-controller-manager-master.example.com 1/1 Running 0 3m13s
kube-proxy-7x2mp 1/1 Running 0 3m9s
kube-scheduler-master.example.com 1/1 Running 0 3m13
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
하지만 calico node의 로그를 확인해보면 아래와 같은 에러 메세지가 나온다
# kubectl logs calico-node-fwwlm -n kube-system
Defaulted container "calico-node" out of: calico-node, upgrade-ipam (init), install-cni (init), mount-bpffs (init)
Error from server: no preferred addresses found; known addresses: []
Trouble Shooting을 통해 cilium의 잔재를 제거한다
ifconfig
ifconfig cilium_host down
ifconfig cilium_net down
ifconfig cilium_vxlan down
ip link
ip link delete cilium_net
ip link delete cilium_host
ip link delete cilium_vxlan
이후 calico를 삭제하고 재설치하여 pod의 상태를 점검한다
kubectl delete -f https://docs.projectcalico.org/manifests/calico.yaml
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
아래와 같이 BIRD socket에 접속할 수 없다는 오류가 발생한다
kubectl describe pod calico-node-tfwhq -n kube-system
Readiness probe failed: calico/node is not ready: BIRD is not ready: Error querying BIRD: unable to connect to BIRDv4 socket: dial unix /var/run/calico/bird.ctl: connect: connection refused
Tigera 공식 문서를 참조하여 설치를 진행하였지만
sudo kubeadm init --pod-network-cidr=192.168.0.0/16
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.26.3/manifests/tigera-operator.yaml
kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.26.3/manifests/custom-resources.yaml
# 모든 pod들이 RUNNIG될 때가지 기다리기
watch kubectl get pods -n calico-system
kubectl taint nodes --all node-role.kubernetes.io/control-plane-
kubectl taint nodes --all node-role.kubernetes.io/master-
kubectl get nodes -o wide
이전과 동일한 이유로 CNI 설치가 이루어지지 않음
추후 완전히 master node를 초기화하고 다시 설치를 진행할 예정