1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/mirrors-Knative

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
DEVELOPMENT.md 18 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
Отправлено 07.03.2025 22:37 1077572

Разработка

Документ объясняет, как создать среду разработки, чтобы вы могли приступить к вкладу в Knative Serving. Также проверьте:

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

Следуйте инструкциям ниже, чтобы установить вашу среду разработки. Как только вы выполните эти требования, вы сможете делать изменения и развертывать свою версию Knative Serving!

Перед отправкой запроса на слияние также проверьте CONTRIBUTING.md.

Создайте учетную запись GitHub

Начните с создания учетной записи GitHub, затем настройте доступ к GitHub через SSH.

Установка требуемых инструментов

Вы должны установить следующие инструменты:

  1. go: Язык, на котором построен Knative Serving (1.16 или выше)
  2. git: Для контроля версий
  3. ko: Для разработки
  4. kubectl: Для управления средами разработки
  5. bash 4 или выше. На macOS стандартная версия bash слишком старая, вы можете использовать Homebrew для установки более новой версии.

Если вы работаете над и изменяете файлы .proto:1. protoc: Для компиляции протоколов буферов.

  1. protoc-gen-gogofaster: Для генерации эффективного кода на Go из протоколов буферов.

Создание кластера и репозитория

  1. Настройка кластера Kubernetes

    • Минимальная поддерживаемая версия — 1.20.0
    • Следуйте инструкциям в документации Kubernetes.
  2. Настройте репозиторий Docker для отправки образов. Вы можете использовать любой контейнерный регистр образов, настроив методы аутентификации и пути репозиториев, указанные ниже.

    • Быстрый старт Google Container Registry
    • Быстрый старт Docker Hub
    • При локальном разработке с использованием Docker или Minikube вы можете установить KO_DOCKER_REPO=ko.local (предпочтительно) или использовать флаг -L команды ko, чтобы локально собирать и отправлять образы (в этом случае аутентификация не требуется). Если вы используете Kind, установите KO_DOCKER_REPO=kind.local. - Если при использовании Minikube или Kind возникает ошибка ImagePullBackOff, это может быть связано с невозможностью кластера запрашивать локально собранные образы из-за политик запроса образов. Для решения этой проблемы рассмотрите возможность включения локального регистра: для Minikube или для Kind. Примечание: вам потребуется аутентификация с помощью вашей переменной KO_DOCKER_REPO перед отправкой образов. Выполните команду gcloud auth configure-docker, если вы используете Google Container Registry, или docker login, если вы используете Docker Hub.### Настройка окружения

Чтобы запустить своё окружение, вам потребуется установить следующую переменную окружения (мы рекомендуем добавить её в свой .bashrc):

  1. KO_DOCKER_REPO: Докер-репозиторий, куда должны быть отправлены образы разработчика (например, gcr.io/[gcloud-project]).
  • Примечание: если вы используете Docker Hub для хранения своих образов, ваша переменная KO_DOCKER_REPO должна быть docker.io/<ваш_пользователь>.
  • Примечание: В настоящее время Docker Hub не позволяет создавать подкаталоги под вашим именем пользователя.

Пример .bashrc:

export KO_DOCKER_REPO='gcr.io/my-gcloud-project-id'

Клонирование вашего форка

Чтобы клонировать этот репозиторий:

  1. Создайте свой форк этого репозитория
  2. Клонируйте его на ваш компьютер:
git clone git@github.com:${YOUR_GITHUB_USERNAME}/serving.git
cd serving
git remote add upstream https://github.com/knative/serving.git
git remote set-url --push upstream no_push

Добавление удалённого репозитория upstream отлично подготовит вас для регулярной синхронизации вашего форка.

После выполнения этих шагов вы готовы сделать полное построение и развертывание, как это описано ниже.

Запуск Knative ServingПосле того, как вы настроили свое окружение разработки, запустите Knative Serving. Обратите внимание, что если вы уже установили Knative в своем кластере, повторное развертывание новой версии должно пройти успешно, но если возникнут проблемы, вы можете легко очистить свой кластер и попробовать снова.Перейдите в директорию serving, чтобы установить следующие компоненты.

Настройка cluster-admin

Ваш пользователь должен быть cluster-admin для выполнения требуемых настроек для Knative. Это должно быть так по умолчанию, если вы самостоятельно предоставили свой кластер Kubernetes. В частности, вам потребуется возможность создания объектов типа Namespace, CustomResourceDefinition, ClusterRole и ClusterRoleBinding уровня кластера Kubernetes.

Распределение ресурсов для Kubernetes

Пожалуйста, выделите достаточные ресурсы для Kubernetes, особенно если вы запускаете кластер Kubernetes на локальной машине. Мы рекомендуем выделение как минимум 6 процессорных ядер и 8 ГБ оперативной памяти при одиночной ноде установке Kubernetes, а также выделение как минимум 4 процессорных ядер и 8 ГБ оперативной памяти для каждой ноды при трёхнодовой установке Kubernetes. Пожалуйста, вернитесь к настройке вашего кластера, чтобы переопределить конфигурацию вашего кластера Kubernetes в вашей выбранной среде, если это необходимо.

Развертывание cert-manager

  1. Разверните cert-manager

    kubectl apply -f ./third_party/cert-manager-latest/cert-manager.yaml
    kubectl wait --for=condition=Established --all crd
    kubectl wait --for=condition=Available -n cert-manager --all deployments

Развертывание Knative Serving- Этот шаг включает сборку Knative Serving, создание и отправку образов разработчика,

а также их развертывание в вашем кластере Kubernetes. Если вы работаете локально, установите KO_DOCKER_REPO=ko.local (или KO_DOCKER_REPO=kind.local соответственно), чтобы избежать необходимости отправки ваших образов в реестр снаружи машины.- По умолчанию, ko будет строить контейнерные образы для архитектуры вашего локального компьютера, но если вам требуется сборка образов для другой платформы (ОС и архитектура), вы можете предоставить флаг --platform следующим образом:

# Описание использования
ko apply -f FILENAME [флаги]

# Пример использования
ko apply --selector knative.dev/crd-install=true -Rf config/core/ --platform linux/arm64

Запустите:

ko apply --selector knative.dev/crd-install=true -Rf config/core/
kubectl wait --for=condition=Established --all crd

ko apply -Rf config/core/

# Дополнительные шаги

# Запустите задачу после установки, чтобы установить приятное имя домена sslip.io. Это работает только если ваш Kubernetes LoadBalancer имеет IPv4 адрес.
ko delete -f config/post-install/default-domain.yaml --ignore-not-found
ko apply -f config/post-install/default-domain.yaml

Вышеупомянутый шаг эквивалентен применению файлов serving-crds.yaml, serving-core.yaml, serving-hpa.yaml и serving-nscert.yaml для выпущенных версий Knative Serving.

Вы можете просмотреть запущенные компоненты с помощью:

kubectl -n knative-serving get pods
NAME                                     READY   STATUS    RESTARTS   AGE
activator-7454cd659f-rrz86               1/1     Running   0          1m45s
autoscaler-58cbfd4985-fl5h7              1/1     Running   0          1m45s
autoscaler-hpa-77964b9b8c-9sbgq          1/1     Running   0          1m45s
controller-847b7cc977-5mvvq              1/1     Running   0          1m45s
webhook-6b6c77567f-flr59                 1/1     Running   0          1m45s

Вы можете получить журналы контроллера Knative Serving с помощью:```shell kubectl -n knative-serving logs $(kubectl -n knnative-serving get pods -l app=controller -o name) -c controller

Если вы используете проект GCP для размещения своего кластера Kubernetes, полезно проверить страницу
[Обнаружение и балансировка нагрузки](http://console.developers.google.com/kubernetes/discovery)
для обеспечения того, что все службы работают корректно (и не заблокированы из-за ограничения квоты, например).### Установка Knative Ingress

Knative поддерживает различные решения для Ingress.

Для простоты можно просто выполнить следующую команду для установки Kourier.

```bash
kubectl apply -f ./third_party/kourier-latest/kourier.yaml

kubectl patch configmap/config-network \
  -n knative-serving \
  --type merge \
  -p '{"data":{"ingress.class":"kourier.ingress.networking.knative.dev"}}'

Если вы хотите выбрать другое решение для Ingress, следует следовать инструкциям в документации по установке Knative Установка слоя сетей для выбора альтернативного решения Ingress и его установки.

Итерация

При внесении изменений в базу кода существуют несколько специальных случаев, на которые следует обратить внимание:

  • Если вы меняете входные данные сгенерированного кода, то вам нужно запустить ./hack/update-codegen.sh. Входные данные включают:

    • Определения типов API в pkg/apis/serving/v1/.
    • Определения типов, аннотированные с // +k8s:deepcopy-gen=true.
    • Значение _example конфигурационных карт (для синхронизации аннотаций knative.dev/example-checksum). Эти значения также могут быть отдельно обновлены с помощью ./hack/update-checksums.sh.
    • Файлы .proto. Выполните ./hack/update-codegen.sh с флагом --generate-protobufs, чтобы включить генерацию протокола буферов.
  • Если вы меняете зависимости пакета (включая добавление внешней зависимости), то вам нужно запустить ./hack/update-deps.sh.- Если вы меняете поверхность PodSpec, которую мы разрешаем в наших ресурсах, то вам нужно обновить соответствующий раздел ./hack/schemapatch-config.yaml и запустить ./hack/update-schemas.sh. Дополнительно:

    • Если новое поле добавлено после флага функциональности, то добавьте kubebuilder:validation:DropProperties и kubebuilder:pruning:PreserveUnknownFields как additionalMarkers.

      additionalMarkers:
      # Часть флага функциональности - поэтому нам нужно исключить схему и сохранить неизвестные поля
      - kubebuilder:validation:DropProperties
      - kubebuilder:pruning:PreserveUnknownFields

Это все идемпотентные операции, и мы ожидаем, что выполнение этих команд в вершине (HEAD) не приведёт к различиям. Генерация кода и зависимости автоматически проверяются для отсутствия различий для каждого запроса на вытягивание (pull request).

update-deps.sh выполняет команды go get/mod. В некоторых случаях, если требуются более новые зависимости, вам потребуется запустить "go get" вручную.

Как только информация о генерации кода, зависимостей и схемах станет правильной, повторное развертывание контроллера будет просто:

ko apply -f config/core/deployments/controller.yaml

Или вы можете полностью очистить всё и повторно развернуть Knative Serving полностью.

Обновление существующих зависимостейДля обновления существующих зависимостей выполните следующие команды:

./hack/update-deps.sh --upgrade && ./hack/update-codegen.sh

Очистка

Вы можете удалить все компоненты служб с помощью следующей команды:

ko delete --ignore-not-found=true \
  -Rf config/core/ \
  -f ./third_party/kourier-latest/kourier.yaml \
  -f ./third_party/cert-manager-latest/cert-manager.yaml

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/mirrors-Knative.git
git@api.gitlife.ru:oschina-mirror/mirrors-Knative.git
oschina-mirror
mirrors-Knative
mirrors-Knative
main