Перейти к содержанию

Этап 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
# Ничего не должно быть