• Русский
  • Установка Alauda DevOps

    В этом руководстве приведены подробные шаги по установке Alauda DevOps.

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

    Перед продолжением убедитесь, что оператор Alauda DevOps v3 загружен.

    Дополнительные сведения о загрузке оператора см. в Загрузка операторов

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

    • Katanomi поддерживает только создание одного экземпляра. Экземпляр можно развернуть в любом namespace, но должны выполняться следующие условия:

      • Достаточно ресурсов namespace
      • namespace настроен с привилегированной политикой безопасности
    • Для корректной работы Katanomi Operator требуется, чтобы namespace использовал конфигурацию с привилегированной политикой безопасности. Это требование обусловлено зависимостью компонента от привилегированных контейнеров и монтирований томов hostPath.

      Корневая причина: компоненты Katanomi Operator требуют доступа к привилегированным контейнерам и монтирований томов hostPath (каталог audit log) для корректной работы:

      • Привилегированные контейнеры: несколько развертываний Katanomi Operator используют контекст безопасности privileged: true:
        • apiserver deployment - развертывание API server требует privileged: true для выполнения chown в каталоге audit log
        • api deployment - развертывание API использует privileged: true для выполнения chown в каталоге audit log
        • devops-api deployment - развертывание DevOps API требует privileged: true для выполнения chown в каталоге audit log
        • задачи build-image-buildkit-v1 - задачи сборки явно используют privileged: true для возможностей сборки образов контейнеров

    Установка оператора

    Перейдите на странице платформы в Administrator -> Marketplace -> OperatorHub, найдите Alauda DevOps v3, а затем нажмите на карточку оператора, чтобы перейти на страницу сведений об операторе.

    Нажмите Install, чтобы установить оператор.

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

    Развертывайте экземпляры Katanomi в Global Cluster. Business Cluster может развертывать экземпляры по мере необходимости для CI/CD.

    КомпонентGlobal ClusterBusiness Cluster
    KatanomiУстановленНеобязательно

    Процедура

    Создание экземпляра Katanomi

    WARNING

    Поддерживается только один экземпляр Katanomi.

    • Global Cluster: Разверните в namespace cpaas-system. Установите ExternalURL в значение Platform URL кластера global, а Service.Type — в Ingress.

    • Business Cluster: Можно развернуть в любом namespace, кроме cpaas-system.

    • Войдите в платформу Alauda Container Platform.

    • Перейдите на вкладку Clusters в разделе Platform Management.

    • Выберите развернутый кластер и нажмите CLI Tools.

    • Создайте экземпляр Katanomi (при необходимости скорректируйте параметры)

    Global Cluster

    export NAMESPACE=cpaas-system
    export EXTERNAL_URL=$(kubectl get prdb -n cpaas-system base -o jsonpath='{.spec.platformURL}')
    cat <<EOF | kubectl apply -f -
    apiVersion: operators.katanomi.dev/v1alpha1
    kind: Katanomi
    metadata:
      name: katanomi
      namespace: ${NAMESPACE}
    spec:
      externalURL: ${EXTERNAL_URL}
      replicas: 1
      resources:
        limits:
          cpu: "2"
          memory: 4Gi
        requests:
          cpu: "1"
          memory: 2Gi
      service:
        ingress:
          protocol: HTTP
        type: Ingress
    EOF

    Business Cluster

    export NAMESPACE=katanomi-operator
    export NODE_IP=$(kubectl get nodes -o jsonpath='{.items[0].status.addresses[?(@.type=="InternalIP")].address}' | awk -F" " '{print $1}')
    export EXTERNAL_URL=http://${NODE_IP}:32001
    cat <<EOF | kubectl apply -f -
    apiVersion: operators.katanomi.dev/v1alpha1
    kind: Katanomi
    metadata:
      name: katanomi
      namespace: ${NAMESPACE}
    spec:
      externalURL: ${EXTERNAL_URL}
      replicas: 1
      resources:
        limits:
          cpu: "2"
          memory: 4Gi
        requests:
          cpu: "1"
          memory: 2Gi
      service:
        nodePort:
          apiPort:
            httpPort: 32000
          pluginPort:
            httpPort: 32001
        type: NodePort
    EOF
    • Дождитесь готовности экземпляра DevOps
      kubectl wait --for='jsonpath={.status.conditions[?(@.type=="Running")].status}=true' katanomis/katanomi -n cpaas-system --timeout=5m

    Подготовка к использованию функций CI/CD

    Перед началом использования функций конвейеров сборки и релизов Alauda DevOps администраторам платформы необходимо выполнить некоторые подготовительные действия.

    См. документацию внутри платформы после развертывания Alauda DevOps v3: <Platform URL>/console-devops-docs/en/devops-initialization/cicd/init/

    Описание параметров Katanomi

    ПараметрОписание
    Name

    Имя экземпляра Katanomi.

    Namespaces

    Для Business Cluster экземпляр Katanomi можно развернуть в любом namespace при наличии достаточных ресурсов. Для Global Cluster экземпляр Katanomi должен быть развернут исключительно в namespace cpaas-system.

    External URL

    Адрес доступа, то есть API-адрес. Выбирайте его в соответствии с настройками Service Type.
    Если Service Type имеет значение Node Port, укажите http://<IP>:<Port>. Значение Port должно соответствовать Node Port Service, а для доступа к сервису используется API port.
    Если Service Type имеет значение Ingress, укажите соответствующий адрес доступа, например http://kubernetes.io.

    Replicas

    Количество реплик Deployment, по умолчанию — 2.
    Если количество реплик равно 1, используется одноподовое развертывание.

    Resources
    • requests: Минимальный объем ресурсов CPU и памяти, которые могут быть использованы при работе инструмента.
    • limits: Максимальный объем ресурсов CPU и памяти, который должен быть выделен при работе инструмента.
    Service.Type

    Обязательное поле. Поддерживает два типа: Node Port и Ingress.

    • Node Port: Открывает маршрут через статический порт, доступ осуществляется по адресу <IP>:<port>.
    • Ingress: Открывает маршрут через входящие правила, доступ осуществляется по доменному имени.
    Service.Ingress

    Требуется, если Type установлен в Ingress.

    • Domain Name: Доменное имя, используемое для доступа к инструменту.
    • Protocol: Доступ к инструменту по HTTP или HTTPS.
    • Secret Name: Имя SSL-сертификата, используемого при доступе к инструменту по HTTPS.
    Service.Node Port

    Требуется, если Type установлен в Node Port. Номер порта, используемый для доступа к инструменту. API Port и Plugin Port не могут совпадать, диапазон значений порта — 30000-32767.

    • API Port: Порт, используемый для доступа к компоненту Katanomi-api по HTTP; применяется для выполнения операций, связанных с привязкой интеграции инструмента.
    • Plugin Port: Порт, используемый для доступа к компоненту Katanomi-plugin по HTTP; применяется на платформе для обработки событий привязки интеграции toolchain.

    FAQ

    Katanomi Pod не запускается из-за read-only root filesystem: каталог /cpaas недоступен для записи

    Katanomi требует доступа на запись к каталогу /cpaas в хостовой системе для хранения audit log. Если pod не может записывать в этот каталог, он не сможет запуститься.

    Чтобы решить эту проблему, можно настроить альтернативный путь хранения audit log. Например:

    spec:
      helmValues:
        api:
          auditHostPath: /tmp/audit
        devopsApiServer:
          auditHostPath: /tmp/audit
        devopsApi:
          auditHostPath: /tmp/audit

    Эта конфигурация указывает компонентам Katanomi использовать /tmp/audit в качестве пути хранения audit log, обеспечивая совместимость с окружениями, где enforced read-only root filesystem. При необходимости скорректируйте путь с учетом ваших требований к безопасности и эксплуатации.

    Как настроить пользовательские политики планирования для Katanomi

    Чтобы размещать компоненты Katanomi на определенных узлах, настройте nodeSelector, tolerations или affinity в spec.helmValues.global. Например:

    spec:
      helmValues:
        global:
          nodeSelector:
            custom.node/role: devops
          tolerations:
            - key: custom-taint
              operator: Exists
              effect: NoSchedule
          affinity:
            nodeAffinity:
              requiredDuringSchedulingIgnoredDuringExecution:
                nodeSelectorTerms:
                  - matchExpressions:
                      - key: custom.node/role
                        operator: In
                        values:
                          - devops

    Если эти поля не настроены, компоненты Katanomi продолжают использовать политику планирования по умолчанию.

    Как настроить пользовательский ImagePullSecret при развертывании Katanomi

    Чтобы указать пользовательский ImagePullSecret для экземпляра Katanomi, добавьте следующую конфигурацию:

    spec:
      helmValues:
        global:
          registry:
            imagePullSecret:
              name: <imagePullSecretName>

    Эта конфигурация гарантирует, что Katanomi будет использовать указанный ImagePullSecret для загрузки образов контейнеров из private registries. Замените imagePullSecretName на имя заранее созданного Kubernetes secret, содержащего необходимые учетные данные registry.