Cloud Init с Flatcar Linux — конфигурация не применяется при передаче пользовательского файла?

Cloud Init с Flatcar Linux — конфигурация не применяется при передаче пользовательского файла?

я используюТелматаПоставщик Terraform дляПроксмокси пытаюсь развернутьПлатформавиртуальные машины Linux, использующиеОблачная инициализацияпередавая файлы черезцикустом. На основе ихпримерЯ создал следующий файл Terraform:

variable "pve_user" {
}
variable "pve_password" {
}
variable "pve_host" {
}

provider "proxmox" {
  pm_tls_insecure = true
  pm_api_url      = "https://SNIP/api2/json"
  pm_user         = "SNIP"
  pm_password     = "SNIP"
  pm_parallel     = 4
}

resource "null_resource" "cloud_init_config_files" {
  connection {
    type     = "ssh"
    user     = var.pve_user
    password = var.pve_password
    host     = var.pve_host
  }

  provisioner "file" {
    source      = "./templates/cloud-config.yml"
    destination = "/var/lib/vz/snippets/cloud-config.yml"
  }
}

resource "proxmox_vm_qemu" "k8s-masters" {
  depends_on = [
    null_resource.cloud_init_config_files
  ]

  count      = 1
  name       = "VM-${count.index}"
  clone      = "VM-Template"
  full_clone = true

  target_node = "192.168.20.10"
  pool        = "VM"

  cores   = 2
  sockets = 1
  memory  = 10240

  network {
    id     = 0
    model  = "virtio"
    bridge = "vmbr0"
    tag    = 50
  }

  disk {
    id           = 0
    type         = "scsi"
    size         = 30
    storage      = "Pool"
    storage_type = "zfspool"
    backup       = true
    iothread     = true
  }

  onboot = true
  agent  = 1

  os_type         = "cloud-init"
  ssh_user        = "core"
  cicustom  = "user=local:snippets/cloud-config.yml"
  ipconfig0 = "ip=192.168.50.10/24,gw=192.168.50.1"

  sshkeys = "ssh-rsa SNIP"
  ssh_private_key = <<EOF
-----BEGIN RSA PRIVATE KEY-----
SNIP
-----END RSA PRIVATE KEY-----
EOF
}

После запуска terraform applyвиртуальная машина успешно создана, а Flatcar загружен. Однако, если вы подключаетесь к консоли через Proxmox, виртуальная машина показывает, что IP-адрес получен через DHCP, а не тот, который я предоставил. Кроме того, ключ SSH не работает, поэтому я не могу подключиться к виртуальной машине для устранения неполадок.

Если я закомментирую строку cicustomи просто положусь на ipconfig0и другие обычные параметры, то виртуальная машина запустится, и мой ключ SSH действительно сработает. Однако указанный IP-адрес все еще не используется; виртуальная машина просто использует адрес, предоставленный DHCP. Несмотря на то, что я могу получить доступ к виртуальной машине, я все равно хочу использовать пользовательский файл конфигурации Cloud Init, чтобы иметь доступ к более мощным параметрам конфигурации.

Я пробовал разные комбинации моего cloud-config.ymlфайла. Включая такие простые вещи, как:

hostname: test

к более подробным вещам, таким как:

storage:
  files:
    - path: /opt/file1
      filesystem: root
      contents:
        inline: Hello, world!
      mode: 0644
      user:
        id: 500
      group:
        id: 501
passwd:
  users:
    - name: core
      ssh_authorized_keys:
        - ssh-rsa SNIP

Несмотря на все это, мои ключи SSH никогда не работают после того, как я что-то передаю, cicustomи, основываясь на том факте, что имя хоста никогда не изменяется, я предполагаю, что Cloud Init просто напрямую не получает пользовательский файл конфигурации вообще. Я пробовал передавать обаКонфигурация Ignition и Container Linuxотформатированные файлы.

Flatcar Linux сломан с Proxmox/cicustom? Поиск в Google по таким вещам, как "flatcar" "proxmox", "coreos" "proxmox", "container linux" "proxmox", "flatcar" "cicustom"и т. д., похоже, не дает особых результатов. Думаю, не так много людей объединяют операционные системы Cloud Native с bare metal? хехехе

Однако, что действительно происходит, так этоэтот интересный сценарий. В строках 104-132 обсуждается создание шаблона Flatcar/CoreOS для Proxmox. Так что кто-то уже делал это раньше, по крайней мере? Кто знает, передавали ли они впоследствии пользовательский файл конфигурации cloud init?

Есть идеи?

РЕДАКТИРОВАТЬ: ------------------------------------------------------------

Добавлены логи из user-configdriveмодуля systemd при отсутствии прохожденияcicustom

Aug 20 16:22:17 localhost coreos-cloudinit[831]: 2020/08/20 16:22:17 Checking availability of "cloud-drive"
Aug 20 16:22:17 localhost coreos-cloudinit[831]: 2020/08/20 16:22:17 Fetching user-data from datasource of type "cloud-drive"
Aug 20 16:22:17 localhost coreos-cloudinit[831]: 2020/08/20 16:22:17 Attempting to read from "/media/configdrive/openstack/latest/user_data"
Aug 20 16:22:17 localhost coreos-cloudinit[831]: 2020/08/20 16:22:17 line 6: warning: unrecognized key "chpasswd"
Aug 20 16:22:17 localhost coreos-cloudinit[831]: 2020/08/20 16:22:17 line 9: warning: incorrect type for "users[0]" (want struct)
Aug 20 16:22:17 localhost coreos-cloudinit[831]: 2020/08/20 16:22:17 line 10: warning: unrecognized key "package_upgrade"
Aug 20 16:22:17 localhost coreos-cloudinit[831]: 2020/08/20 16:22:17 Fetching meta-data from datasource of type "cloud-drive"
Aug 20 16:22:17 localhost coreos-cloudinit[831]: 2020/08/20 16:22:17 Attempting to read from "/media/configdrive/openstack/latest/meta_data.json"
Aug 20 16:22:17 localhost coreos-cloudinit[831]: 2020/08/20 16:22:17 Attempting to read from "/media/configdrive/openstack/content/0000"
Aug 20 16:22:17 localhost coreos-cloudinit[831]: 2020/08/20 16:22:17 Parsing user-data as cloud-config
Aug 20 16:22:17 localhost coreos-cloudinit[831]: 2020/08/20 16:22:17 Merging cloud-config from meta-data and user-data
Aug 20 16:22:17 VM-0 coreos-cloudinit[831]: 2020/08/20 16:22:17 Set hostname to VM-0
Aug 20 16:22:17 VM-0 coreos-cloudinit[831]: 2020/08/20 16:22:17 Authorized SSH keys for core user
Aug 20 16:22:17 VM-0 coreos-cloudinit[831]: 2020/08/20 16:22:17 Failed to apply cloud-config: Invalid option to manage_etc_hosts
Aug 20 16:22:17 VM-0 systemd[1]: user-configdrive.service: Main process exited, code=exited, status=1/FAILURE

ПРАВКА 2: ----------------------------------------------------------

Добавлено содержимое файлов, на которые ссылается указанный выше модуль Systemd.

core@VM-0 ~ $ cat /media/configdrive/openstack/latest/user_data
#cloud-config
hostname: VM-0
manage_etc_hosts: true
ssh_authorized_keys:
  - REDACTED
chpasswd:
  expire: False
users:
  - default
package_upgrade: true

Как вы отметили, manage_etc_hostsздесь Proxmox устанавливает значение true.

core@VM-0 ~ $ cat /media/configdrive/openstack/content/0000
auto lo
iface lo inet loopback

        dns_nameservers 192.168.1.100
        dns_search example.com
auto eth0
iface eth0 inet static
        address 192.168.50.10
        netmask 255.255.255.0
        gateway 192.168.50.1

В этом разделе содержатся все правильные сетевые настройки, однако они переопределяются DHCP и поэтому игнорируются.

core@VM-0 ~ $ cat /media/configdrive/openstack/latest/meta_data.json
{
     "uuid": "e61563c9057e9162c4e14d111fea171379170532",
     "network_config": { "content_path": "/content/0000" }
}

ПРАВКА 3: ----------------------------------------------------------

Добавил свою попытку создания собственного файла Cloud Init

manage_etc_hosts: false
hostname: "test"
ssh_authorized_keys:
  - REDACTED

ПРАВКА 4: ----------------------------------------------------------

Я последовал заэто руководствопо сути, чтобы сделать то же самое напрямую с qemu вместо использования Proxmox. Используя:

Этот cloud-config.ign:

{
  "ignition": { "version": "2.2.0" },
  "passwd": {
    "users": [
      {
        "name": "core",
        "sshAuthorizedKeys": [
          "REDACTED"
        ]
      }
    ]
  },
  "storage": {
    "files": [{
      "filesystem": "root",
      "path": "/etc/hostname",
      "mode": 420,
      "contents": { "source": "data:,test" }
    }]
  }
}

Или это cloud-config.yml:

hostname: test
passwd:
  users:
    - name: tj
      ssh_authorized_keys:
        - REDACTED

Оба дают одинаковый результат. Неподключаемая виртуальная машина, которая запускается с именем хоста localhost.

  • Здесь— это журналы, созданные с использованием cloud-config.ign.
  • Здесь— это журналы, созданные с использованием cloud-config.yml.

ПРАВКА 5: ----------------------------------------------------------

Эти журналы создаются user-configdrive.serviceпри использовании провайдера Telmate с шаблоном Flatcar.

Aug 21 21:41:50 localhost coreos-cloudinit[795]: 2020/08/21 21:41:50 Checking availability of "cloud-drive"
Aug 21 21:41:50 localhost coreos-cloudinit[795]: 2020/08/21 21:41:50 Fetching user-data from datasource of type "cloud-drive"
Aug 21 21:41:50 localhost coreos-cloudinit[795]: 2020/08/21 21:41:50 Attempting to read from "/media/configdrive/openstack/latest/user_data"
Aug 21 21:41:50 localhost coreos-cloudinit[795]: 2020/08/21 21:41:50 Fetching meta-data from datasource of type "cloud-drive"
Aug 21 21:41:50 localhost coreos-cloudinit[795]: 2020/08/21 21:41:50 Attempting to read from "/media/configdrive/openstack/latest/meta_data.json"
Aug 21 21:41:50 localhost coreos-cloudinit[795]: 2020/08/21 21:41:50 Attempting to read from "/media/configdrive/openstack/content/0000"
Aug 21 21:41:50 localhost coreos-cloudinit[795]: Detected an Ignition config. Exiting...
Aug 21 21:41:50 localhost systemd[1]: Started Load cloud-config from /media/configdrive.

ПРАВКА 6: ----------------------------------------------------------

Здесь- это весь журнал Systemd из первого вывода после использования cloud-config.ignв EDIT 4 с провайдером Telmate.

ПРАВКА 7: ----------------------------------------------------------

Эти qmкоманды создают рабочую виртуальную машину Flatcar с использованием cicustom.

qm create 101 --name test --cores 2 --memory 2048 --net0 "virtio,bridge=vmbr0"

qm set 101 --net0 "virtio,bridge=vmbr0,tag=50"

qm importdisk 101 /mnt/RAIDPool_Templates/template/iso/flatcar_production_qemu_image.img FlashPool

qm set 101 --scsihw virtio-scsi-pci --scsi0 FlashPool:vm-101-disk-0 --ide2 FlashPool:cloudinit --boot c --bootdisk scsi0 --serial0 /dev/tty0 --ipconfig0 ip=dhcp --citype configdrive2

qm set 101 --cicustom user=RAIDPool_Templates:snippets/user-data.yml

qm start 101
ssh -i ~/.ssh/sol.milkyway.kubernetes [email protected]

user-data.yml:

#cloud-config
hostname: test
manage_etc_hosts: true
ssh_authorized_keys:
  - ssh-rsa REDACTED
chpasswd:
  expire: False
users:
  - default
package_upgrade: true

Однако передача того же самого user-data.ymlв cicustomресурс proxmox_vm_qemu, похоже, не работает.

Связанный контент