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

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

    Содержание

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

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

    Для получения дополнительной информации о загрузке оператора обратитесь к

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

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

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

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

      • Привилегированные контейнеры: Несколько развертываний оператора Katanomi используют security context с privileged: true:
        • apiserver deployment — развертывание API сервера требует privileged: true для выполнения chown каталога журнала аудита
        • api deployment — развертывание API использует privileged: true для выполнения chown каталога журнала аудита
        • devops-api deployment — развертывание DevOps API требует privileged: true для выполнения chown каталога журнала аудита
        • задачи 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 clusters экземпляр Katanomi может быть развернут в любом namespace при наличии достаточных ресурсов. Для global cluster экземпляр Katanomi должен быть развернут исключительно в namespace cpaas-system.

    External URL

    Адрес доступа, который является адресом API. Планируйте в соответствии с конфигурацией типа Service.
    Если Service Type — Node Port, укажите http://<IP>:<Port>. Port должен совпадать с Node Port сервиса, а API порт используется для доступа к сервису.
    Если 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 и Plugin не должны дублироваться, диапазон значений портов 30000-32767.

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

    FAQ

    Под неудачным запуском Pod Katanomi из-за файловой системы root только для чтения: каталог /cpaas недоступен для записи

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

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

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

    Эта конфигурация направляет компоненты Katanomi использовать /tmp/audit как путь хранения журнала аудита, обеспечивая совместимость с окружениями, где корневая файловая система доступна только для чтения. Настройте путь в соответствии с требованиями безопасности и эксплуатации.

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

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

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

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