Selepas OpenStack 2026.1 hidup (Kolla-Ansible 22.1.0, tiga node, VIP bersama, Ceph RBD sebagai storan), saya merekodkan setiap isu dari persediaan Ceph hingga deploy. Tujuannya satu: deployment seterusnya tidak mengulang kesilapan yang sama.

Ini ialah log itu, dikemaskan. Setiap isu ada gejala, punca dan penyelesaian. Untuk cerita yang lebih mendalam tentang sebahagian daripadanya, lihat Building a 3-Node OpenStack Cloud with Kolla-Ansible dan Bare-Metal Ceph as the RBD Backend. Pada ketika ini Ceph masih dijalankan dengan cephadm dalam container, yang kemudian saya gantikan dengan pemasangan natif.

Keadaan akhir: OpenStack hidup, Ceph RBD dengan tiga OSD (sekitar 1.4 TiB) dan pool volumes, images, vms, backups. Glance, Cinder dan Nova semuanya menggunakan Ceph. Octavia aktif untuk Kubernetes. Ceph melaporkan HEALTH_WARN (tiga daemon “stray” daripada OSD manual, tidak berbahaya) dan kuorum mon 2 daripada 3.


Fasa 1: MAAS dan persediaan Ceph

1. GiB lawan GB merosakkan sistem fail

resize2fs menggunakan GiB (1024³), manakala parted resizepart menggunakan GB (10⁹). Perbezaan sekitar 2.3%: sistem fail 500 GiB lebih besar daripada partition 500 GB, lalu bad geometry: block count exceeds size of device.

Penyelesaian: kecilkan sistem fail ke 465G dahulu (resize2fs), baru parted resizepart 2 500G. Pengajaran: resize2fs guna GiB, parted guna GB.

2. root_size MAAS tidak berkesan

MAAS menjana konfigurasi curtin 500G tetapi partition kekal 930G. Penyelesaian: mod rescue dan kecilkan secara manual, kemudian buat partition sda3 (465G) untuk OSD.

3. Rekod IP yatim MAAS

Selepas release dan redeploy, IP statik lama kekal dan deploy gagal dengan IP address is already in use. Penyelesaian: padam rekod DNS, dan padam baris maasserver_staticipaddress terus dalam Postgres (docker exec ke container Postgres).

4. Node tidak boleh resolve internet

MAAS menetapkan DNS ke dirinya sendiri, yang tidak meneruskan pertanyaan internet: lookup quay.io: server misbehaving. Penyelesaian: tukar DNS dalam netplan semua node kepada router.

5. /etc/hosts terset semula selepas redeploy

Node tidak boleh resolve satu sama lain. Penyelesaian: tambah entri /etc/hosts (tiga node dan VIP Kolla) pada semua node dan buang alias 127.0.1.1.


Fasa 2: Ceph dengan cephadm

6. cephadm tidak menyokong partition sebagai OSD

ceph orch apply osd --all-available-devices tidak mengesan sda3; inventori menolak sda kerana “Has partitions”. Penyelesaian: OSD manual pada setiap node:

ceph-volume lvm create --data /dev/sda3 --no-systemd   # dalam container, dengan mount /run/udev:ro, /dev, /var/lib/ceph/osd
ceph-bluestore-tool prime-osd-dir ...                  # kemudian symlink block, keyring, mula container ceph-osd.X
ceph osd crush add ...

Langkah ini saya skripkan (setup_osd.sh). Butiran penuh dalam nota saya lebih panjang; ini ringkasannya.

7. ceph-volume lvm zap --destroy memadam partition

Ia menjalankan parted rm dan partition sda3 hilang. Penyelesaian: cipta semula (parted mkpart primary 500G 100%). Jangan gunakan --destroy jika mahu kekalkan partition.

8. Keyring bootstrap-osd tiada

OSD tidak boleh mendaftar. Penyelesaian:

ceph auth get-or-create client.bootstrap-osd mon 'allow profile bootstrap-osd' mgr 'allow rwx'

lalu eksport keyring.

9. Entri mon “hantu”

cephadm tersalah tafsir penempatan dan menggunakan mon.compute01 pada semua host. Akibatnya konflik, dan mon.compute03 keluar daripada kuorum. Penyelesaian:

ceph orch daemon rm mon.compute01 --host compute0X --force
ceph orch apply mon "compute01,compute02,compute03"      # perhatikan tanda petikan

Perangkap: jangan guna --host compute01. Itu membuang mon yang sebenar.

10. Reset kluster penuh

Kluster lama penuh dengan entri hantu dan pembersihan tidak bersih. Penyelesaian: rm-cluster dan bersihkan semua node (container, /var/lib/ceph, /etc/ceph, LVM OSD), kemudian bootstrap semula dengan fsid baharu.

11. bootstrap-servers Kolla memadam container Ceph

kolla-ansible bootstrap-servers memulakan semula Docker, dan container mon/mgr yang dijalankan dengan docker run manual hilang. Kluster turun (data OSD selamat). Penyelesaian: mulakan semula mon pada ketiga-tiga node dan mgr.

Pengajaran: bootstrap Kolla dahulu, baru Ceph. Atau pastikan daemon Ceph diurus systemd, bukan docker run.

12. store.db LOCK oleh proses yatim

Selepas docker rm -f, proses ceph-mon lama masih hidup dan memegang lock: Resource temporarily unavailable. Penyelesaian: lsof untuk cari PID, kill -9, mulakan semula container.

13. Modul cephadm crash: 0-keyring

Fail keyring didaftarkan sebagai daemon osd.0-keyring, lalu penghurai cephadm crash (invalid literal for int()). Penyelesaian:

ceph orch daemon rm osd.0-keyring --force
ceph mgr fail            # set semula keadaan modul

Fasa 3: Kolla-Ansible 22.1.0

#GejalaPuncaPenyelesaian
14'-i ...' is not a kolla-ansible commandBendera mesti selepas subcommandkolla-ansible bootstrap-servers -i <inv> --configdir <path> (bukan -c)
15No such file or directory: 'ansible-playbook'Subproses Kolla tidak mewarisi PATH venvPATH="$HOME/kolla-ansible/venv/bin:$PATH" pada setiap run
16Role openstack.kolla.baremetal tidak ditemuiCollection belum dipasangansible-galaxy collection install -r venv/share/kolla-ansible/requirements.yml
17bifrost, nova-conductor, cinder-api, neutron-server, kolla_toolbox, network… satu demi satuSetiap servis meminta group inventori sendiriTambah semua group servis (179) sekali gus, setiap node dalam setiap group (all-in-one)
18docker.io/kolla/cron 404Registry salahdocker_registry: "quay.io", docker_namespace: "openstack.kolla"
19node_config / node_custom_config undefined; keyring tidak ditemui22.1.0 membaca vars daripada direktori <configdir>/globals.d/, bukan globals.yml terusmkdir etc/globals.d && cp etc/globals.yml etc/globals.d/00-globals.yml
20Keyring Ceph tidak ditemuiKolla mencari dalam node_custom_config/{glance,cinder,cinder-volume,cinder-backup,nova}/Salin keyring ke etc/config/ dan /etc/kolla/config/ mengikut susunan itu
21first_found gagal untuk ceph.client.nova.keyringceph_nova_user dan nova_backend tiadaceph_nova_user: "nova" dan nova_backend: "rbd" dalam globals
22Cari server_ca.key.pem / server_ca.cert.pemSijil Octavia belum dijanakolla-ansible octavia-certificates sebelum deploy
23kolla_toolbox container is missing; “MariaDB cluster is not synced”Group [kolla_toolbox] (garis bawah) tiada, role dilangkauTambah [kolla_toolbox], bukan kolla-toolbox
24MariaDB “cluster exists but stopped” selepas resetVolume mariadb masih ada keadaan lamadocker volume rm mariadb pada semua node, bukan hanya /var/lib/mysql
25Konfigurasi tidak ditemui walaupun path betulPengembangan ~ kadangkala tidak berfungsi dalam konteks KollaGuna path penuh untuk -i dan --configdir

Satu perangkap dalam #17: [baremetal:children] merujuk kepada network. Tukar kepada loadbalancer, atau tambah group [network].


6 pengajaran utama

  1. Susunan Ceph dan Kolla: bootstrap Kolla dahulu, kemudian Ceph, atau gunakan systemd untuk daemon Ceph. Jangan docker run manual.
  2. Kolla 22.1.0 menggunakan globals.d/, bukan globals.yml. Ini punca paling sukar dikesan.
  3. Inventori mesti mempunyai semua group servis (179). Jangan kejar satu demi satu. Hasilkan sekali gus daripada lalai role.
  4. Registry ialah quay.io/openstack.kolla. docker.io/kolla tidak wujud untuk versi ini.
  5. Ikut susunan keyring yang dicari oleh role (direktori glance, cinder, nova), bukan hanya /etc/ceph pada node.
  6. GiB lawan GB: resize2fs guna GiB dan parted guna GB. Kecilkan kepada 465G untuk partition 500 GB.

Dan satu pengajaran di bawahnya: sebahagian besar isu ini ialah keadaan yang tinggal, bukan konfigurasi yang salah: rekod IP yatim, volume mariadb lama, proses ceph-mon yang masih hidup, entri daemon hantu. Apabila deploy kelihatan “melawan” anda selepas reset, periksa dahulu apa yang tinggal daripada percubaan sebelumnya.