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

Запуск агента в Kubernetes


Внимание!

  • kuber агент gitflic находится в стадии beta тестирования!
  • Установка в k8s кластер доступна начиная с версии агента 3.5.2!
  • В работе агента могут присутствовать баги или неточности!
  • О найденных багах и/или предложениях сообщайте на support@gitflic.ru

Информация

  • Для запуска агента в kubernetes вам потребуется установить kubectl.
  • Для запуска агента в kubernetes вам потребуется установить helm.
  • Для работы агентов внутри кластера потребуется создать Клаcтерную роль и пространство имен. Это необходимо сделать один раз, для каждого кластера, внутри которого вы хотите использовать агентов GitFlic Runner.
  • В случае использования приватных репозиториев образов, потребуется создание Secret с типом kubernetes.io/dockerconfigjson

Подготовка кластера

  • Создайте пространство имен gitflic-runner, роль для полного доступа к пространству имен и кластерную роль с возможностью получения списка пространств имен внутри кластера. Скопируйте содержимое спойлера в файл static.yaml и выполните команду на установку:

    static.yaml
    apiVersion: v1
    kind: Namespace
    metadata:
      name: gitflic-runner
      labels:
        name: gitflic-runner
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: Role
    metadata:
      namespace: gitflic-runner
      name: manager-role
    rules:
      - apiGroups: ["*"]
        resources: ["*"]
        verbs: ["*"]
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRole
    metadata:
        name: gitflic-runner-read-only
    rules:
      - apiGroups: [""]
        resources: ["namespaces"]
        verbs: ["get", "list"]
    
    kubectl apply -f static.yaml
    
  • Для корректной работы с приватными репозиториями образов добавьте параметр kubernetes.imagePullSecret в конфигурационный файл агента в блоке additional. Параметр принимает в себя строковое значение - наименование объекта Secret в кластере. Данный секрет будет использоваться для авторизации в приватных репозиториях.

    Создание Secret в кластере

    если будет использоваться только один репозиторий, то можно воспользоваться следующей командой:

    kubectl create secret docker-registry my-registry-secret \
        --namespace=gitflic-runner \
        --docker-email=my-email@example.com \
        --docker-username=my-username \
        --docker-password=my-password \
        --docker-server=registry.gitflic.ru
    

    если репозиториев будет больше, то сперва понадобится создать *.json файл, например config.json

    {
        "auths": {
            "registry1.example.com": {
                "username": "user1",
                "password": "password1",
                "auth": "dXNlcjE6cGFzc3dvcmQx"
            },
            "registry2.example.com": {
                "username": "user2",
                "password": "password2",
                "auth": "dXNlcjI6cGFzc3dvcmQy"
            }
        }
    }
    

    значение в "auth" - строка "username:password" в base64

    после чего выполнить команду

    kubectl create secret generic my-multi-registry-secret \
        --namespace=gitflic-runner \
        --from-file=.dockerconfigjson=config.json \
        --type=kubernetes.io/dockerconfigjson
    

    Как следствие, в пространстве имен gitflic-runner (пространство имен по умолчанию, в котором разворачивается раннер) будет создан объект Secret (в первом случае my-registry-secret, во втором my-multi-registry-secret), наименование которого и следует подставить в параметр kubernetes.imagePullSecret

    В случае отсутствия в кластере указанного Secret, в ивентах пода (который поднимается при старте выполнения пайплайна, в неймспейсе gitflic-runner) можно будет увидеть что-то подобное:

    Unable to retrieve some image pull secrets (%kubernetes.imagePullSecret%); attempting to pull the image may not succeed
    Failed to pull image "registry.gitflic.ru/project/{username}/my-project/bash": Error response from daemon: unauthorized: This transport access gitflic token doesn't exist
    

Установка агента GitFlic Runner

  1. Создайте файл values.yaml и заполните его необходимой информацией:

    values.yaml
    image:
        tag: <версия gitflic server>
    
    registerUrl:  <Url для регистрации агента>
    registerToken: <Token для регистрации агента>
    
    Список всех возможных настроек и значений по умолчанию
    # Имя кластерной роли созданной в п.1
    clusterRoleName: gitflic-runner-read-only
    # Имя роли в пространстве имен созданной в п.1
    roleRefName: manager-role
    # Количество реплик агента ,которые необходимо установить
    replicaCount: 1
    # Размер job volume создаваемый агентом при работе
    # Устанавливается из расчета "Максимальный размер репозитория + размер создаваемых артефактов +20%"
    jobVolumeSize: 4Gi
    # Задает выполнение скриптов в одном контексте
    inSession: true
    # Переопределения для образа
    image:
        # Репозиторий с образом агента
        repository: registry.gitflic.ru/company/gitflic/runner
        # Тег
        tag: latest
        # Политика скачивания образа
        pullPolicy: IfNotPresent
    
    # Дополнительные настройки приложения
    config:
        # Создание файла application.properties. Для предотвращения повторной регистрации агента. (Beta)
        static: null
        # Строка для указания стороннего источника образа helper image.
        helper: null
        # Строка для указания дополнительных настроек агента, если это необходимо
        additional: null
    
    # Контекст безопасности
    securityContext:
        privileged: true
    
    # Ссылка для регистрации агента
    registerUrl:  ""
    # Токен для регистрации агента
    registerToken: ""
    # Имя агента, которое будет присвоено во время регистрации 
    registerName: ""
    # Теги, которые будут присвоены во время регистрации
    registerTags: ""
    
  2. Установите helm chart

    Воспользуйтесь одной из следующих команд для установки на вашу ОС

    curl -fsSL https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
    
    brew install helm
    
    choco install kubernetes-helm
    
  3. Установите агента gitflic

    helm install <Имя релиза> oci://registry.gitflic.ru/helm/company/gitflic/gitflic-runner-chart -f values.yaml