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

    Введение

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

    • Connectors Operator: центральный компонент управления, который отвечает за развертывание и жизненный цикл других компонентов Connector
    • ConnectorsCore: обязательный базовый компонент, который обеспечивает основу для всех типов Connector
    • ConnectorsGit: необязательный компонент, который добавляет поддержку универсальных Git-сервисов.
    • ConnectorsGitHub: необязательный компонент, который добавляет поддержку функций, специфичных для GitHub.
    • 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
    • настроенный kubectl cli для взаимодействия с кластером
    • права администратора в кластере
    • статус Connectors Operator — Ready в ACP Operator Hub

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

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

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

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

    Установка Connectors Operator

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

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

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

      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. Проверьте, что operator запущен:

      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 (CRDs) созданы:

      kubectl get crds | grep connectors

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

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

    Установка ConnectorsCore

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

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

      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. Проверьте, что установлены CRDs, необходимые для работы connector:

      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 plugin запущен:

      kubectl get pods -n connectors-system | grep git

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

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

      kubectl get connectorclass git

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

      NAME  READY  AGE
      git   True       1m

    Установка ConnectorsGitHub (необязательно)

    Чтобы добавить поддержку интеграции с GitHub, установите компонент ConnectorsGitHub:

    1. Создайте пользовательский ресурс ConnectorsGitHub:

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

      kubectl get connectorsgithub -n connectors-system
    3. Дождитесь, пока в статусе не будет указано, что ConnectorsGitHub готов:

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

      kubectl get connectorclass github

    Установка 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. Проверьте, что создан GitLab ConnectorClass:

      kubectl get connectorclass gitlab

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

      NAME     READY  AGE
      gitlab   True   1m

    Установка ConnectorsOCI (необязательно)

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

    1. Создайте пользовательский ресурс ConnectorsOCI:

      Публикация через ClusterIP:

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

      Публикация через 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

      Публикация через 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 plugin запущен:

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

      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. Дождитесь, пока в статусе не будет указано, что ConnectorsOCI готов:

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

      kubectl get connectorclass k8s

    Установка ConnectorsMaven (необязательно)

    Чтобы добавить поддержку интеграции с Maven registries, установите компонент 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. Проверьте, что Kubernetes ConnectorClass готов:

      kubectl get connectorclass maven

    Установка ConnectorsPyPI (необязательно)

    Чтобы добавить поддержку интеграции с PyPI registries, установите компонент 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. Проверьте, что Kubernetes ConnectorClass готов:

      kubectl get connectorclass pypi

    Установка ConnectorsNPM (необязательно)

    Чтобы добавить поддержку интеграции с NPM registries, установите компонент 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. Проверьте, что NPM ConnectorClass готов:

      kubectl get connectorclass npm

    Установка ConnectorsHarbor (необязательно)

    Чтобы добавить поддержку интеграции с Harbor registries, установите компонент 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. Проверьте, что Harbor ConnectorClass готов:

      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. Проверьте, что SonarQube ConnectorClass готов:

      kubectl get connectorclass sonarqube

    Установка ConnectorsNexus (необязательно)

    Чтобы добавить поддержку интеграции с Nexus repositories, установите компонент ConnectorsNexus:

    1. Создайте пользовательский ресурс ConnectorsNexus:

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

      kubectl get connectorsnexus -n connectors-system
    3. Проверьте, что Nexus ConnectorClass готов:

      kubectl get connectorclass nexus

    Удаление Connectors

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

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

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

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

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

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

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

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

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

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

    apiVersion: operator.connectors.alauda.io/v1alpha1
    kind: ConnectorsCore
    metadata:
      name: connectors-core
      namespace: connectors-system
    spec:
      # Configure specific workloads
      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 plugin:

    apiVersion: operator.connectors.alauda.io/v1alpha1
    kind: ConnectorsGit
    metadata:
      name: connectors-git
      namespace: connectors-system
    spec:
      # Configure workloads
      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 plugin:

    apiVersion: operator.connectors.alauda.io/v1alpha1
    kind: ConnectorsOCI
    metadata:
      name: connectors-oci
      namespace: connectors-system
    spec:
      # Configure workloads
      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:
      # Specify additional manifests to install
      additionalManifests: "<additional manifests>"
    
      # Other configurations as needed

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

    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") . . .

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

    Исправление

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

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