Управление компонентом PAC
Это руководство предназначено только для администраторов кластера. В нем описаны задачи развертывания, настройки и обслуживания компонента PAC, для выполнения которых требуются права администратора кластера.
Обычным пользователям следует обратиться к:
- Руководства - Настройка интеграции с Git-провайдером
В этом руководстве объясняется, как развертывать, обновлять и удалять компонент Pipelines-as-Code (PAC) на платформах Kubernetes.
Содержание
Предварительные требованияРазвертывание компонента PACШаг 1. Создайте CROpenShiftPipelinesAsCodeШаг 2. Примените конфигурациюШаг 3. Проверьте развертываниеНастройка доступаИспользование Gateway APIИспользование IngressИспользование NodePortПараметры конфигурацииОбновление компонента PACОбновление конфигурацииРаспространенные обновления конфигурацииНастройка пользовательских ссылок на consoleИзменение имени приложенияВключение обнаружения ошибокОбновление URL HubОтключение remote tasksУдаление компонента PACУдалите CR OpenShiftPipelinesAsCodeОчистите ресурсы, которыми operator не владеетУстранение неполадокPod'ы PAC не запускаютсяCR OpenShiftPipelinesAsCode не готовПроблемы TektonInstallerSetCR не удаляетсяРесурсы не удаляютсяСледующие шагиПредварительные требования
Перед управлением PAC убедитесь, что у вас есть:
- Кластер Kubernetes (версия 1.24 или выше)
- Установленный и запущенный Tekton Operator
- Права администратора кластера
- Установленный и настроенный kubectl для доступа к вашему кластеру
Развертывание компонента PAC
PAC развертывается путем создания CR OpenShiftPipelinesAsCode. Operator обнаруживает его и подготавливает все необходимые ресурсы.
Примеры в этом документе используют пространство имен PAC по умолчанию tekton-pipelines. Если вы задаете другое значение targetNamespace, замените tekton-pipelines в командах и манифестах.
Шаг 1. Создайте CR OpenShiftPipelinesAsCode
Создайте YAML-файл с именем pac.yaml:
- Имя ресурса должно быть
pipelines-as-code, иначе operator не развернет компонент PAC. - Поле
targetNamespaceуказывает, куда будут развернуты компоненты PAC. По умолчанию используетсяtekton-pipelines, но можно задать любое имя namespace.
Создайте namespace, если он еще не существует:
Шаг 2. Примените конфигурацию
Примените CR к вашему кластеру:
Пример вывода:
Шаг 3. Проверьте развертывание
Проверьте статус CR OpenShiftPipelinesAsCode:
В выводе должен отображаться CR со статусом Ready:
Проверьте статус TektonInstallerSet:
Пример вывода:
TektonInstallerSet — это внутренний ресурс, который Tekton Operator использует для развертывания PAC и его подресурсов (Deployments, Services, ConfigMaps, RBAC). Он создается и удаляется operator'ом при создании или удалении CR OpenShiftPipelinesAsCode. Не изменяйте и не удаляйте его вручную; здесь он упоминается только как контрольная точка статуса.
Проверьте, что pod'ы PAC запущены:
Пример вывода:
Три pod'а (controller, watcher, webhook) должны иметь статус Running.
Настройка доступа
Контроллер PAC должен быть доступен из Git-провайдеров, которые будут отправлять ему webhook-события. Перед настройкой любого repository опубликуйте его одним из способов ниже.
Использование Gateway API
Используйте этот способ, чтобы опубликовать контроллер PAC с доменным именем через ACP Gateway API.
В этом примере используются:
- Namespace PAC по умолчанию:
tekton-pipelines - GatewayClass:
envoy-gateway-operator-cpaas-default - Домен:
pac.example.com
Шаг 1. Подготовьте Envoy Gateway. Установите Alauda build of Envoy Gateway и убедитесь, что GatewayClass по умолчанию принят. Ссылка: Operator Envoy Gateway.
Шаг 2. Подготовьте адреса LoadBalancer. Сервис Envoy Gateway будет создан с типом LoadBalancer, поэтому сервисы LoadBalancer должны иметь возможность получить внешний IP. На bare-metal-кластерах ACP установите и настройте Alauda Container Platform Load Balancer for MetalLB. Ссылка: Настройка MetalLB.
Ожидаемый результат:
Шаг 3. Создайте ресурсы Gateway API. Создайте gateway-api.yaml. При необходимости замените tekton-pipelines, envoy-gateway-operator-cpaas-default и pac.example.com. Ссылки: Настройка GatewayAPI Gateway и Настройка GatewayAPI Route.
Примените файл:
Ожидаемый результат:
Шаг 4. Получите внешний адрес. Проверьте созданный сервис Envoy:
Ожидаемый результат:
Шаг 5. Проверьте и получите URL webhook. Убедитесь, что Git-провайдер может разрешить и открыть домен PAC. Обычный способ — создать DNS A-запись. Например, если EXTERNAL-IP сервиса — 192.168.1.100, создайте:
Если DNS еще не готов или вы хотите протестировать маршрут только со своей текущей машины, используйте curl --resolve:
Ожидаемый результат:
- Сервис имеет
EXTERNAL-IP. - Для Gateway указано
PROGRAMMED=True. HTTPRouteпринят.curlвозвращает ответ контроллера PAC.
После того как домен станет доступен из сети Git-провайдера, выведите URL:
WEBHOOK_URL — это URL webhook PAC. Зарегистрируйте это значение в Git-провайдере или введите его, когда tkn pac create repo запросит URL webhook.
Если вместо этого вы публикуете PAC через ACP ALB или другой Ingress Controller, используйте Использование Ingress.
Примечания:
HTTPRouteперенаправляет трафик на существующий сервисpipelines-as-code-controllerна порту8080; не указывайте его на admission webhook Service с именемpipelines-as-code-webhook.- Если созданный сервис Envoy остается в состоянии
EXTERNAL-IP=<pending>, проверьте провайдера LoadBalancer кластера. Для MetalLB см. Настройка MetalLB. - Сведения о параметрах Gateway API, таких как зарезервированный VIP, маршруты без host или HTTPS-listener'ы, см. в Настройка GatewayAPI Gateway и Настройка GatewayAPI Route.
Использование Ingress
Используйте этот способ, если в кластере уже есть Ingress Controller и вы хотите опубликовать контроллер PAC через домен Ingress.
В этом примере используются:
- Namespace PAC по умолчанию:
tekton-pipelines - Домен:
pac.example.com
Шаг 1. Подготовьте Ingress Controller. Убедитесь, что Ingress Controller установлен и готов к работе. Ссылка: Настройка Ingress.
Шаг 2. Создайте ресурс Ingress. Создайте ingress.yaml. При необходимости замените tekton-pipelines и pac.example.com.
Примените файл:
Ожидаемый результат:
Шаг 3. Проверьте адрес Ingress. Убедитесь, что Ingress имеет адрес:
Ожидаемый результат:
Шаг 4. Получите URL webhook. Убедитесь, что Git-провайдер может разрешить и открыть pac.example.com через адрес Ingress. Затем выведите URL:
WEBHOOK_URL — это URL webhook PAC. Зарегистрируйте это значение в Git-провайдере или введите его, когда tkn pac create repo запросит URL webhook.
Если у вас нет DNS-имени, удалите поле host и используйте вместо него доступный URL IP Ingress.
Необязательно: включите HTTPS. Создайте TLS Secret в tekton-pipelines и добавьте раздел tls в тот же Ingress. Сертификат должен соответствовать pac.example.com.
Когда TLS настроен, используйте HTTPS URL webhook:
Использование NodePort
Создайте Service типа NodePort:
Важно:
targetPortдолжен быть8082, это порт, на котором pod контроллера PAC принимает webhook-событияport(8080) — это порт Service (используется для внутренней связи внутри кластера)nodePort(30080) — это внешний порт, доступный извне кластера- Для Ingress порт Service — 8080, он внутренне маршрутизируется на порт контроллера 8082
Выведите URL на основе доступного IP узла и сгенерированного NodePort:
WEBHOOK_URL — это URL webhook PAC. Зарегистрируйте это значение в Git-провайдере или введите его, когда tkn pac create repo запросит URL webhook.
Параметры конфигурации
Вы можете настраивать поведение PAC через поле settings в CR OpenShiftPipelinesAsCode:
hub-url указывает на Tekton Hub, который контроллер PAC запрашивает при разрешении remote tasks. URL внутри кластера по умолчанию — http://tekton-hub-api.tekton-pipelines:8000/v1; для Hub в другом namespace используйте тот же формат service DNS с нужным namespace.
Параметры custom-console-* переписывают ссылки на стороне кластера, которые PAC отправляет обратно в Git-провайдер, чтобы они вели на console платформы, а не на OpenShift Console. Пошаговое описание приведено в разделе Настройка пользовательских ссылок на console.
Обновление компонента PAC
Обновление конфигурации
-
Отредактируйте CR
OpenShiftPipelinesAsCode: -
При необходимости обновите поле
settings: -
Сохраните изменения и выйдите. Operator автоматически обновит TektonInstallerSet и применит изменения.
Распространенные обновления конфигурации
Примеры в этом разделе обновляют поле spec.settings CR OpenShiftPipelinesAsCode с именем pipelines-as-code.
Настройка пользовательских ссылок на console
Параметры custom-console-* переписывают ссылки на стороне кластера, которые PAC отправляет обратно в Git-провайдер, чтобы они указывали на console платформы. Замените console.example.com и my-cluster на адрес вашей console и имя кластера:
Эффект: ссылки на статусы в Git-провайдере открывают страницы PipelineRun и task в console платформы вместо стандартных URL-заглушек в стиле OpenShift.
PAC подставляет эти переменные, когда публикует ссылки на статусы:
Для PipelineRun с именем my-app-build-abc123 в namespace my-app PAC формирует ссылки вроде:
Эти URL отображаются в статусах commit, панелях GitHub Checks и комментариях merge request.
Изменение имени приложения
Используйте этот параметр, чтобы изменить отображаемое имя, которое PAC использует в сообщениях статуса Git-провайдера:
Эффект: checks, статусы и комментарии Git-провайдера показывают новое имя приложения. Это не меняет имя ресурса OpenShiftPipelinesAsCode.
Включение обнаружения ошибок
Эффект: PAC анализирует логи неудачных task и добавляет краткий фрагмент ошибки в feedback Git-провайдера.
Обновление URL Hub
Если ваш Tekton Hub развернут в другом namespace или вы хотите использовать внешний Hub:
Эффект: PAC разрешает remote tasks из указанного Tekton Hub API вместо Hub внутри кластера по умолчанию.
Чтобы найти свой service Tekton Hub:
Пример вывода:
Отключение remote tasks
Используйте remote-tasks, чтобы управлять тем, будет ли PAC получать и встраивать удаленные ресурсы, на которые ссылаются аннотации PAC.
remote-tasks: "true" — значение по умолчанию. PAC может получать удаленные ресурсы, на которые ссылаются аннотации pipelinesascode.tekton.dev/task и pipelinesascode.tekton.dev/pipeline, а затем встраивать разрешенный Task или Pipeline в сгенерированный PipelineRun.
remote-tasks: "false" отключает разрешение удаленных ресурсов на основе аннотаций PAC. Код Pipeline должен определить необходимые Pipeline и Tasks в repository, встроить их напрямую или полагаться на cluster resources.
Этот параметр не отключает синтаксис remote resolver в Tekton Pipelines, например taskRef.resolver или pipelineRef.resolver; ими управляет controller Tekton Pipelines.
Эффект: используйте "false", если хотите запретить PAC получать remote Tasks или Pipelines по ссылкам из аннотаций.
Удаление компонента PAC
Удалите CR OpenShiftPipelinesAsCode
Удаление CR заставляет operator удалить TektonInstallerSet и все объекты PAC Deployment, Service, ConfigMap и RBAC, которые создал operator.
Убедитесь, что CR, installer set и pod'ы удалены:
Каждая из этих команд должна вернуть No resources found.
Очистите ресурсы, которыми operator не владеет
Operator удаляет все, что он создал. Ресурсы, которые вы добавили вручную, остаются и должны быть удалены вручную.
Repository CR в пользовательских namespace:
Secrets для каждого repository в пользовательских namespace. Это токены доступа Git-провайдера (provider.token) и webhook secrets (webhook.secret), создаваемые пользователями при настройке repositories. Cluster secrets, которыми владеет PAC и которые имеют метку app.kubernetes.io/part-of=pipelines-as-code, удаляются operator'ом; эти per-repository secrets — нет. Перед удалением убедитесь, что каждый Secret не используется другим ресурсом:
Ресурсы Gateway API для контроллера PAC, если вы создали их в разделе Настройка доступа:
Ingress / Service типа NodePort для контроллера PAC, если вы создали их в разделе Настройка доступа:
Устранение неполадок
Pod'ы PAC не запускаются
Проверьте логи pod'ов:
Пример вывода (пример записей журнала):
CR OpenShiftPipelinesAsCode не готов
Проверьте статус CR и события:
Пример вывода (сокращенно):
Проблемы TektonInstallerSet
Когда TektonInstallerSet не имеет статуса Ready, прочитайте его conditions и представление operator'а о соответствующем CR OpenShiftPipelinesAsCode. Оба варианта — только для чтения; никогда не удаляйте installer set самостоятельно.
Если ошибки сохраняются, заново создайте CR OpenShiftPipelinesAsCode — operator перестроит installer set с нуля.
CR не удаляется
Удаление, которое зависает, обычно удерживается finalizer'ом operator'а. Просмотрите finalizer'ы:
Наличие finalizer'а tekton.dev/operator означает, что operator все еще выполняет очистку; подождите и повторите попытку. Пустой вывод означает, что CR можно удалить.
Ресурсы не удаляются
Когда pod'ы или Service остаются после удаления: