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

Запуск в Kubernetes


Важная информация

Внимание!

  • Начиная с версии 4.6.1 изменился репозиторий для подключения с helm !
  • Начиная с версии 4.6.1 все предыдущие версии чарта помечены как deprecated и не рекомендуются к развертыванию!
  • Начиная с версии 4.6.1 версия чарта и версия ПО GitFlic совпадают
  • Новый чарт не совместим со старыми версиями чарта (версии до 4.6.1)!

Установка развертывания

Внимание!

  • Для установки enterprise версии необходимо предварительно загрузить из личного кабинета образ gitflic-server-ee:<Актуальный тег> установить его в ваш реестр контейнеров и указывать его в качестве образа для ПО GitFlic
  • По умолчанию используется storageClass.name=default.
  • Будьте внимательны! В большинстве платформ контейнеризации параметр reclaimPolicy по умолчанию установлен в Delete!

С изменениями в версиях и возможностями Helm чарта можно ознакомиться в официальном репозитории

Быстрый запуск

helm install gitflic  oci://registry.gitflic.ru/helm/project/gitflic/gitflic-server-helm/gitflic-server \
    --namespace gitflic \
    --create-namespace

В данном случае будет развернуто последнее доступное на текущий момент ПО GitFlic. Будет применена конфигурация хранилища (storageClass) установленная по умолчанию в кластере. Сертификаты будут сгенерированы автоматически. Конфигурация для ingress контролера не будет применена. Elasticsearch и его функционал не будут установлены и применены

Доступ к web интерфейсу

kubectl -n gitflic port-forward deployments/gitflic 8080:8080

Доступ к ssh серверу

kubectl -n gitflic port-forward deployments/gitflic 2255:2255

Изменение параметров приложения

Изменение baseUrl приложения

Параметр baseUrl служит для генерации ссылок внутри приложения и должен содержать в себе конечный домен или хост, по которому будет осуществляться доступ к приложению. Параметр должен быть сформирован с учетом протокола и порта. Данный параметр будет записан в configMap приложения. При изменении данного параметра, необходимо перезапустить приложение GitFlic что бы изменения вступили в силу!

Для изменения baseUrl создайте файл values.yaml или добавьте в уже существующий директивы:

# values.yaml
gitflic:
  baseUrl: "https://example.my.domain:8080"

Как получить автоматически сгенерированные сертификаты и ключи

kubectl -n gitflic get secrets gitflic-cert -o jsonpath='{ .data.key\.pem }'  | base64 -d > ./key.pem
kubectl -n gitflic get secrets gitflic-cert -o jsonpath='{ .data.key\.pem\.pub }'  | base64 -d > ./key.pem.pub
kubectl -n gitflic get secrets gitflic-cert -o jsonpath='{ .data.private_key\.pem }'  | base64 -d > ./private_key.pem
kubectl -n gitflic get secrets gitflic-cert -o jsonpath='{ .data.public_key\.pem }'  | base64 -d > ./public_key.pem

После выполнения команд, будут созданы следующие файлы:

  • key.pem - Приватный ключ для SSH сервера платформы GitFlic
  • key.pem.pub - Публичный ключ для SSH сервера платформы GitFlic
  • private_key.pem - Приватный ключ для работы платформы GitFlic
  • public_key.pem - Публичный ключ для работы платформы GitFlic

Сохраните эти ключи в надежном месте. Изменение этих ключей в процессе эксплуатации платформы GitFlic запрещено и может привести к неработоспособности платформы !

Как установить собственные сертификаты и ключи

Создайте ключевые пары для SSH сервера и сервисов платформы GitFlic:

ssh-keygen -t ed25519 -N "" -q -f key.pem
openssl genpkey -algorithm RSA -out private_key.pem -pkeyopt rsa_keygen_bits:2048
openssl rsa -pubout -in private_key.pem -out public_key.pem

Добавьте дополнительные параметры к команде установки:

helm install gitflic  oci://registry.gitflic.ru/helm/project/gitflic/gitflic-server-helm/gitflic-server \
    --namespace gitflic \
    --create-namespace \
    --set generate_certificate=false \
    --set-file gitflic.certs.key=key.pem \
    --set-file gitflic.certs.keyPub=key.pem.pub \
    --set-file gitflic.certs.public_key=public_key.pem \
    --set-file gitflic.certs.private_key=private_key.pem

Включение "Поиск по коду"

По умолчанию функционал поиска по коду отключен. Данный функционал требует подключения elasticsearch к развертыванию и конфигурирования приложения для работы с ним.

Для включения функционала поиска по коду создайте файл values.yaml или добавьте в уже существующий директивы:

# values.yaml

elasticsearch:
  install: true

gitflic:
  elasticsearch:
    enable: true

Изменение параметров для SMTP сервера

По умолчанию сервер SMTP не настроен и не осуществляет отправку писем.

Для изменения параметров SMTP сервера создайте файл values.yaml или добавьте в уже существующий директивы:

# values.yaml
gitflic:
  mail:
    host: "smtp.foo.bar" # Хост SMTP сервера
    port: 587 # Порт SMTP сервера 
    username: foo@bar.net # Имя пользователя для подключения к SMTP серверу
    password: Superp@$$word # Пароль пользователя для подключения к SMTP серверу
    sender:
      name: foobar # Имя пользователя отображаемое в качестве отправителя писем 
      email: foo@noreply.bar # Email отображаемый в качестве отправителя писем

Изменение параметров развертывания

Изменение imagePullPolicy параметра

По умолчанию, для всех развертываний параметр imagePullPolicy установлен в IfNotPresent.

Для изменения параметра imagePullPolicy создайте файл values.yaml или добавьте в уже существующий директивы:

# values.yaml
redis:
  imagePullPolicy: "Never" # Или Always, в зависимости от ваших требований

postgres:
  imagePullPolicy: "Never" # Или Always, в зависимости от ваших требований

elasticsearch:
  imagePullPolicy: "Never" # Или Always, в зависимости от ваших требований

gitflic:
  imagePullPolicy: "Never" # Или Always, в зависимости от ваших требований

Включение лимитов для контейнеров

Для всех контейнеров внутри развертывания, установлены параметры resources.requests в соответствии с минимальными требованиями ПО для функционирования платформы. Лимиты (параметры resources.limits) установлены только для контейнеров gitflic-server и elasticsearch. Остальные контейнеры используют по умолчанию все доступные ресурсы кластера. Если необходимо ограничить и/или переопределить существующие, используйте в качестве корневой директивы имя сервиса и стандартные директивы для определения ресурсов контейнера. Текущие лимиты могут быть изменены в будущем и/или убраны совсем. Подробнее см. в файле values.yaml

Для изменения лимитов контейнеров создайте файл values.yaml или добавьте в уже существующий директивы:

# values.yaml
# Пример для postgresql
postgres:
  containers:
    resources:
      requests:
        cpu: "500m"
        memory: "512Mi"
      limits:
        cpu: "1000m"
        memory: "2048Mi"

Изменение imagePullSecrets параметра

По умолчанию, для всех развертываний параметр imagePullSecrets не установлен. Для доступа к приватным реестрам необходимо создать ресурс типа secret с параметрами для доступа к реестру:

kubectl create secret docker-registry my-private-registry \
    --namespace gitflic \
    --docker-server #Адрес до реестра контейнеров \
    --docker-username #Имя пользователя для доступа к реестру \
    --docker-password #Пароль пользователя для доступа к реестру

Для указания секрета с данными реестра создайте файл values.yaml или добавьте в уже существующий директивы:

# values.yaml
redis:
  imagePullSecrets: "my-private-registry" # Или имя указанное при создании секрета

postgres:
  imagePullSecrets: "my-private-registry" # Или имя указанное при создании секрета

elasticsearch:
  imagePullSecrets: "my-private-registry" # Или имя указанное при создании секрета

rabbitmq:
  imagePullSecrets: "my-private-registry" # Или имя указанное при создании секрета

gitflic:
  imagePullSecrets: "my-private-registry" # Или имя указанное при создании секрета

Изменение стандартной зоны для кластера

По умолчанию установлена зона svc.cluster.local.

Для изменения зоны кластера создайте файл values.yaml или добавьте в уже существующий директивы:

cluster:
  zone: # Имя вашей зоны кластера

Изменение стандартных образов контейнеров

По умолчанию используются образы из публичного реестра registry.gitflic.ru. В случае отсутствия возможности подключения к публичному реестру, рекомендуется скачать образы из данного развертывания, любым доступным способом и прогрузить их в ваш приватный реестр, так как развертывание предполагает использование образов указанных в конфигурации развертывания.

Для изменения стандартных образов создайте файл values.yaml или добавьте в уже существующий директивы:

# values.yaml
redis:
  image:
    repository: my-private-registry/redis 
    tag: "6.2"

postgres:
  image:
    repository: my-private-registry/postgres
    tag: "12"

rabbitmq:
  image:
    repository: my-private-registry/rabbitmq
    tag: "3.13-alpine"

elasticsearch:
  image:
    repository: my-private-registry/elasticsearch
    tag: "7.16.2"

gitflic:
  image:
    repository: my-private-registry/gitflic-server-enterprise
    tag: "4.6.1"

Изменение параметров хранения данных

Изменение storageClassName

Внимание!

  • * Рекомендуется использовать longhorn, в качестве программно определяемого хранилища
  • * В Платформе контейнеризации "Боцман", longhorn установлен по умолчанию как программно определяемое хранилище

Для изменения storageClassName создайте файл values.yaml или добавьте в уже существующий директивы:

#values.yaml
redis:
  storage:
    storageClassName: #Ваш storageClass, например longhorn 
postgres:
  storage:
    storageClassName: #Ваш storageClass, например longhorn
elasticsearch:
  storage.:
    storageClassName: #Ваш storageClass, например longhorn
gitflic:
  storage:
    storageClassName: #Ваш storageClass, например longhorn

Выполните установку с применением созданного файла values.yaml:

helm install gitflic  oci://registry.gitflic.ru/helm/project/gitflic/gitflic-server-helm/gitflic-server \
    --namespace gitflic \
    --create-namespace \
    --values ./values.yaml

Отключение использования PersistentVolumeClaim

При отключении использования PersistentVolumeClaim, к контейнерам будет применен параметр emptyDir. Это приведет к тому, что для данных не будет выделено отдельного хранилища и все изменения будут записаны внутри контейнера. Не используйте данный параметр в production среде!

Для отключения использования PersistentVolumeClaim создайте файл values.yaml или добавьте в уже существующий директивы:

# values.yaml
redis:
  storage:
    usePVC: false

postgres:
  storage:
    usePVC: false

elasticsearch:
  storage:
    usePVC: false

gitflic:
  storage:
    usePVC: false

Изменение количества выделяемого места в хранилище

Для изменения количества выделяемого места под хранение данных создайте файл values.yaml или добавьте в уже существующий директивы:

# values.yaml

redis:
  storage:
    capacity: 3Gi # Измените в случае если не хватает места под хранение кеша 

postgres:
  storage:
    capacity: 5Gi # Измените в случае если БД превысит текущий размер

elasticsearch:
  storage:
    capacity: 20Gi # Измените в случае если размер БД превысит текущий размер

gitflic:
  storage:
    capacity: 20Gi # Измените с учетом ваших предполагаемых размеров репозиториев и/или данных реестра

Изменение параметров баз данных

Подключение собственной базы данных Postgresql

Перед подключением собственной БД postgresql необходимо самостоятельно инициализировать базу и установить необходимые расширения: - pgcrypro - pg_trgm

Для подключения собственной базы postgresql создайте файл values.yaml или добавьте в уже существующий директивы:

# values.yaml
postgres:
  install: false
  host: foo.bar.sql #Адрес до хоста postgresql 
  port: 5432 # Порт хоста postgresql. Значение по умолчанию 5432
  user: foobar # Пользователь для бд postgresql. Значение по умолчанию gitflic
  password: foobarpassword # Пароль для доступа к базе данных postgresql
  database: # Имя базы данных. Значение по умолчанию gitflic

Выполните установку с применением созданного файла values.yaml:

helm install gitflic  oci://registry.gitflic.ru/helm/project/gitflic/gitflic-server-helm/gitflic-server \
    --namespace gitflic \
    --create-namespace \
    --values ./values.yaml

Как получить пароль от базы данных Postgresql

В случае установки БД Postgresql из чарта, пароль для доступа к БД будет сгенерирован автоматически и помещен в Secret в том же пространстве имен в котором было выполнено развертывание.

kubectl -n gitflic get secrets passwords -o jsonpath='{ .data.postgres }'  | base64 -d

Параметры для ingress контроллера

Внимание !

Шаблоны для ingress контроллера работают только с контроллером nginx!

Включение создания шаблона

По умолчанию создание шаблона для ingress контроллера отключено. Автоматическая генерация имени секрета с tls сертификатами сделана для развертываний в который используется сторонний cert-manager для генерации сертификатов, например Let's Encrypt

Для включения создания шаблона создайте файл values.yaml или добавьте в уже существующий директивы:

# values.yaml
ingress:
  create: true
  tls:
    secretName: "" # Имя секрета с сертификатами tls. Если оставить пустым, имя секрета будет сгенерировано автоматически 
  rules:
    host: "example.gitflic.local" # Хост по которому будет осуществляться доступ

Отключение tls сертификатов

Для отключения доступа по HTTPS создайте файл values.yaml или добавьте в уже существующий директивы:

# values.yaml
ingress:
  tls:
    enabled: false

Добавление аннотаций к шаблону ingress

Для добавления собственных аннотаций создайте файл values.yaml или добавьте в уже существующий директивы:

# values.yaml
ingress:
  annotations: 
    nginx.ingress.kubernetes.io/force-ssl-redirect: "true" # Добавление принудительного перенаправления на HTTPS протокол
    # Остальные аннотации которые необходимо добавить в шаблон

Отключение предустановленных аннотаций

По умолчанию в шаблон включены некоторые аннотация для контроллера. Подробнее см. в файле values.yaml в блоке ingress.annotationsStatic.

Для отключения предустановленных аннотаций создайте файл values.yaml или добавьте в уже существующий директивы:

# values.yaml
ingress:
  annotationsStatic: {}

Пример полного файла values.yaml

Ниже представлен пример полного файла values.yaml для развертывания в production среде.

Предполагается что:

  • В кластере заранее создан storageClassName=longhorn-gitflic с политикой reclaimPolicy=Retain и доп настройками хранения.
  • В кластере установлен ingress контроллер nginx. cert-manager отсутствует.
  • Сертификаты для tls созданы и добавлены вручную как secret=gitflic-tls-secret.
  • Включено принудительное перенаправление на HTTPS протокол.
  • В качестве хоста используется адрес https://example.gitflic.local.
  • Образ gitflic-ee:4.6.1 скачан из ЛК и загружен в my-private-registry по пути my-private-registry/gitflic-enterprise:4.6.1.
  • Создан secret=private-registry-secret для доступа к приватному реестру где расположен образ gitflic-enterprise:4.6.1.
  • Включен функционал Поиск по коду.
  • Используется стандартная зона кластера svc.cluster.local.
  • Сертификаты и ключи для SSH будут сгенерированы автоматически.
  • Внешняя БД postgresql не будет использована.
  • Предполагаемый размер хранилища репозиториев и реестра 100Gb.
  • SMTP сервер не используется.
# values.yaml
redis:
  storage:
    storageClassName: "longhorn-gitflic"

postgres:
  storage:
    storageClassName: "longhorn-gitflic"

elasticsearch:
  install: true
  storage:
    storageClassName: "longhorn-gitflic"

gitflic:
  image:
    repository: my-private-registry/gitflic-enterprise
    tag: "4.6.1"
  imagePullSecrets: "private-registry-secret"
  storage:
    storageClassName: "longhorn-gitflic"
    capacity: 100Gi
  baseUrl: "https://example.gitflic.local"
  elasticsearch:
    enable: true

ingress:
  create: true
  annotations:
    nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
  tls:
    secretName: "gitflic-tls-secret"
  rules:
    host: "example.gitflic.local"