![Cloud Init с Flatcar Linux — конфигурация не применяется при передаче пользовательского файла?](https://rvso.com/image/756228/Cloud%20Init%20%D1%81%20Flatcar%20Linux%20%E2%80%94%20%D0%BA%D0%BE%D0%BD%D1%84%D0%B8%D0%B3%D1%83%D1%80%D0%B0%D1%86%D0%B8%D1%8F%20%D0%BD%D0%B5%20%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D0%BD%D1%8F%D0%B5%D1%82%D1%81%D1%8F%20%D0%BF%D1%80%D0%B8%20%D0%BF%D0%B5%D1%80%D0%B5%D0%B4%D0%B0%D1%87%D0%B5%20%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D1%81%D0%BA%D0%BE%D0%B3%D0%BE%20%D1%84%D0%B0%D0%B9%D0%BB%D0%B0%3F.png)
я используюТелматаПоставщик 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
, похоже, не работает.