Загрузка узлов агента AKS через terraform

#azure #terraform #azure-aks #terraform-provider-azure

#azure #terraform #azure-aks #terraform-provider-azure

Вопрос:

В настоящее время я использую terraform для создания кластера k8s, который работает отлично. Как только узлы будут подготовлены, я хочу запустить несколько команд bash на любом из узлов. Пока что null_resource это вариант, поскольку это кластер, и мы не знаем имен узлов / IP-адресов. Однако я не могу определить, каким должно быть значение connection block, поскольку azurerm_kubernetes_cluster не экспортирует IP-адрес балансировщика нагрузки или имена виртуальных машин. Знак вопроса должен иметь правильное значение в приведенном ниже:

 resource "null_resource" "cluster" {
  triggers = { "${join(",", azurerm_kubernetes_cluster.k8s.id)}" }
  connection = { type = ssh 
                 user = <user>
                 password = <password>
                 host = <?>
                 host_key = <pub_key>
            }
}  
  

Любая помощь!

Комментарии:

1. Просто хотите запускать команды bash в узлах? Любой способ подходит?

2. @CharlesXu Да, я был бы открыт для опробования предложений

Ответ №1:

AKS не предоставляет доступ к узлам ит в Интернете. И вы просто можете подключить узлы через master кластера. Если вы хотите выполнить несколько команд bash на узлах, вы можете использовать SSH-соединение, которое создает модуль, в качестве вспомогательного средства для подключения к узлам, см. Инструкции о доступе к узлам по SSH.

Кроме того, вы можете добавить правила NAT для узлов в балансировщике нагрузки, затем вы также можете подключаться к узлам по SSH через общедоступный IP-адрес балансировщика нагрузки. Но это небезопасный способ. Поэтому я не предлагаю этот способ.

Комментарии:

1. Но terraform не выдает общедоступный IP-адрес балансировщика нагрузки. Я пытаюсь решить эту проблему

2. @AnshulVerma Вы можете создать общедоступный IP-адрес с помощью статического метода при создании кластера AKs. Затем вы можете вывести общедоступный IP-адрес.

Ответ №2:

Я бы рекомендовал просто запустить набор демонов, который выполняет команды bash на узлах. Поскольку любые операции масштабирования или обновления будут удалять или не будут иметь обновленной конфигурации, которую вы выполняете на узлах.

Комментарии:

1. Как упоминалось в вопросе, мне не нужно, чтобы он запускался на каждом узле — достаточно только на одном из узлов за один раз

Ответ №3:

Для этого не было простого решения. Статический IP-адрес был неправильным способом сделать это, и, следовательно, я закончил тем, что написал оболочку вокруг terraform. Я не хотел запускать свои сценарии инициализации на каждом появляющемся узле, а только на одном из узлов. Итак, по сути, теперь эта оболочка взаимодействует с terraform для первого развертывания только одного узла, который выполняет инициализацию в облаке. После этого он вызывает функцию для масштабирования terraform и выводит остальное желаемое количество экземпляров. В сценарии инициализации в облаке у меня есть проверка kubectl get no , где, если я получаю размер более чем одного узла, я просто пропускаю команды инициализации в облаке.