Этап 3: Установка Cilium CNI¶
Что такое Cilium:
- CNI (Container Network Interface) плагин
- Обеспечивает сеть между pod'ами
- Заменяет kube-proxy (kubeProxyReplacement=true)
- Использует eBPF для высокой производительности
Почему Cilium вместо Calico/Flannel:
- Современный, основан на eBPF
- Встроенная замена kube-proxy
- Network policies
- Service Mesh capabilities
3.1. Установка Cilium CLI¶
Рекомендация
Установите Cilium CLI на все control plane ноды для удобства управления и диагностики. Это позволит запускать команды cilium с любой master ноды.
# Получаем последнюю stable версию Cilium CLI
CILIUM_CLI_VERSION=$(curl -s https://raw.githubusercontent.com/cilium/cilium-cli/main/stable.txt)
CLI_ARCH=arm64
# Скачиваем
curl -L --fail --remote-name-all \
https://github.com/cilium/cilium-cli/releases/download/${CILIUM_CLI_VERSION}/cilium-linux-${CLI_ARCH}.tar.gz{,.sha256sum}
# Проверяем checksum
sha256sum --check cilium-linux-${CLI_ARCH}.tar.gz.sha256sum
# Устанавливаем
sudo tar xzvfC cilium-linux-${CLI_ARCH}.tar.gz /usr/local/bin
# Чистим
rm cilium-linux-${CLI_ARCH}.tar.gz{,.sha256sum}
# Проверяем
cilium version --client
3.2. Установка Cilium в кластер¶
Параметры установки¶
- --version 1.18.7 - конкретная версия (не latest для стабильности)
- ipam.mode=kubernetes - IP адреса для pod'ов берутся из podSubnet кластера
- kubeProxyReplacement=true - Cilium полностью заменяет kube-proxy
- k8sServiceHost/Port - как Cilium подключается к API server (через VIP)
cilium install --version 1.18.7 \
--set ipam.mode=kubernetes \
--set kubeProxyReplacement=true \
--set k8sServiceHost=kube-api.orb.local \
--set k8sServicePort=6443
3.3. Проверка Cilium¶
# Ждем готовности
cilium status --wait
# Должно показать:
# /¯¯\
# /¯¯\__/¯¯\ Cilium: OK
# \__/¯¯\__/ Operator: OK
# /¯¯\__/¯¯\ Envoy DaemonSet: OK
# Проверяем что нода стала Ready
kubectl get nodes
# STATUS должен быть Ready (был NotReady пока не было CNI)
# Проверяем pod'ы Cilium
kubectl get pods -n kube-system -l k8s-app=cilium
3.4. Проверка что kube-proxy не создался¶
Благодаря флагу --skip-phases=addon/kube-proxy при kubeadm init, kube-proxy вообще не должен был создаться:
# Проверяем что kube-proxy отсутствует
kubectl get pods -n kube-system | grep proxy
# Ничего не должно быть
kubectl get daemonset -n kube-system
# kube-proxy не должен быть в списке
Если kube-proxy все-таки появился (забыли --skip-phases), удалите его:
# Удаляем DaemonSet
kubectl delete daemonset -n kube-system kube-proxy
# Удаляем ConfigMap
kubectl delete configmap -n kube-system kube-proxy
# Проверяем
kubectl get pods -n kube-system | grep proxy
# Ничего не должно быть