digitalocean-cloud-controller-manager
-это реализация Cloud Controller Manager Kubernetes для DigitaloCean. Узнайте больше о менеджерах Cloud Controller здесь. Запуск digitalocean-cloud-controller-manager
позволяет использовать многие функции облачных поставщиков, предлагаемые DigitaloCean на ваших кластерах Kubernetes.
Cloud Controller Manager следует за семантическим управлением версиями. Хотя версия все еще ниже v1, проект считается готовым к производству.
Из -за быстрых циклов выпуска Kubernetes CCM (Cloud Controller Manager) будет поддерживать только версию, которая также поддерживается на продукте DigitalOcean Kubernetes. Любые другие релизы не будут официально поддержаны нами.
Узнайте больше о запуске менеджера Cloud Controller DigitaloCean!
Обратите внимание, что эта СКК установлен по умолчанию на DOKS (Digitalocean Managed Kubernetes), вам не нужно делать это самостоятельно.
Вот несколько примеров того, как вы могли бы использовать digitalocean-cloud-controller-manager
:
Когда вы создаете балансировщики нагрузки через CCM (через сервисы LoadBalancer
-typed), очень важно, чтобы вы не могли вручную изменять конфигурацию Do Load-Balancer. Такие изменения в конечном итоге будут возвращены петлей примирения, встроенной в CCM. Есть одно исключение в названии балансера загрузки, которое может быть изменено (см. Также документацию по аннотациям идентификации балансера загрузки).
Кроме этого, единственным безопасным местом для изменения конфигурации нагрузочного балансера является изменение сервисного объекта.
По техническим причинам порты 50053, 50054 и 50055 не могут быть использованы в качестве портов ввода-балансера (т. Е. Порт, по которому балансера нагрузки слушает запросы). Попытка использовать один из пораженных портов в качестве сервисного порта приводит к тому, что входной порт 422 является недействительным ответом на ошибку HTTP, который будет возвращен DO API (и появляется как событие Kubernetes).
Решение состоит в том, чтобы изменить сервисный порт на другой, неконтролирующий.
v1.17.x
Этот проект использует модули GO для управления зависимостями и использует поставки. Пожалуйста, убедитесь, что запустить make vendor
после любых модификаций зависимости.
После изменения вашего кода запустите тесты и проверки CI:
make ci
Если вы хотите запустить digitalocean-cloud-controller-manager
локально против определенного кластера, держите свой KubeConfig в готовой и запустите бинарный в основном каталоге с пакетом, как это:
cd cloud-controller-manager/cmd/digitalocean-cloud-controller-manager
REGION=fra1 DO_ACCESS_TOKEN=your_access_token go run main.go
--kubeconfig < path to your kubeconfig file >
--leader-elect=false --v=5 --cloud-provider=digitalocean
Переменная среды REGION
принимает действительный регион DigitaloCean. Он может быть настроен, чтобы не дать digitalocean-cloud-controller-manager
попытаться получить доступ к службе метаданных DigitaloCean, которая доступна только на капельках. Если переменная региона установлена, то служба DO Degions будет использоваться для проверки указанной области. Это также может быть установлено для локальных целей разработки. В целом, какой регион вы выберете, не должен иметь большого значения, если вы выберете один.
Вам также может потребоваться предоставить ваш токен доступа DigitaloCean в переменной среды DO_ACCESS_TOKEN
. Токен не должен быть действительным для запуска облачного контроллера, но в этом случае вы не сможете проверять интеграцию с API DigitaloCean.
Обратите внимание, что если вы используете кластер Kubernetes, созданный на DigitaloCean, в кластере уже будет работать облачный диспетчер контроллеров, поэтому ваш локальный будет конкурировать за доступ к API.
У вас может быть digitalocean-cloud-controller-manager
управлять брандмауэром DigitaloCean, который будет динамически настраивать правила для доступа к NodePorts: как только будет создан сервис NodePort
, контроллер брандмауэра обновит брандмауэр, чтобы публично разрешить доступ только к этому NodePort. Аналогичным образом, доступ автоматически отозван, если сервис удаляется или изменяется на другой тип.
Пример вызова:
cd cloud-controller-manager/cmd/digitalocean-cloud-controller-manager
DO_ACCESS_TOKEN= < your_access_token >
PUBLIC_ACCESS_FIREWALL_NAME=firewall_name
PUBLIC_ACCESS_FIREWALL_TAGS=worker-droplet
digitalocean-cloud-controller-manager
--kubeconfig < path to your kubeconfig file >
--leader-elect=false --v=5 --cloud-provider=digitalocean
Переменная среда PUBLIC_ACCESS_FIREWALL_NAME
определяет имя брандмауэра. Брандмауэр создается, если брандмауэр под этим именем не найдено.
Переменная среда PUBLIC_ACCESS_FIREWALL_TAGS
относится к тегам, связанным с каплями, к которым должен применяться брандмауэр. Обычно это тег, прикрепленный к каплям рабочих узлов. Несколько тегов применяются в логике или моде.
В некоторых случаях управление брандмауэром для конкретной услуги может быть нежелательным. Одним из примеров является то, что Nodeport должен быть доступен только для VPC. В таких случаях аннотация услуг kubernetes.digitalocean.com/firewall-managed
может использоваться для избирательного исключения данной услуги из управления брандмауэром. Если для Сервиса будет установлена "false"
, для службы не будет создано входящих правил, эффективно отключив общественный доступ к NodePort. (Обратите внимание на кавычки, которые должны быть включены со значениями «логического» аннотации.) Поведение по умолчанию применяется, если аннотация опущена, устанавливается на "true
» или содержит недопустимое значение.
Брандмауэр не управляется, если переменные среды отсутствуют или оставлены пустыми. Как только брандмауэр создан, общедоступный доступ, кроме Nodeports, не допускается. Пользователи должны создавать дополнительные брандмауэры для дальнейшего расширения доступа.
Если вы заинтересованы в разоблачении метрик Prometheus, вы можете пройти в конечной точке метрик, которая их выставит. Команда будет выглядеть похоже на это:
cd cloud-controller-manager/cmd/digitalocean-cloud-controller-manager
DO_ACCESS_TOKEN=your_access_token
METRICS_ADDR= < host > : < port >
digitalocean-cloud-controller-manager
--kubeconfig < path to your kubeconfig file >
--leader-elect=false --v=5 --cloud-provider=digitalocean
Переменная среда METRICS_ADDR
занимает действительную конечную точку, которую вы хотели бы использовать для обслуживания ваших метрик Prometheus. Чтобы быть действительным, он должен быть в форме <host>:<port>
>.
После того, как вы запустили digitalocean-cloud-controller-manager
, запустите следующую команду Curl, чтобы просмотреть выход метрик Prometheus:
curl < host > : < port > /metrics
Сервер поступления является необязательным компонентом, направленным на сокращение плохих изменений конфигурации для управляемых объектов (фунтов и т. Д.). Если вы хотите узнать об этом больше, прочитайте документы.
Использование API подлежит определенным ограничениям. Чтобы защитить от выпуска квоты для чрезвычайно тяжелых регулярных или патологических случаев (например, ошибки или API, из-за мешающего стороннего контроллера), может быть настроен ограничение на пользовательскую скорость с помощью переменной среды DO_API_RATE_LIMIT_QPS
. Он принимает значение плавающего, например, DO_API_RATE_LIMIT_QPS=3.5
, чтобы ограничить использование API 3,5 запросами в секунду.
Если вы хотите проверить свои изменения в контейнерной среде, создайте новое изображение с версией, установленной для dev
:
VERSION=dev make publish
Это создаст двоичный файл с изображением dev
и Docker, выдвинутым в digitalocean/digitalocean-cloud-controller-manager:dev
.
go get -u ./...
go mod tidy
go mod vendor
Чтобы создать изображение Docker и генерировать манифесты, перейдите на страницу действий на GitHub и нажмите «Запустить рабочий процесс». Укажите GitHub <tag>
, который вы хотите создать, убедившись, что он префикс с v
Запуск рабочего процесса также требует, чтобы вы временно отключали «требуют запроса на вытяжение перед слиянием» настройки в настройках правил защиты главного филиала. Не забудьте включить его, как только релиз закончится!
Рабочий процесс делает следующее:
make bump-version
с <tag>
<tag>.yaml
releases/
каталог» в репо<tag>
, когда работает рабочий процессdigitalocean/digitalocean-cloud-controller-manager:<tag>
digitalocean/digitalocean-cloud-controller-manager:<tag>
to dockerhubПримечание. Этот рабочий процесс устарел, пожалуйста, предпочитайте рабочий процесс действия GitHub, описанный выше.
Чтобы вручную выпустить новую версию, сначала выбивайте версию:
make NEW_VERSION=v1.0.0 bump-version
Убедитесь, что все выглядит хорошо. Создайте новую ветку со всеми изменениями:
git checkout -b release- < new version > origin/master
git commit -a -v
git push origin release- < new version >
После того, как он объединится, чтобы освоить, отметьте коммит и подтолкнуть:
git checkout master
git pull
git tag < new version >
git push origin < new version >
Наконец, создайте релиз Github от Master с новой версией и опубликуйте его:
make publish
Это составят двоичный, содержащий новую версию, связанную с изображением Docker, нажатым на digitalocean/digitalocean-cloud-controller-manager:<new version>
В DigitaloCean мы ценим и любим наше сообщество! Если у вас есть какие -либо проблемы или вы хотите внести свой вклад, не стесняйтесь открывать проблему/PR и CC любого из сопровождающих ниже.