Установка Portainer на Kubernetes + Ubuntu
Установка Portainer на Kubernetes — отличный способ получить визуальный веб-интерфейс для управления вашим кластером, контейнерами, образами, сервисами и т.д.
Portainer предоставляет Portainer Business и Portainer CE (Community Edition) — мы установим бесплатную CE версию.
✅ Цели
- Установить Portainer CE в Kubernetes
- Доступ через NodePort или Ingress
- Сохранение данных в
PersistentVolume
🛠 Шаг 1: Создание namespace
kubectl create namespace portainer
📦 Шаг 2: Установка Portainer
Portainer официально предоставляет манифест для Kubernetes:
kubectl apply -f https://downloads.portainer.io/ce5-30/k8s-portainer.yaml -n portainer
🔁 Версия
ce5-30
— это Portainer CE для Kubernetes.
Актуальную ссылку всегда можно найти: https://docs.portainer.io/start/install/server/kubernetes/beginners
🔍 Шаг 3: Проверка установки
kubectl get pods -n portainer
Ожидаемый вывод:
NAME READY STATUS RESTARTS AGE
portainer-7f55548b4c-abcde 1/1 Running 0 2m
🌐 Шаг 4: Доступ к Portainer
По умолчанию Portainer устанавливается с Service
типа LoadBalancer.
Если у вас нет Ingress-контроллера или облачного провайдера (например, в локальном кластере), лучше изменить тип сервиса на NodePort.
Вариант A: Использовать NodePort
Измените тип сервиса:
kubectl patch svc portainer -n portainer -p '{"spec": {"type": "NodePort"}}'
Посмотрите, на каком порту он запущен:
kubectl get svc -n portainer
Пример вывода:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
portainer NodePort 10.96.123.45 <none> 9000:32000/TCP 5m
Теперь вы можете открыть в браузере:
http://<IP-вашего-узла>:32000
Вариант B: Использовать Ingress (опционально)
Если у вас настроен Ingress (например, Nginx Ingress Controller), создайте Ingress-ресурс:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: portainer-ingress
namespace: portainer
annotations:
nginx.ingress.kubernetes.io/ssl-redirect: "false"
spec:
ingressClassName: nginx
rules:
- host: portainer.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: portainer
port:
number: 9000
Примените:
kubectl apply -f ingress.yaml
Добавьте в /etc/hosts
:
<ваш-внешний-ip> portainer.example.com
Откройте: http://portainer.example.com
💾 Шаг 5: Настройка первого входа
- Перейдите в браузер:
http://<ваш-адрес>:32000
- Создайте учётную запись администратора (первый вход).
- Выберите подключение: Local (управление текущим кластером).
- Готово! Теперь вы можете управлять неймспейсами, подами, сервисами, томами и т.д.
🧼 (Опционально) Удаление Portainer
kubectl delete namespace portainer
⚠️ Это удалит все данные, если не используется внешний PVC.
📁 Сохранение данных (PVC)
По умолчанию Portainer использует emptyDir
. Чтобы данные сохранялись после перезапуска пода — настройте PersistentVolume.
Пример PVC:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: portainer-pvc
namespace: portainer
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
Примените:
kubectl apply -f pvc.yaml
Затем измените Deployment Portainer, чтобы использовать этот PVC (нужно модифицировать оригинальный манифест).
🚀 Альтернатива: Установка через Helm
Portainer также доступен в Helm-репозитории:
helm repo add portainer https://portainer.github.io/k8s/
helm repo update
helm install portainer portainer/portainer \
--namespace portainer --create-namespace \
--set service.type=NodePort
✅ Итог
Теперь у вас: - Работающий Portainer в Kubernetes - Веб-интерфейс для управления кластером - Возможность масштабирования и мониторинга