安装指南

简介

Connectors 系统采用模块化架构,包含以下组件:

  • Connectors Operator:负责管理其他 connector 组件部署和生命周期的中心管理组件
  • ConnectorsCore:必需的核心组件,为所有 connector 类型提供基础
  • ConnectorsGit:可选组件,增加对通用 Git 服务的支持。
  • ConnectorsGitHub:可选组件,增加对 GitHub 特定功能的支持。
  • ConnectorsGitLab:可选组件,增加对 GitLab 特定功能的支持(GitLab CLI、增强身份验证)
  • ConnectorsOCI:可选组件,增加对容器 registry(Harbor、Distribution 等)的支持
  • ConnectorsK8S:可选组件,增加对 Kubernetes 集群的支持
  • ConnectorsMaven:可选组件,增加对 Maven registry 的支持(例如,Maven Central,或托管在 Sonatype Nexus 上的 Maven 仓库)。
  • ConnectorsPyPI:可选组件,增加对 Python package registry 的支持(例如,PyPI,或托管在 Sonatype Nexus 上的 Python 仓库)。
  • ConnectorsNPM:可选组件,增加对 Node.js package registry 的支持(例如,npm,或托管在 Sonatype Nexus 上的 Node.js 仓库)。
  • ConnectorsHarbor:可选组件,增加对 Harbor 容器 registry 的支持。
  • ConnectorsSonarQube:可选组件,增加对 SonarQube 和 SonarCloud 平台的代码质量分析支持。 本文档提供了安装和配置 Connectors 系统的说明。

前提条件

在安装之前,请确保你具备以下条件:

  • 一个 kubernetes 集群
  • 已配置可与集群通信的 kubectl CLI
  • 集群上的管理员权限
  • Connectors Operator 在 ACP Operator Hub 上处于 Ready 状态

安装的 Pod Security 要求

Kubernetes 在命名空间级别强制执行 Pod Security Standards(PSS)。Connectors 系统由具有不同权限要求的组件组成:

组件建议策略原因
Connectors Operatorrestricted作为标准 Kubernetes controller 运行,不依赖特权能力。Operator 也可以在限制更少的 baseline 下正常运行,但 restricted 更符合最小权限实践。
其他 Connectors 组件(ConnectorsCore、ConnectorsGit、ConnectorsGitLab 等)privilegedConnectors-CSI 组件需要主机级访问权限(例如 hostPath 挂载、特权系统调用)来提供 CSI driver 功能。该要求会强制整个命名空间采用 privileged 策略。

注意:如果命名空间配置的策略不足(例如,对 CSI 组件使用 restrictedbaseline),由于特权操作被阻止,CSI driver 将无法启动。相反,在不需要的情况下应用 privileged 会扩大命名空间的攻击面。

安装 Connectors Operator

首先,安装负责管理所有其他组件生命周期的 Connectors Operator。

  1. 为 operator 创建一个命名空间:

    kubectl create namespace connectors-operator
  2. 应用 operator subscription 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. 验证 operator 正在运行:

    kubectl get pods -n connectors-operator

    你应该会看到 connectors-operator pod 正在运行:

    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. 为 connector 组件创建一个命名空间(如果尚未创建):

    kubectl create namespace connectors-system
  2. 创建 ConnectorsCore custom resource:

    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. 验证 core pods 正在运行:

    kubectl get pods -n connectors-system

    你应该会看到包括以下内容的 core 组件:

    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. 验证 connector 功能所需的 CRDs 已安装:

    kubectl get crds | grep connectors.alauda.io

    你应该会看到:

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

安装 ConnectorsGit(可选)

如需增加对 GitHub、GitLab 等 Git 服务的支持,请安装 ConnectorsGit 组件:

  1. 创建 ConnectorsGit custom resource:

    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 custom resource:

    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 custom resource:

    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(可选)

如需增加对容器 registry 的支持,例如 Harbor、Distribution 等,请安装 ConnectorsOCI 组件:

  1. 创建 ConnectorsOCI custom resource:

    虚拟 IP 暴露:

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

    主机端口暴露:

    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 custom resource:

    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 registry 集成的支持,请安装 ConnectorsMaven 组件:

  1. 创建 ConnectorsMaven custom resource:

    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 registry 集成的支持,请安装 ConnectorsPyPI 组件:

  1. 创建 ConnectorsPyPI custom resource:

    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 registry 集成的支持,请安装 ConnectorsNPM 组件:

  1. 创建 ConnectorsNPM custom resource:

    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 registry 集成的支持,请安装 ConnectorsHarbor 组件:

  1. 创建 ConnectorsHarbor custom resource:

    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 custom resource:

    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 仓库集成的支持,请安装 ConnectorsNexus 组件:

  1. 创建 ConnectorsNexus custom resource:

    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. 先删除可选组件(如果已安装):

    # 删除 ConnectorsOCI
    kubectl delete connectorsoci --all -n connectors-system
    
    # 删除 ConnectorsGit
    kubectl delete connectorsgit --all -n connectors-system
    
    # 删除 ConnectorsGitHub
    kubectl delete connectorsgithub --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
    
    # 删除 ConnectorsNexus
    kubectl delete connectorsnexus --all -n connectors-system
  2. 删除 core 组件:

    kubectl delete connectorscore --all -n connectors-system
  3. 删除 operator:

    kubectl delete -n connectors-operator subscription.operators.coreos.com/connectors-operator
  4. 删除命名空间:

    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:
  # 配置特定 workload
  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:
  # 配置 workload
  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:
  # 配置 workload
  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:
  # 指定要安装的额外 manifests
  additionalManifests: "<additional manifests>"

  # 根据需要的其他配置

故障排查

connectors-csi 未就绪

如果 daemonset/connectors-csi 未就绪,请检查 connectors-csi pod 的事件。 常见错误如下:

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 级别对于 CSI driver 来说过于严格。

修复方法

  • 确保命名空间配置为 privileged Pod Security 级别。
  • 使用正确的 labels 更新命名空间。
  • 重启 connectors-csi DaemonSet。

有关详细信息,请参阅 安装的 Pod Security 要求