#azure #kubernetes #terraform #volume #azure-aks
#azure #kubernetes #terraform #объем #azure-aks
Вопрос:
Я использую приведенный ниже файл Terraform для создания кластера AKS:
resource "random_pet" "prefix" {}
resource "kubernetes_persistent_volume" "example" {
metadata {
name = "example"
}
spec {
capacity = {
storage = "1Gi"
}
access_modes = ["ReadWriteOnce"]
persistent_volume_source {
azure_disk {
caching_mode = "None"
data_disk_uri = azurerm_managed_disk.example.id
disk_name = "example"
kind = "Managed"
}
}
}
}
resource "azurerm_kubernetes_cluster" "example" {
name = "${random_pet.prefix.id}-aks"
location = azurerm_resource_group.example.location
resource_group_name = azurerm_resource_group.example.name
dns_prefix = "${random_pet.prefix.id}-k8s"
default_node_pool {
name = "example"
node_count = 2
vm_size = "Standard_D2_v2"
os_disk_size_gb = 30
}
identity {
type = "SystemAssigned"
}
role_based_access_control {
enabled = true
}
addon_profile {
kube_dashboard {
enabled = true
}
}
tags = {
environment = "Demo"
}
}
provider "azurerm" {
version = ">=2.20.0"
features {}
}
resource "azurerm_resource_group" "example" {
name = "${random_pet.prefix.id}-rg"
location = "westus2"
}
resource "azurerm_managed_disk" "example" {
name = "example"
location = azurerm_resource_group.example.location
resource_group_name = azurerm_resource_group.example.name
storage_account_type = "Standard_LRS"
create_option = "Empty"
disk_size_gb = "1"
tags = {
environment = azurerm_resource_group.example.name
}
}
Я извлек приведенный выше файл из руководства Terraform по настройке кластера AKS: https://learn.hashicorp.com/tutorials/terraform/aks
И я использовал пример Terraform для настройки управляемого диска Azure и тома k8s здесь: https://registry.terraform.io/providers/hashicorp/kubernetes/latest/docs/resources/persistent_volume
Когда я пытаюсь запустить указанную выше конфигурацию с Terraform, я получаю следующую ошибку:
Error: Post "https://pumped-llama-k8s-419df981.hcp.westus2.azmk8s.io:443/api/v1/persistentvolumes": dial tcp: lookup pumped-llama-k8s-419df981.hcp.westus2.azmk8s.io on 192.168.1.1:53: no such host
on main.tf line 3, in resource "kubernetes_persistent_volume" "example":
3: resource "kubernetes_persistent_volume" "example" {
Я получаю эту же ошибку всякий раз, когда пытаюсь использовать любой azurerm
нетераформенный ресурс. Например. при попытке настроить роли и привязку ролей: resource "kubernetes_role"
Я предполагаю, что по URL-адресу сообщения об ошибке — попытка подключиться к облачной платформе HashiCorp, которая, как я полагаю, используется по умолчанию, — мне нужно явно сообщить этим azurerm
нересурсам, что я подключаюсь к размещенному в Azure Kubernetes; однако я не могу понять, как это сделать.
Комментарии:
1. Кажется, он не может подключиться к AKS с вашего локального компьютера, как насчет вывода команды
kubectl config view
илиkubectl get nodes
?2. Больше похоже на проблему с разрешением DNS-имен ..
nslookup
работает?3. Я не думаю, что это проблема с подключением к AKS, поскольку остальные ресурсы Terraform созданы; Я могу перейти к кластеру AKS в Azure, и все это там и работает. Похоже, что сбой происходит из-за любых ресурсов Terraform, специфичных для kubernetes, таких как «kubernetes_persistent_volume» или «kubernetes_role». Но похоже, что это сбой, потому что Terraform пытается подключиться к несуществующему облачному серверу HashiCorp, а не к моему экземпляру AKS.
Ответ №1:
Оказывается, мне нужно было определить kubernetes
поставщика в файле Terraform — удивлен, что я не получу какое-то предупреждение за то, что не включил его, учитывая, что я взаимодействую с его ресурсами.
Вот что я сделал, чтобы это исправить:
outputs.tf:
output "host" {
value = azurerm_kubernetes_cluster.default.kube_config.0.host
}
output "client_key" {
value = azurerm_kubernetes_cluster.default.kube_config.0.client_key
}
output "client_certificate" {
value = azurerm_kubernetes_cluster.default.kube_config.0.client_certificate
}
output "kube_config" {
value = azurerm_kubernetes_cluster.default.kube_config_raw
}
output "cluster_ca_certificate" {
value = azurerm_kubernetes_cluster.default.kube_config.0.cluster_ca_certificate
}
main.tf:
...
provider "kubernetes" {
version = "=1.13.2"
load_config_file = "false"
host = azurerm_kubernetes_cluster.default.kube_config.0.host
client_certificate = "${base64decode(azurerm_kubernetes_cluster.default.kube_config.0.client_certificate)}"
client_key = "${base64decode(azurerm_kubernetes_cluster.default.kube_config.0.client_key)}"
cluster_ca_certificate = "${base64decode(azurerm_kubernetes_cluster.default.kube_config.0.cluster_ca_certificate)}"
}
...