Flatcar Linux を使用した Cloud Init -- カスタム ファイルを渡すときに構成が適用されない?

Flatcar Linux を使用した Cloud Init -- カスタム ファイルを渡すときに構成が適用されない?

私は使用していますテルメイトTerraformプロバイダープロクスモックス展開しようとしている台車Linux仮想マシンの使用クラウド初期化ファイルを渡すことでcicustom. 彼らの、次の 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、VM が正常に作成され、Flatcar がブートストラップされます。ただし、Proxmox 経由でコンソールに接続すると、VM には IP アドレスが私が指定したものではなく、DHCP 経由で受信したものが表示されます。さらに、SSH キーが機能しないため、VM に接続してトラブルシューティングすることができません。

この行をコメント アウトしcicustomipconfig0他の通常のオプションに頼るだけで、VM が起動し、SSH キーが実際に機能します。ただし、指定された IP アドレスはまだ使用されず、VM は代わりに DHCP によって提供される IP アドレスを使用します。VM にアクセスできるにもかかわらず、より強力な構成オプションにアクセスできるように、カスタム 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 とコンテナ Linux 構成フォーマットされたファイル。

Flatcar Linux は Proxmox/cicustom では壊れますか? Google で"flatcar" "proxmox"、、、、"coreos" "proxmox"などを検索しても、あまり結果が出てきません。クラウド ネイティブ オペレーティング システム"container linux" "proxmox""flatcar" "cicustom"ベアメタルでブリッジしている人は多くないのではないでしょうか? ふふふ

しかし、浮かび上がってくるのはこの興味深いスクリプト104 行目から 132 行目では、Proxmox 用の Flatcar/CoreOS テンプレートの作成について説明しています。つまり、少なくとも以前に誰かがこれを実行したことがあるということですか? その後、カスタムのクラウド初期化構成ファイルを渡したかどうかは誰にもわかりません。

何か案は?

編集: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

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: --------------------------------------------------------

私はついていきますこのガイド基本的に、Proxmox を使用する代わりに、qemu で直接同じことを実現します。使用方法:

これ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これらのログは、Flatcar テンプレートに対して Telmate のプロバイダーを使用するときに生成されます。

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: --------------------------------------------------------

ここcloud-config.ignこれは、Telmate のプロバイダーで EDIT 4 を使用した後の最初の出力からの Systemd ジャーナル全体です。

編集7: --------------------------------------------------------

これらのqmコマンドは、 を使用して動作する Flatcar VM を生成します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]

ユーザーデータ.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に同じものを渡しても機能しないようです。cicustomproxmox_vm_qemu

関連情報