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
| # | Gejala | Punca | Penyelesaian |
|---|---|---|---|
| 14 | '-i ...' is not a kolla-ansible command | Bendera mesti selepas subcommand | kolla-ansible bootstrap-servers -i <inv> --configdir <path> (bukan -c) |
| 15 | No such file or directory: 'ansible-playbook' | Subproses Kolla tidak mewarisi PATH venv | PATH="$HOME/kolla-ansible/venv/bin:$PATH" pada setiap run |
| 16 | Role openstack.kolla.baremetal tidak ditemui | Collection belum dipasang | ansible-galaxy collection install -r venv/share/kolla-ansible/requirements.yml |
| 17 | bifrost, nova-conductor, cinder-api, neutron-server, kolla_toolbox, network… satu demi satu | Setiap servis meminta group inventori sendiri | Tambah semua group servis (179) sekali gus, setiap node dalam setiap group (all-in-one) |
| 18 | docker.io/kolla/cron 404 | Registry salah | docker_registry: "quay.io", docker_namespace: "openstack.kolla" |
| 19 | node_config / node_custom_config undefined; keyring tidak ditemui | 22.1.0 membaca vars daripada direktori <configdir>/globals.d/, bukan globals.yml terus | mkdir etc/globals.d && cp etc/globals.yml etc/globals.d/00-globals.yml |
| 20 | Keyring Ceph tidak ditemui | Kolla mencari dalam node_custom_config/{glance,cinder,cinder-volume,cinder-backup,nova}/ | Salin keyring ke etc/config/ dan /etc/kolla/config/ mengikut susunan itu |
| 21 | first_found gagal untuk ceph.client.nova.keyring | ceph_nova_user dan nova_backend tiada | ceph_nova_user: "nova" dan nova_backend: "rbd" dalam globals |
| 22 | Cari server_ca.key.pem / server_ca.cert.pem | Sijil Octavia belum dijana | kolla-ansible octavia-certificates sebelum deploy |
| 23 | kolla_toolbox container is missing; “MariaDB cluster is not synced” | Group [kolla_toolbox] (garis bawah) tiada, role dilangkau | Tambah [kolla_toolbox], bukan kolla-toolbox |
| 24 | MariaDB “cluster exists but stopped” selepas reset | Volume mariadb masih ada keadaan lama | docker volume rm mariadb pada semua node, bukan hanya /var/lib/mysql |
| 25 | Konfigurasi tidak ditemui walaupun path betul | Pengembangan ~ kadangkala tidak berfungsi dalam konteks Kolla | Guna 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
- Susunan Ceph dan Kolla: bootstrap Kolla dahulu, kemudian Ceph, atau gunakan systemd untuk daemon Ceph. Jangan
docker runmanual. - Kolla 22.1.0 menggunakan
globals.d/, bukanglobals.yml. Ini punca paling sukar dikesan. - Inventori mesti mempunyai semua group servis (179). Jangan kejar satu demi satu. Hasilkan sekali gus daripada lalai role.
- Registry ialah
quay.io/openstack.kolla.docker.io/kollatidak wujud untuk versi ini. - Ikut susunan keyring yang dicari oleh role (direktori
glance,cinder,nova), bukan hanya/etc/cephpada node. - GiB lawan GB:
resize2fsguna GiB danpartedguna 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.
Leave a Comment / Ask a Question
Have thoughts or questions on this article? Drop a message below and Faiez will receive an instant notification.