Менеджер облачных контроллеров Hetzner Cloud интегрирует ваш кластер Kubernetes с API-интерфейсами Hetzner Cloud & Robot.
Node
информацией о сервере из Cloud & Robot API.Node
при удалении сервера в API.type: LoadBalancer
и создает для них облачные балансировщики нагрузки Hetzner, добавляет узлы Kubernetes в качестве целей для балансировщика нагрузки.Подробнее об облачных контроллерах читайте в документации Kubernetes.
apiVersion : v1
kind : Node
metadata :
labels :
node.kubernetes.io/instance-type : cx22
topology.kubernetes.io/region : fsn1
topology.kubernetes.io/zone : fsn1-dc8
instance.hetzner.cloud/provided-by : cloud
name : node
spec :
podCIDR : 10.244.0.0/24
providerID : hcloud://123456 # <-- Hetzner Cloud Server ID
status :
addresses :
- address : node
type : Hostname
- address : 1.2.3.4 # <-- Hetzner Cloud Server public ipv4
type : ExternalIP
В этом примере развертывания используется kubeadm
для загрузки кластера Kubernetes с фланнелем в качестве оверлейного сетевого агента. Не стесняйтесь адаптировать шаги к предпочитаемому вами методу установки Kubernetes.
Эти инструкции по развертыванию предназначены для помощи при установке hcloud-cloud-controller-manager
и ни в коем случае не являются подробным руководством по настройке кластеров Kubernetes. Требуются предварительные знания об задействованных компонентах.
Пожалуйста, обратитесь к руководству по созданию кластера kubeadm, которое эти инструкции призваны дополнить, а также к документации kubeadm.
Диспетчер облачного контроллера добавляет метки при добавлении узла в кластер. Для текущих версий Kubernetes это означает, что нам нужно добавить флаг --cloud-provider=external
в kubelet
. То, как вы это сделаете, зависит от вашего дистрибутива Kubernetes. С помощью kubeadm
вы можете установить его либо в конфигурации kubeadm ( nodeRegistration.kubeletExtraArgs
), либо через вставной модуль systemd /etc/systemd/system/kubelet.service.d/20-hcloud.conf
:
[Service]
Environment = " KUBELET_EXTRA_ARGS=--cloud-provider=external "
Примечание. Флаг --cloud-provider
устарел, начиная с K8S 1.19. Вы увидите сообщение журнала об этом. На данный момент (v1.31) он все еще требуется.
Теперь плоскость управления можно инициализировать:
sudo kubeadm init --pod-network-cidr=10.244.0.0/16
Настройте kubectl для подключения к kube-apiserver:
mkdir -p $HOME /.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME /.kube/config
sudo chown $( id -u ) : $( id -g ) $HOME /.kube/config
Разверните плагин Flannel CNI:
kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml
Исправьте развертывание фланели, чтобы оно допускало uninitialized
порчу:
kubectl -n kube-system patch ds kube-flannel-ds --type json -p ' [{"op":"add","path":"/spec/template/spec/tolerations/-","value":{"key":"node.cloudprovider.kubernetes.io/uninitialized","value":"true","effect":"NoSchedule"}}] '
Создайте секрет, содержащий ваш токен Hetzner Cloud API.
kubectl -n kube-system create secret generic hcloud --from-literal=token= < hcloud API token >
Развертывание hcloud-cloud-controller-manager
Использование Helm (рекомендуется):
helm repo add hcloud https://charts.hetzner.cloud
helm repo update hcloud
helm install hccm hcloud/hcloud-cloud-controller-manager -n kube-system
Дополнительную информацию см. в README диаграммы Helm.
Устаревший метод установки :
kubectl apply -f https://github.com/hetznercloud/hcloud-cloud-controller-manager/releases/latest/download/ccm.yaml
Когда вы используете Cloud Controller Manager с поддержкой сетей, CCM предпочитает выделять IP-адреса (и настраивать маршрутизацию) (Документация: https://kubernetes.io/docs/concepts/architecture/cloud-controller/#route- контроллер). Плагин CNI, который вы используете, должен поддерживать встроенную функциональность k8s (это делает Cilium, я не знаю о Calico и WeaveNet), поэтому в основном вы используете Hetzner Cloud Networks в качестве базового сетевого стека.
Когда вы используете CCM без поддержки сетей, он просто отключает часть RouteController, все остальные части работают совершенно одинаково. Тогда только CNI отвечает за создание всего сетевого стека. Преимущество использования CCM с поддержкой сетей заключается в том, что ваш узел подключен к частной сети, поэтому узлу не нужно шифровать соединения, и у вас немного меньше эксплуатационных расходов, поскольку вам не нужно управлять сетью.
Если вы хотите использовать функцию Hetzner Cloud Networks
, перейдите к документации поддержки развертывания с помощью сетей.
Если вы управляете сетью самостоятельно, вам все равно может потребоваться сообщить CCM о частных сетях. Это можно сделать, добавив переменную среды с именем/идентификатором сети в развертывании CCM.
env:
- name: HCLOUD_NETWORK
valueFrom:
secretKeyRef:
name: hcloud
key: network
Вам также необходимо добавить имя/идентификатор сети в секрет: kubectl -n kube-system create secret generic hcloud --from-literal=token=<hcloud API token> --from-literal=network=<hcloud Network_ID_or_Name>
.
Если kube-proxy
запускается в режиме IPVS, манифест Service
должен иметь аннотацию load-balancer.hetzner.cloud/hostname
, где полное доменное имя разрешается в IP-адрес HCloud LoadBalancer.
См. № 212.
Мы стремимся поддерживать три последние версии Kubernetes. Когда версия Kubernetes помечается как «Окончание срока службы» , мы прекращаем ее поддержку и удаляем эту версию из наших CI-тестов. Это не обязательно означает, что Cloud Controller Manager все еще не работает с этой версией. Мы не будем исправлять ошибки, связанные только с неподдерживаемой версией.
Текущие выпуски Kubernetes: https://kubernetes.io/releases/.
Кубернетес | Менеджер облачного контроллера | Файл развертывания |
---|---|---|
1.31 | последний | https://github.com/hetznercloud/hcloud-cloud-controller-manager/releases/latest/download/ccm-networks.yaml |
1.30 | последний | https://github.com/hetznercloud/hcloud-cloud-controller-manager/releases/latest/download/ccm-networks.yaml |
1,29 | последний | https://github.com/hetznercloud/hcloud-cloud-controller-manager/releases/latest/download/ccm-networks.yaml |
1,28 | последний | https://github.com/hetznercloud/hcloud-cloud-controller-manager/releases/latest/download/ccm-networks.yaml |
1,27 | v1.20.0 | https://github.com/hetznercloud/hcloud-cloud-controller-manager/releases/download/v1.20.0/ccm-networks.yaml |
1,26 | v1.19.0 | https://github.com/hetznercloud/hcloud-cloud-controller-manager/releases/download/v1.19.0/ccm-networks.yaml |
1,25 | v1.19.0 | https://github.com/hetznercloud/hcloud-cloud-controller-manager/releases/download/v1.19.0/ccm-networks.yaml |
1.24 | v1.17.2 | https://github.com/hetznercloud/hcloud-cloud-controller-manager/releases/download/v1.17.2/ccm-networks.yaml |
1.23 | v1.13.2 | https://github.com/hetznercloud/hcloud-cloud-controller-manager/releases/download/v1.13.2/ccm-networks.yaml |
Кубернетес | Менеджер облачного контроллера | Файл развертывания |
---|---|---|
1.31 | последний | https://github.com/hetznercloud/hcloud-cloud-controller-manager/releases/latest/download/ccm.yaml |
1.30 | последний | https://github.com/hetznercloud/hcloud-cloud-controller-manager/releases/latest/download/ccm.yaml |
1,29 | последний | https://github.com/hetznercloud/hcloud-cloud-controller-manager/releases/latest/download/ccm.yaml |
1,28 | последний | https://github.com/hetznercloud/hcloud-cloud-controller-manager/releases/latest/download/ccm.yaml |
1,27 | v1.20.0 | https://github.com/hetznercloud/hcloud-cloud-controller-manager/releases/download/v1.20.0/ccm.yaml |
1,26 | v1.19.0 | https://github.com/hetznercloud/hcloud-cloud-controller-manager/releases/download/v1.19.0/ccm.yaml |
1,25 | v1.19.0 | https://github.com/hetznercloud/hcloud-cloud-controller-manager/releases/download/v1.19.0/ccm.yaml |
1.24 | v1.17.2 | https://github.com/hetznercloud/hcloud-cloud-controller-manager/releases/download/v1.17.2/ccm.yaml |
1.23 | v1.13.2 | https://github.com/hetznercloud/hcloud-cloud-controller-manager/releases/download/v1.13.2/ccm.yaml |
Чтобы настроить среду разработки, убедитесь, что вы установили следующие инструменты:
HCLOUD_TOKEN
в сеансе оболочки. Предупреждение
Среда разработки работает на серверах Hetzner Cloud, что требует затрат.
make -C dev up
source dev/files/env.sh
kubectl get nodes -o wide
skaffold dev
При изменении кода skaffold пересоберет образ, повторно развернет его и распечатает все журналы.
make -C dev down
Чтобы запустить модульные тесты, убедитесь, что вы установили следующие инструменты:
go test ./...
Прежде чем запускать тесты e2e, убедитесь, что вы выполнили действия, описанные в разделе «Настройка среды разработки».
source dev/files/env.sh
go test ./tests/e2e -tags e2e -v
Если вы хотите работать над поддержкой роботов, вам необходимо внести некоторые изменения в приведенную выше настройку.
Для этого необходимо, чтобы у вас был сервер Robot в той же учетной записи, которую вы используете для разработки. Сервер необходимо настроить с помощью Ansible Playbook dev/robot/install.yml
и настроить в dev/robot/install.yml
.
export ROBOT_ENABLED=true
export ROBOT_USER= < Your Robot User >
export ROBOT_PASSWORD= < Your Robot Password >
Продолжайте настройку среды, пока не дойдете до шага skaffold
. Вместо этого запустите skaffold dev --profile=robot
.
У нас есть еще один набор тестов для робота. Вы можете запустить их с помощью:
go test ./tests/e2e -tags e2e,robot -v
Лицензия Apache, версия 2.0