Skip to content

Установка 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: Настройка первого входа

  1. Перейдите в браузер: http://<ваш-адрес>:32000
  2. Создайте учётную запись администратора (первый вход).
  3. Выберите подключение: Local (управление текущим кластером).
  4. Готово! Теперь вы можете управлять неймспейсами, подами, сервисами, томами и т.д.

🧼 (Опционально) Удаление 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 - Веб-интерфейс для управления кластером - Возможность масштабирования и мониторинга