Kubernetes в ServerPlus: запуск кластера и kubeconfig
Kubernetes в ServerPlus
Kubernetes в ServerPlus — это управляемый сервис на базе OpenStack Magnum. Вы заказываете кластер (в панели или через API), а платформа сама поднимает управляющий узел (control plane) и рабочие узлы как виртуальные машины в вашем проекте. Вам остаётся получить kubeconfig — файл с адресом и ключами доступа — и работать с кластером привычным kubectl.
Создание кластера
Кластер можно создать через веб-панель (проще для первого раза) или через API:
openstack coe cluster create my-cluster --cluster-template <шаблон> --master-count 1 --node-count 2 --keypair <ssh-ключ>
# статус (ждём CREATE_COMPLETE)
openstack coe cluster listВажно про сеть. Узлам кластера нужен выход в интернет — они скачивают образы контейнеров и компоненты Kubernetes. Поэтому сеть кластера должна иметь роутер с внешним шлюзом. На изолированной сети без egress кластер не соберётся. Проще всего доверить настройку сети мастеру создания в панели.
Получение kubeconfig
kubeconfig — это файл, в котором записаны адрес API кластера, корневой сертификат и ваш клиентский ключ. Именно по нему kubectl понимает, куда и под кем подключаться.
В панели: в карточке кластера есть кнопка скачивания kubeconfig. Через CLI:
openstack coe cluster config my-cluster
# создаст файл ./config и подскажет строку export KUBECONFIG=...kubeconfig = полный доступ к кластеру. Храните его как пароль: права chmod 600, не коммитьте в git.
Установка kubectl
# Linux
curl -LO "https://dl.k8s.io/release/$(curl -Ls https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
sudo install -m 0755 kubectl /usr/local/bin/kubectl
# macOS
brew install kubectlПодключение kubeconfig
Вариант A. Разово на сессию
export KUBECONFIG=$PWD/config
kubectl get nodesВариант B. Сделать конфигом по умолчанию
mkdir -p ~/.kube
cp ./config ~/.kube/config
chmod 600 ~/.kube/configВариант C. Несколько кластеров (merge)
Если у вас уже есть ~/.kube/config, не перезаписывайте его, а объедините:
KUBECONFIG=~/.kube/config:$PWD/config kubectl config view --flatten > /tmp/merged
mv /tmp/merged ~/.kube/config
kubectl config get-contexts
kubectl config use-context <имя-контекста>Первые команды
kubectl cluster-info
kubectl get nodes -o wide # ждём статус Ready
kubectl get pods -AЗапуск тестового приложения и публикация наружу:
kubectl create deployment web --image=nginx
kubectl expose deployment web --port=80 --type=LoadBalancer
kubectl get svc web -w # ждём EXTERNAL-IPСервис типа LoadBalancer создаёт балансировщик Octavia и выдаёт внешний адрес, по которому приложение доступно из интернета.
Частые вопросы
kubectl не подключается / таймаут. Проверьте, что у control plane есть внешний (floating) IP и что в kubeconfig адрес именно внешний, а не внутренний 10.x. С ноутбука внутренний адрес недоступен.
Узлы NotReady, кластер долго собирается. Почти всегда это отсутствие выхода в интернет у сети кластера — узлы не могут скачать образы. Нужна сеть с роутером и внешним шлюзом.
Ошибка сертификата x509. Обычно устаревший kubeconfig (кластер пересоздавали). Сгенерируйте заново: openstack coe cluster config my-cluster --force.
Изменить число узлов: openstack coe cluster resize my-cluster 3. Удалить кластер: openstack coe cluster delete my-cluster.
Безопасность
- kubeconfig — секрет: один файл даёт админ-доступ к кластеру. Права
chmod 600, вне git и мессенджеров. - Не раздавайте всем один admin-kubeconfig — заводите отдельные ServiceAccount и роли (RBAC) с ограниченными правами.
- Публикуйте наружу только нужные сервисы; остальное держите внутри кластера (тип
ClusterIP).