Cloud Init con Flatcar Linux: ¿la configuración no se aplica al pasar un archivo personalizado?

Cloud Init con Flatcar Linux: ¿la configuración no se aplica al pasar un archivo personalizado?

Estoy usandoTelmate'sProveedor de Terraform paraProxmoxy tratando de desplegarVagón planomáquinas virtuales Linux usandoInicio de la nubepasando archivos a través decostumbre. Basado en suejemplo, He creado el siguiente archivo 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
}

Después de ejecutar terraform apply, la VM se crea correctamente y Flatcar se inicia. Sin embargo, si se conecta a la consola a través de Proxmox, la VM muestra que la dirección IP se recibió a través de DHCP en lugar de la que proporcioné. Además, la clave SSH no funciona, por lo que no puedo conectarme a la VM para solucionar el problema.

Si comento la cicustomlínea y simplemente confío en ipconfig0las otras opciones normales, aparece la VM y mi clave SSH de hecho funciona. Sin embargo, la dirección IP especificada todavía no se utiliza; la VM simplemente usa uno proporcionado por DHCP. A pesar de poder acceder a la VM, todavía quiero usar un archivo de configuración de Cloud Init personalizado para poder tener acceso a opciones de configuración más potentes.

Probé varias combinaciones de mi cloud-config.ymlarchivo. Incluyendo cosas tan simples como:

hostname: test

a cosas más detalladas como:

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

A pesar de todo esto, mis claves SSH nunca funcionan después de pasarles algo cicustomy, basándose en el hecho de que el nombre de host nunca se manipula, supongo que Cloud Init simplemente no recibe el archivo de configuración personalizado. He intentado pasar en ambosConfiguración de Linux de encendido y contenedorarchivos formateados.

¿Flatcar Linux no funciona con Proxmox/cicustom? Buscar en Google cosas como "flatcar" "proxmox", "coreos" "proxmox", "container linux" "proxmox", "flatcar" "cicustom"etc. no parece arrojar muchos resultados. Supongo que no hay mucha gente que une los sistemas operativos nativos de la nube con el bare metal. jejeje

Lo que surge, sin embargo, eseste guión interesante. Las líneas 104-132 analizan la creación de una plantilla Flatcar/CoreOS para Proxmox. Entonces, ¿alguien más ha hecho esto antes, al menos? ¿Quién sabe si luego pasaron un archivo de configuración de inicio de nube personalizado?

¿Algunas ideas?

EDITAR: ------------------------------------------------ ------------

Se agregaron registros de user-configdrivela unidad systemd cuando no se pasacicustom

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

EDITAR 2: ----------------------------------------------- -----------

Se agregó el contenido de los archivos a los que hace referencia la unidad Systemd anterior.

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

Como usted señaló, manage_etc_hostsProxmox lo establece en verdadero aquí.

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

Esta sección contiene toda la configuración de red correcta; sin embargo, DHCP la anula, por lo que se ignora.

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

EDITAR 3: ----------------------------------------------- -----------

Agregué mi intento de crear un archivo Cloud Init personalizado.

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

EDITAR 4: ----------------------------------------------- -----------

Seguíesta guíaBásicamente, lograr lo mismo directamente con qemu en lugar de usar Proxmox. Usando:

Este 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" }
    }]
  }
}

O esto cloud-config.yml:

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

ambos producen el mismo resultado. Una máquina virtual no conectable que gira con el nombre de host localhost.

  • Aquíson los registros que se produjeron utilizando cloud-config.ign.
  • Aquíson los registros que se produjeron utilizando cloud-config.yml.

EDITAR 5: ----------------------------------------------- -----------

Estos registros se producen user-configdrive.servicecuando se utiliza el proveedor de Telmate contra una plantilla 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.

EDITAR 6: ----------------------------------------------- -----------

Aquíes el diario completo de Systemd desde el primer resultado después de usar cloud-config.ignen EDIT 4 con el proveedor de Telmate.

EDITAR 7: ----------------------------------------------- -----------

Estos qmcomandos producen una VM Flatcar funcional usando 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]

datos de usuario.yml:

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

Sin embargo, pasar lo mismo user-data.ymldentro cicustomdel proxmox_vm_qemurecurso no parece funcionar.

información relacionada