• Русский
  • Руководство по установке

    Введение

    Система Connectors имеет модульную архитектуру с следующими компонентами:

    • Connectors Operator: центральный управляющий компонент, который отвечает за развертывание и жизненный цикл других компонентов коннекторов
    • ConnectorsCore: обязательный основной компонент, обеспечивающий основу для всех типов коннекторов
    • ConnectorsGit: дополнительный компонент, добавляющий поддержку Git-сервисов (GitHub, GitLab и др.)
    • ConnectorsGitLab: дополнительный компонент, добавляющий поддержку специфичных для GitLab функций (GitLab CLI, расширенная аутентификация)
    • ConnectorsOCI: дополнительный компонент, добавляющий поддержку реестров контейнеров (Harbor, Distribution и др.)
    • ConnectorsK8S: дополнительный компонент, добавляющий поддержку Kubernetes кластеров
    • ConnectorsMaven: дополнительный компонент, добавляющий поддержку Maven-реестров (например, Maven Central или Maven-репозитории, размещённые на Sonatype Nexus)
    • ConnectorsPyPI: дополнительный компонент, добавляющий поддержку реестров Python-пакетов (например, PyPI или Python-репозитории на Sonatype Nexus)
    • ConnectorsNPM: дополнительный компонент, добавляющий поддержку реестров Node.js-пакетов (например, npm или Node.js-репозитории на Sonatype Nexus)
    • ConnectorsHarbor: дополнительный компонент, добавляющий поддержку реестров контейнеров Harbor
    • ConnectorsSonarQube: дополнительный компонент, добавляющий поддержку платформ SonarQube и SonarCloud для анализа качества кода

    В этом документе приведены инструкции по установке и настройке системы Connectors.

    Предварительные требования

    Перед установкой убедитесь, что у вас есть:

    • Kubernetes кластер
    • CLI kubectl, настроенный для взаимодействия с вашим кластером
    • Права администратора в кластере
    • Connectors Operator в состоянии Ready в ACP Operator Hub

    Требования безопасности Pod для установки

    Kubernetes применяет Pod Security Standards (PSS) на уровне namespace. Система Connectors состоит из компонентов с разными требованиями к привилегиям:

    КомпонентРекомендуемая политикаОбоснование
    Connectors OperatorrestrictedРаботает как стандартный контроллер Kubernetes и не требует привилегированных возможностей. Operator также корректно работает с менее разрешительной политикой baseline, но restricted лучше соответствует принципу наименьших привилегий.
    Другие компоненты Connectors (ConnectorsCore, ConnectorsGit, ConnectorsGitLab и др.)privilegedКомпонент Connectors-CSI требует доступа на уровне хоста (например, монтирование hostPath, привилегированные системные вызовы) для обеспечения функциональности CSI драйвера. Это требует применения политики privileged ко всему namespace.

    Примечание: Если namespace настроен с недостаточной политикой (например, restricted или baseline для CSI компонентов), драйвер CSI не сможет запуститься из-за блокировки привилегированных операций. С другой стороны, применение privileged там, где это не нужно, расширяет поверхность атаки namespace.

    Установка Connectors Operator

    Сначала установите Connectors Operator, который управляет жизненным циклом всех остальных компонентов.

    1. Создайте namespace для оператора:

      kubectl create namespace connectors-operator
    2. Примените YAML подписки оператора:

      cat <<EOF | kubectl apply -f -
      apiVersion: operators.coreos.com/v1alpha1
      kind: Subscription
      metadata:
        annotations:
          cpaas.io/target-namespaces: ""
        labels:
          catalog: platform
        name: connectors-operator
        namespace: connectors-operator
      spec:
        channel: alpha
        installPlanApproval: Manual
        name: connectors-operator
        source: platform
        sourceNamespace: cpaas-system
      EOF
      
      kubectl wait --for=condition=InstallPlanPending subscription.operators.coreos.com/connectors-operator -n connectors-operator
      
      installplanname=$(kubectl get subscription.operators.coreos.com -n connectors-operator connectors-operator -ojsonpath='{.status.installPlanRef.name}')
      kubectl patch installplan -n connectors-operator ${installplanname} --type='merge' -p='{"spec":{"approved":true}}'
    3. Проверьте, что оператор запущен:

      kubectl get pods -n connectors-operator

      Вы должны увидеть запущенный pod connectors-operator:

      NAME                                                  READY   STATUS    RESTARTS   AGE
      connectors-operator-controller-manager-xxxxxx-xxxxx   2/2     Running   0          1m
    4. Проверьте, что Custom Resource Definitions (CRD) созданы:

      kubectl get crds | grep connectors

      Вы должны увидеть CRD, включая:

      connectorscore.operator.connectors.alauda.io
      connectorsgit.operator.connectors.alauda.io
      connectorsoci.operator.connectors.alauda.io

    Установка ConnectorsCore

    После запуска оператора установите обязательный компонент ConnectorsCore:

    1. Создайте namespace для компонентов коннекторов (если ещё не создан):

      kubectl create namespace connectors-system
    2. Создайте кастомный ресурс ConnectorsCore:

      cat <<EOF | kubectl apply -f -
      apiVersion: operator.connectors.alauda.io/v1alpha1
      kind: ConnectorsCore
      metadata:
        name: connectors-core
        namespace: connectors-system
      spec: {}
      EOF
    3. Отслеживайте прогресс развертывания:

      kubectl get connectorscore -n connectors-system
    4. Дождитесь, пока статус покажет, что ConnectorsCore готов:

      kubectl wait --for=condition=Ready connectorscore/connectors-core -n connectors-system --timeout=300s
    5. Проверьте, что основные pod запущены:

      kubectl get pods -n connectors-system

      Вы должны увидеть основные компоненты, включая:

      NAME                                              READY   STATUS    RESTARTS   AGE
      connectors-api-xxxxxx                             1/1     Running   0          2m
      connectors-controller-manager-xxxxxx              1/1     Running   0          2m
      connectors-proxy-xxxxxx                           1/1     Running   0          2m
    6. Проверьте, что CRD, необходимые для функциональности коннекторов, установлены:

      kubectl get crds | grep connectors.alauda.io

      Вы должны увидеть:

      connectorclasses.connectors.alauda.io
      connectors.connectors.alauda.io

    Установка ConnectorsGit (опционально)

    Для добавления поддержки Git-сервисов, таких как GitHub, GitLab и др., установите компонент ConnectorsGit:

    1. Создайте кастомный ресурс ConnectorsGit:

      cat <<EOF | kubectl apply -f -
      apiVersion: operator.connectors.alauda.io/v1alpha1
      kind: ConnectorsGit
      metadata:
        name: connectors-git
        namespace: connectors-system
      spec: {}
      EOF
    2. Отслеживайте прогресс развертывания:

      kubectl get connectorsgit -n connectors-system
    3. Дождитесь, пока статус покажет, что ConnectorsGit готов:

      kubectl wait --for=condition=Ready connectorsgit/connectors-git -n connectors-system --timeout=300s
    4. Проверьте, что Git-плагин запущен:

      kubectl get pods -n connectors-system | grep git

      Вы должны увидеть:

      NAME                                   READY   STATUS    RESTARTS   AGE
      connectors-git-plugin-xxxxxx           1/1     Running   0          1m
    5. Проверьте, что ConnectorClass для Git создан:

      kubectl get connectorclass git

      Вы должны увидеть:

      NAME  READY  AGE
      git   True       1m

    Установка ConnectorsGitLab (опционально)

    Для добавления поддержки специфичных функций GitLab (GitLab CLI, расширенная аутентификация) установите компонент ConnectorsGitLab:

    1. Создайте кастомный ресурс ConnectorsGitLab:

      cat <<EOF | kubectl apply -f -
      apiVersion: operator.connectors.alauda.io/v1alpha1
      kind: ConnectorsGitLab
      metadata:
        name: connectors-gitlab
        namespace: connectors-system
      spec: {}
      EOF
    2. Отслеживайте прогресс развертывания:

      kubectl get connectorsgitlab -n connectors-system
    3. Дождитесь, пока статус покажет, что ConnectorsGitLab готов:

      kubectl wait --for=condition=Ready connectorsgitlab/connectors-gitlab -n connectors-system --timeout=300s
    4. Проверьте, что ConnectorClass для GitLab создан:

      kubectl get connectorclass gitlab

      Вы должны увидеть:

      NAME     READY  AGE
      gitlab   True   1m

    Установка ConnectorsOCI (опционально)

    Для добавления поддержки реестров контейнеров, таких как Harbor, Distribution и др., установите компонент ConnectorsOCI:

    1. Создайте кастомный ресурс ConnectorsOCI:

      Expose через ClusterIP:

      cat <<EOF | kubectl apply -f -
      apiVersion: operator.connectors.alauda.io/v1alpha1
      kind: ConnectorsOCI
      metadata:
        name: connectors-oci
        namespace: connectors-system
      spec: {}
      EOF

      Expose через NodePort:

      cat <<EOF | kubectl apply -f -
      apiVersion: operator.connectors.alauda.io/v1alpha1
      kind: ConnectorsOCI
      metadata:
        name: connectors-oci
        namespace: connectors-system
      spec:
       expose:
         type: NodePort
         domain: 192.168.1.123
         nodePort:
           port: 30000
      EOF

      Expose через Ingress:

      cat <<EOF | kubectl apply -f -
      apiVersion: operator.connectors.alauda.io/v1alpha1
      kind: ConnectorsOCI
      metadata:
        name: connectors-oci
        namespace: connectors-system
      spec:
       expose:
         type: Ingress
         domain: connectors.proxy.com
    2. Отслеживайте прогресс развертывания:

      kubectl get connectorsoci -n connectors-system
    3. Дождитесь, пока статус покажет, что ConnectorsOCI готов:

      kubectl wait --for=condition=Ready connectorsoci/connectors-oci -n connectors-system --timeout=300s
    4. Проверьте, что OCI-плагин запущен:

      kubectl get pods -n connectors-system | grep oci
    5. Проверьте, что ConnectorClass для OCI создан:

      kubectl get connectorclass oci

    Установка ConnectorsK8S (опционально)

    Для добавления поддержки интеграции с Kubernetes кластерами установите компонент ConnectorsK8S:

    1. Создайте кастомный ресурс ConnectorsK8S:

      cat <<EOF | kubectl apply -f -
      apiVersion: operator.connectors.alauda.io/v1alpha1
      kind: ConnectorsK8S
      metadata:
        name: connectors-k8s
        namespace: connectors-system
      spec: {}
      EOF
    2. Отслеживайте прогресс развертывания:

      kubectl get connectorsk8s -n connectors-system
    3. Дождитесь, пока статус покажет, что ConnectorsK8S готов:

      kubectl wait --for=condition=Ready connectorsk8s/connectors-k8s -n connectors-system --timeout=300s
    4. Проверьте, что ConnectorClass для Kubernetes готов:

      kubectl get connectorclass k8s

    Установка ConnectorsMaven (опционально)

    Для добавления поддержки интеграции с Maven-реестрами установите компонент ConnectorsMaven:

    1. Создайте кастомный ресурс ConnectorsMaven:

      cat <<EOF | kubectl apply -f -
      apiVersion: operator.connectors.alauda.io/v1alpha1
      kind: ConnectorsMaven
      metadata:
        name: connectors-maven
        namespace: connectors-system
      spec: {}
      EOF
    2. Отслеживайте прогресс развертывания:

      kubectl get connectorsmaven -n connectors-system
    3. Дождитесь, пока статус покажет, что ConnectorsMaven готов:

      kubectl wait --for=condition=Ready connectorsmaven/connectors-maven -n connectors-system --timeout=300s
    4. Проверьте, что ConnectorClass для Maven готов:

      kubectl get connectorclass maven

    Установка ConnectorsPyPI (опционально)

    Для добавления поддержки интеграции с PyPI-реестрами установите компонент ConnectorsPyPI:

    1. Создайте кастомный ресурс ConnectorsPyPI:

      cat <<EOF | kubectl apply -f -
      apiVersion: operator.connectors.alauda.io/v1alpha1
      kind: ConnectorsPyPI
      metadata:
        name: connectors-pypi
        namespace: connectors-system
      spec: {}
      EOF
    2. Отслеживайте прогресс развертывания:

      kubectl get connectorspypi -n connectors-system
    3. Проверьте, что ConnectorClass для PyPI готов:

      kubectl get connectorclass pypi

    Установка ConnectorsNPM (опционально)

    Для добавления поддержки интеграции с NPM-реестрами установите компонент ConnectorsNPM:

    1. Создайте кастомный ресурс ConnectorsNPM:

      cat <<EOF | kubectl apply -f -
      apiVersion: operator.connectors.alauda.io/v1alpha1
      kind: ConnectorsNPM
      metadata:
        name: connectors-npm
        namespace: connectors-system
      spec: {}
      EOF
    2. Отслеживайте прогресс развертывания:

      kubectl get connectorsnpm -n connectors-system
    3. Проверьте, что ConnectorClass для NPM готов:

      kubectl get connectorclass npm

    Установка ConnectorsHarbor (опционально)

    Для добавления поддержки интеграции с реестрами Harbor установите компонент ConnectorsHarbor:

    1. Создайте кастомный ресурс ConnectorsHarbor:

      cat <<EOF | kubectl apply -f -
      apiVersion: operator.connectors.alauda.io/v1alpha1
      kind: ConnectorsHarbor
      metadata:
        name: connectors-harbor
        namespace: connectors-system
      spec: {}
      EOF
    2. Отслеживайте прогресс развертывания:

      kubectl get connectorsharbor -n connectors-system
    3. Проверьте, что ConnectorClass для Harbor готов:

      kubectl get connectorclass harbor

    Установка ConnectorsSonarQube (опционально)

    Для добавления поддержки интеграции с платформами SonarQube и SonarCloud установите компонент ConnectorsSonarQube:

    1. Создайте кастомный ресурс ConnectorsSonarQube:

      cat <<EOF | kubectl apply -f -
      apiVersion: operator.connectors.alauda.io/v1alpha1
      kind: ConnectorsSonarQube
      metadata:
        name: connectors-sonarqube
        namespace: connectors-system
      spec: {}
      EOF
    2. Отслеживайте прогресс развертывания:

      kubectl get connectorssonarqube -n connectors-system
    3. Проверьте, что ConnectorClass для SonarQube готов:

      kubectl get connectorclass sonarqube

    Удаление Connectors

    Для удаления системы Connectors удаляйте компоненты в обратном порядке установки.

    1. Сначала удалите опциональные компоненты (если они установлены):

      # Удалить ConnectorsOCI
      kubectl delete connectorsoci --all -n connectors-system
      
      # Удалить ConnectorsGit
      kubectl delete connectorsgit --all -n connectors-system
      
      # Удалить ConnectorsGitLab
      kubectl delete connectorsgitlab --all -n connectors-system
      
      # Удалить ConnectorsK8S
      kubectl delete connectorsk8s --all -n connectors-system
      
      # Удалить ConnectorsMaven
      kubectl delete connectorsmaven --all -n connectors-system
      
      # Удалить ConnectorsPyPI
      kubectl delete connectorspypi --all -n connectors-system
      
      # Удалить ConnectorsNPM
      kubectl delete connectorsnpm --all -n connectors-system
      
      # Удалить ConnectorsHarbor
      kubectl delete connectorsharbor --all -n connectors-system
      
      # Удалить ConnectorsSonarQube
      kubectl delete connectorssonarqube --all -n connectors-system
    2. Удалите основной компонент:

      kubectl delete connectorscore --all -n connectors-system
    3. Удалите оператора:

      kubectl delete -n connectors-operator subscription.operators.coreos.com/connectors-operator
    4. Удалите namespaces:

      kubectl delete namespace connectors-system
      kubectl delete namespace connectors-operator

    Пользовательская настройка

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

    Конфигурация ConnectorsCore

    При создании ресурса ConnectorsCore можно указать пользовательскую конфигурацию:

    apiVersion: operator.connectors.alauda.io/v1alpha1
    kind: ConnectorsCore
    metadata:
      name: connectors-core
      namespace: connectors-system
    spec:
      # Настройка конкретных рабочих нагрузок
      workloads:
      - name: connectors-api
        replicas: 2
        template:
          spec:
            containers:
            - name: api
              imagePullPolicy: Always
              resources:
                limits:
                  cpu: 500m
                  memory: 512Mi
                requests:
                  cpu: 200m
                  memory: 256Mi
              securityContext:
                readOnlyRootFilesystem: true
            nodeSelector:
              kubernetes.io/os: linux
    
      - name: connectors-controller-manager
        replicas: 1
        template:
          spec:
            containers:
            - name: manager
              resources:
                limits:
                  cpu: 300m
                  memory: 512Mi
    
      - name: connectors-proxy
        replicas: 2
        template:
          spec:
            containers:
            - name: proxy
              resources:
                limits:
                  cpu: 200m
                  memory: 256Mi

    Конфигурация ConnectorsGit

    Пользовательская конфигурация для Git-плагина:

    apiVersion: operator.connectors.alauda.io/v1alpha1
    kind: ConnectorsGit
    metadata:
      name: connectors-git
      namespace: connectors-system
    spec:
      # Настройка рабочих нагрузок
      workloads:
      - name: connectors-git-plugin
        replicas: 2
        template:
          spec:
            containers:
            - name: plugin
              resources:
                limits:
                  cpu: 300m
                  memory: 256Mi
                requests:
                  cpu: 100m
                  memory: 128Mi

    Конфигурация ConnectorsOCI

    Пользовательская конфигурация для OCI-плагина:

    apiVersion: operator.connectors.alauda.io/v1alpha1
    kind: ConnectorsOCI
    metadata:
      name: connectors-oci
      namespace: connectors-system
    spec:
      # Настройка рабочих нагрузок
      workloads:
      - name: connectors-oci-plugin
        replicas: 2
        template:
          spec:
            containers:
            - name: plugin
              resources:
                limits:
                  cpu: 300m
                  memory: 256Mi
                requests:
                  cpu: 100m
                  memory: 128Mi

    Дополнительные настройки

    Для продвинутых развертываний вы также можете указать:

    apiVersion: operator.connectors.alauda.io/v1alpha1
    kind: ConnectorsCore
    metadata:
      name: connectors-core
      namespace: connectors-system
    spec:
      # Указать дополнительные манифесты для установки
      additionalManifests: "<additional manifests>"
    
      # Другие необходимые настройки

    Устранение неполадок

    connectors-csi не готов

    Если daemonset/connectors-csi не готов, проверьте события pod connectors-csi. Типичная ошибка выглядит так:

    Error creating: pods "connectors-csi-d4r6r" is forbidden: violates PodSecurity "baseline:latest": non-default capabilities (container "driver" must not include "SYS_ADMIN" in securityContext.capabilities.add), host namespaces (hostNetwork=true), hostPath volumes (volumes "socket-dir", "mountpoint-dir", "registration-dir") . . .

    Это означает, что уровень безопасности namespace слишком ограничен для драйвера CSI.

    Решение

    • Убедитесь, что namespace настроен с уровнем безопасности Pod privileged.
    • Обновите namespace с правильными метками.
    • Перезапустите DaemonSet connectors-csi.

    Подробности смотрите в разделе Требования безопасности Pod для установки.