Стадия жизненного цикла модуля: General Availability
Настройка INTERNAL LoadBalancer
Для настройки INTERNAL LoadBalancer’а установите аннотацию для сервиса:
yandex.cpi.flant.com/listener-subnet-id: SubnetID
Аннотация указывает, какой subnet будет слушать LoadBalancer.
Резервирование публичного IP-адреса
Для использования в externalIPAddresses и natInstanceExternalAddress (также может быть использован для bastion-хоста) выполните следующую команду:
$ yc vpc address create --external-ipv4 zone=ru-central1-a
id: e9b4cfmmnc1mhgij75n7
folder_id: b1gog0h9k05lhqe5d88l
created_at: "2020-09-01T09:29:33Z"
external_ipv4_address:
address: 178.154.226.159
zone_id: ru-central1-a
requirements: {}
reserved: true
Проблемы dhcpOptions и пути их решения
Использование в настройках DHCP-серверов адресов DNS, отличающихся от предоставляемых Yandex Cloud, является временным решением. От него можно будет отказаться, когда Yandex Cloud введет услугу Managed DNS. Чтобы обойти ограничения, описанные ниже, рекомендуется использовать stubZones из модуля kube-dns
Изменение параметров
Обратите внимание на следующие особенности:
- При изменении данных параметров требуется выполнить
netplan applyили аналог, форсирующий обновление DHCP lease. - Потребуется перезапуск всех подов hostNetwork (особенно
kube-dns), чтобы перечитать новыйresolv.conf.
Особенности использования
При использовании опции dhcpOptions все DNS-запросы начнут идти через указанные DNS-серверы. Эти DNS-серверы должны разрешать внешние DNS-имена, а также при необходимости разрешать DNS-имена внутренних ресурсов.
Не используйте эту опцию, если указанные рекурсивные DNS-серверы не могут разрешать тот же список зон, что сможет разрешать рекурсивный DNS-сервер в подсети Yandex Cloud.
Назначение произвольного StorageClass используемого по умолчанию
Чтобы назначить произвольный StorageClass используемым по умолчанию для ваших PVC, укажите его имя в параметре defaultClusterStorageClass модуля global.
Обратите внимание, что после этого аннотация storageclass.kubernetes.io/is-default-class='true' снимется со StorageClass’а, который ранее был указан как используемый по умолчанию.
d8 k edit mc global
Изменение размера PVC
Размер существующего PVC можно увеличить путем изменения значения параметра spec.resources.requests.storage без остановки и пересоздания использующего его пода.
После изменения значения spec.resources.requests.storage CSI-драйвер последовательно:
- увеличивает размер диска в Yandex Cloud;
- обновляет размер связанного PersistentVolume;
- выполняет расширение файловой системы на узле, к которому подключён том.
Во время операции под продолжает работать, а смонтированный том остаётся доступным приложению. После завершения увеличения новый размер файловой системы становится доступен внутри контейнера без перезапуска пода.
Уменьшение размера PVC не поддерживается.
Чтобы увеличить PVC, выполните следующие действия:
-
Получите имя StorageClass, используемого PVC:
d8 k -n <НЕЙМСПЕЙС> get pvc <ИМЯ_PVC> \ -o jsonpath='{.spec.storageClassName}{"\n"}'Где:
<НЕЙМСПЕЙС>— неймспейс, в котором находится PVC;<ИМЯ_PVC>— имя PVC, размер которого необходимо увеличить.
Например:
d8 k -n production get pvc application-data \ -o jsonpath='{.spec.storageClassName}{"\n"}'Пример вывода команды:
network-ssdВ этом примере PVC
application-dataиспользует StorageClassnetwork-ssd. -
Убедитесь, что StorageClass разрешает увеличение томов:
d8 k get storageclass <ИМЯ_STORAGECLASS> \ -o jsonpath='{.allowVolumeExpansion}{"\n"}'Где
<ИМЯ_STORAGECLASS>— имя StorageClass, полученное на предыдущем шаге.Например:
d8 k get storageclass network-ssd \ -o jsonpath='{.allowVolumeExpansion}{"\n"}'Пример вывода команды:
true -
Проверьте текущее состояние и размер PVC:
d8 k -n <НЕЙМСПЕЙС> get pvc <ИМЯ_PVC>Например:
d8 k -n production get pvc application-dataПример вывода:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS application-data Bound pvc-65e92674-077c-4b4f-b65d-19e92f04e103 20Gi RWO network-ssdУбедитесь, что:
- PVC находится в состоянии
Bound; - в поле
CAPACITYуказан текущий размер PVC; - в поле
STORAGECLASSуказан StorageClass, проверенный на предыдущем шаге.
- PVC находится в состоянии
-
Увеличьте размер PVC:
d8 k -n <НЕЙМСПЕЙС> edit pvc <ИМЯ_PVC>Например:
d8 k -n production edit pvc application-dataВ поле
spec.resources.requests.storageукажите новый размер PVC:spec: resources: requests: storage: 30GiВ этом примере размер PVC увеличивается до 30Gi.
Сохраните изменения и закройте редактор.
Для StorageClass
network-ssd-nonreplicatedиnetwork-ssd-io-m3размер должен быть кратен 93Gi. -
Дождитесь увеличения PVC:
d8 k -n <НЕЙМСПЕЙС> get pvc <ИМЯ_PVC> --watchГде:
<НЕЙМСПЕЙС>— неймспейс, в котором находится PVC;<ИМЯ_PVC>— имя PVC, размер которого увеличивается.
Например:
d8 k -n production get pvc application-data --watchВо время увеличения в поле
CAPACITYможет отображаться прежний размер:NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS application-data Bound pvc-65e92674-077c-4b4f-b65d-19e92f04e103 20Gi RWO network-ssdОперация завершена, когда в поле
CAPACITYотображается новый размер PVC:NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS application-data Bound pvc-65e92674-077c-4b4f-b65d-19e92f04e103 30Gi RWO network-ssd -
Проверьте события PVC:
d8 k -n <НЕЙМСПЕЙС> describe pvc <ИМЯ_PVC>Например:
d8 k -n production describe pvc application-dataВо время увеличения могут появиться следующие события:
ExternalExpanding Resizing FileSystemResizeRequiredОб успешном увеличении файловой системы свидетельствует событие:
FileSystemResizeSuccessfulНапример:
Normal FileSystemResizeSuccessful kubelet MountVolume.NodeExpandVolume succeeded for volume "pvc-65e92674-077c-4b4f-b65d-19e92f04e103" -
Проверьте размер файловой системы внутри пода:
d8 k -n <НЕЙМСПЕЙС> exec <ИМЯ_ПОДА> -- \ df -hT <ТОЧКА_МОНТИРОВАНИЯ>Где:
<НЕЙМСПЕЙС>— неймспейс, в котором находится под;<ИМЯ_ПОДА>— имя пода, использующего PVC;<ТОЧКА_МОНТИРОВАНИЯ>— путь внутри контейнера, в который смонтирован PVC.
Например:
d8 k -n production exec application-0 -- \ df -hT /dataПример вывода:
Filesystem Type Size Used Avail Use% Mounted on /dev/vde ext4 29.4G 22M 29.4G 1% /dataФактический размер файловой системы может быть немного меньше размера PVC из-за служебных данных файловой системы.
Добавление CloudStatic-узлов в кластер
В метаданные виртуальных машин, которые вы хотите включить в кластер в качестве узлов, добавьте (Изменить ВМ -> Метадата) ключ node-network-cidr со значением nodeNetworkCIDR для кластера.
nodeNetworkCIDR кластера можно узнать, воспользовавшись следующей командой:
d8 k -n kube-system get secret d8-provider-cluster-configuration -o json | jq --raw-output '.data."cloud-provider-cluster-configuration.yaml"' | base64 -d | grep '^nodeNetworkCIDR'
Создание кластера в новом VPC и развертывание bastion-хост для доступа к узлам
-
Выполните bootstrap базовой инфраструктуры кластера:
dhctl bootstrap-phase base-infra --config config.yml -
Создайте bastion-хост:
yc compute instance create \ --name bastion \ --hostname bastion \ --create-boot-disk image-family=ubuntu-2404-lts,image-folder-id=standard-images,size=20,type=network-hdd \ --memory 2 \ --cores 2 \ --core-fraction 100 \ --ssh-key ~/.ssh/<SSH_PUBLIC_KEY_FILE> \ --zone ru-central1-a \ --public-address 178.154.226.159Замените здесь
<SSH_PUBLIC_KEY_FILE>на имя вашего публичного ключа. Например, для ключа с RSA-шифрованием это будетid_rsa.pub, а для ключа с ED25519-шифрованиемid_ed25519.pub. -
Продолжите установку кластера, указав данные bastion-хоста. На вопрос про кеш Terraform ответьте
y:dhctl bootstrap --ssh-bastion-host=178.154.226.159 --ssh-bastion-user=yc-user \ --ssh-user=ubuntu --ssh-agent-private-keys=/tmp/.ssh/<SSH_PRIVATE_KEY_FILE> --config=/config.ymlЗамените здесь
<SSH_PRIVATE_KEY_FILE>на имя вашего приватного ключа. Например, для ключа с RSA-шифрованием это может бытьid_rsa, а для ключа с ED25519-шифрованием —id_ed25519.
Длительное переключение на заказ узлов в менее приоритетных группах
Если переключение на заказ узлов в менее приоритетных группах занимает много времени (например, когда для групп узлов с preemptible-инстансами установлен наивысший приоритет и при недоступности таких инстансов заказ узлов из других групп происходит очень долго), воспользуйтесь инструкцией.