Этап 7: Финальная проверка кластера¶
7.1. Проверка нод¶
Все ноды должны быть 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'ов¶
Должно быть:
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: