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

Этап 7: Финальная проверка кластера

7.1. Проверка нод

kubectl get nodes -o wide

Все ноды должны быть Ready.

Пример вывода:

NAME             STATUS   ROLES           AGE   VERSION   INTERNAL-IP       OS-IMAGE             KERNEL-VERSION
k8scontrolplane01   Ready    control-plane   1h    v1.35.1   192.168.139.105   Ubuntu 24.04.4 LTS   6.17.8-orbstack
k8scontrolplane02   Ready    control-plane   20m   v1.35.1   192.168.139.152   Ubuntu 24.04.4 LTS   6.17.8-orbstack
k8scontrolplane03   Ready    control-plane   15m   v1.35.1   192.168.139.188    Ubuntu 24.04.4 LTS   6.17.8-orbstack
k8sworker01         Ready    worker          5m    v1.35.1   192.168.139.69    Ubuntu 24.04.4 LTS   6.17.8-orbstack
k8sworker02         Ready    worker          5m    v1.35.1   192.168.139.184   Ubuntu 24.04.4 LTS   6.17.8-orbstack

7.2. Проверка системных pod'ов

kubectl get pods -A -o wide

Должно быть:

  • etcd-controlplaneXX (3 шт, Running)
  • kube-apiserver-controlplaneXX (3 шт, Running)
  • kube-controller-manager-controlplaneXX (3 шт, Running)
  • kube-scheduler-controlplaneXX (3 шт, Running)
  • kube-vip-XXX (3 шт на control plane, Running)
  • cilium-XXX (5 шт на всех нодах, Running)
  • cilium-operator-XXX (1 шт, Running)
  • cilium-envoy-XXX (5 шт на всех нодах, Running)
  • coredns-XXX (2 шт, Running)

7.3. Проверка VIP и kube-vip

# Проверяем все pod'ы kube-vip
kubectl get pods -n kube-system -l app=kube-vip -o wide

# Проверяем кто лидер
kubectl get lease -n kube-system plndr-cp-lock -o yaml | grep holderIdentity

# На ноде-лидере проверяем VIP
# (выполните на той ноде, которая указана в holderIdentity)
ip addr show eth0 | grep 192.168.139.101
# VIP должен быть только на ноде-лидере

7.4. Тестирование VIP failover

ВАЖНО: Это тест отказоустойчивости. Делайте осторожно!

# На k8scontrolplane01 смотрим кто лидер
kubectl get lease -n kube-system plndr-cp-lock -o jsonpath='{.spec.holderIdentity}'
# Пример вывода: k8scontrolplane01

# Допустим лидер - k8scontrolplane01. Останавливаем kubelet НА ЭТОЙ НОДЕ
# НА ЛИДЕР НОДЕ (например k8scontrolplane01):
sudo systemctl stop kubelet

# Ждем 10-15 секунд

# На другой control plane ноде (например k8scontrolplane02) проверяем
kubectl get lease -n kube-system plndr-cp-lock -o jsonpath='{.spec.holderIdentity}'
# Лидер должен смениться, например на k8scontrolplane02

# Проверяем что VIP переехал
ip addr show eth0 | grep 192.168.139.101
# VIP должен появиться на новой ноде-лидере

# Проверяем доступ к API через VIP
kubectl get nodes
# Должно работать без перебоев

# Возвращаем kubelet на старой ноде
# НА ТОЙ ЖЕ НОДЕ где останавливали:
sudo systemctl start kubelet

# Проверяем что нода вернулась в кластер
kubectl get nodes

7.5. Проверка etcd кластера

# Health check всех членов
sudo etcdctl \
  --endpoints=https://192.168.139.105:2379,https://192.168.139.152:2379,https://192.168.139.188:2379 \
  --cacert=/etc/kubernetes/pki/etcd/ca.crt \
  --cert=/etc/kubernetes/pki/etcd/server.crt \
  --key=/etc/kubernetes/pki/etcd/server.key \
  endpoint health --cluster -w table

# Должно показать:
# +------------------------------+--------+-----------+-------+
# |           ENDPOINT           | HEALTH |   TOOK    | ERROR |
# +------------------------------+--------+-----------+-------+
# | https://192.168.139.105:2379 |   true | 5.40107ms |       |
# | https://192.168.139.152:2379 |   true | 9.33061ms |       |
# | https://192.168.139.188:2379  |   true | 8.21044ms |       |
# +------------------------------+--------+-----------+-------+

7.6. Тестирование сети между pod'ами

# Создаем тестовый deployment
kubectl create deployment nginx --image=nginx --replicas=3

# Ждем запуска
kubectl wait --for=condition=ready pod -l app=nginx --timeout=60s

# Создаем Service
kubectl expose deployment nginx --port=80 --type=ClusterIP

# Проверяем что pod'ы запустились на разных нодах
kubectl get pods -l app=nginx -o wide

# Получаем ClusterIP сервиса
kubectl get svc nginx

# Тестируем доступ к Service изнутри кластера
kubectl run -it --rm debug --image=busybox --restart=Never -- wget -O- nginx
# Должно вернуть HTML страницу nginx

# Чистим
kubectl delete deployment nginx
kubectl delete service nginx

7.7. Проверка Cilium connectivity

# Запускаем connectivity test (займет несколько минут)
cilium connectivity test --test-concurrency=1

# Должно пройти все тесты без ошибок

Если тест слишком долгий, можно остановить Ctrl+C и удалить тестовые namespace:

kubectl delete ns cilium-test cilium-test-1 cilium-test-ccnp1 cilium-test-ccnp2