{"id":6818,"date":"2022-03-07T00:55:21","date_gmt":"2022-03-07T08:55:21","guid":{"rendered":"https:\/\/www.xh86.me\/?p=6818"},"modified":"2022-03-07T00:55:21","modified_gmt":"2022-03-07T08:55:21","slug":"kolla-ansible-%e9%83%a8%e7%bd%b2%e5%9f%ba%e4%ba%8e-wallaby-%e7%89%88%e6%9c%ac%e7%9a%84-openstack","status":"publish","type":"post","link":"https:\/\/www.xh86.me\/?p=6818","title":{"rendered":"kolla-ansible \u90e8\u7f72\u57fa\u4e8e Wallaby \u7248\u672c\u7684 OpenStack"},"content":{"rendered":"<pre># kolla-ansible \u90e8\u7f72\u57fa\u4e8e Wallaby \u7248\u672c\u7684 OpenStack\r\n\r\n## \u6db5\u76d6\u7ec4\u4ef6\r\n\r\n| \u7ec4\u4ef6\u540d        | \u63cf\u8ff0             |\r\n| ---------- | -------------- |\r\n| horizon    | \u793e\u533a dashboard   |\r\n| keystone   | \u8ba4\u8bc1\u9274\u6743\u7b49\u7ba1\u7406        |\r\n| glance     | \u955c\u50cf\u7b49\u7ba1\u7406          |\r\n| cinder     | \u5757\u5b58\u50a8\u7b49\u7ba1\u7406         |\r\n| nova       | \u865a\u62df\u673a\u7b49\u7ba1\u7406         |\r\n| neutron    | \u7f51\u7edc\uff0cqos\uff0cvpn \u7b49\u7ba1\u7406 |\r\n| octavia    | LB \u7b49\u7ba1\u7406         |\r\n| ironic     | \u88f8\u673a\u7b49\u7ba1\u7406          |\r\n| prometheus | \u76d1\u63a7\u7b49\u7ba1\u7406          |\r\n| skyline    | \u793e\u533a\u65b0 dashboard  |\r\n\r\n## \u51c6\u5907\u5de5\u4f5c\r\n\r\n_\u5982\u679c\u662f\u5728\u4e91\u5e73\u53f0\u4e0a\u90e8\u7f72\uff0c\u90a3\u4e48\u9996\u5148\u53ef\u4ee5\u521b\u5efa\u4e24\u4e2a\u79df\u6237\u7f51\u7edc\uff08\u5373\u4e1a\u52a1\u7f51\uff09\u4ee5\u53ca\u4e00\u4e2a\u8def\u7531\u5668\u5e76\u4e14\u5f00\u542f\u516c\u7f51\u7f51\u5173\u3002\u5e76\u4e14\u5c06\u4e24\u4e2a\u79df\u6237\u7f51\u7edc\u7ed1\u5b9a\u81f3\u8def\u7531\u5668\u4e0a\u3002_\r\n\r\n\u7f51\u7edc01\uff1anet01 \u5b50\u7f5101\uff1asubnet01 192.168.100.0\/24\r\n\r\n\u7f51\u7edc02\uff1anet02 \u5b50\u7f5102\uff1asubnet02 192.168.200.0\/24\r\n\r\n\u8def\u7531\u566801\uff1aR01 \u5c06 subnet01 \u4ee5\u53ca subnet02 \u7ed1\u5b9a\u81f3 R01 \u4e0a\u3002\r\n\r\n**\u4ee5\u4e0b\u5185\u5bb9\u5747\u5728\u5f53\u524d\u7f51\u7edc\u89c4\u5212\u4e0b\u8fdb\u884c\uff0c\u5728\u5b9e\u9645\u53c2\u8003\u8fc7\u7a0b\u4e2d\uff0c\u8bf7\u6309\u5b9e\u9645\u7684\u7f51\u7edc\u505a\u76f8\u5e94\u7684\u4fee\u6539\u3002**\r\n\r\n## \u5f00\u59cb\u90e8\u7f72\r\n\r\n### \u5b58\u50a8\u96c6\u7fa4 - \u5916\u7f6e ceph \u96c6\u7fa4\r\n\r\n#### \u73af\u5883\u51c6\u5907\r\n\r\n\u4e00\u53f0\u670d\u52a1\u5668\uff1a\r\n\r\n- OS\uff1a`ubuntu 18.04 LTS`\r\n- \u4e00\u5757\u7f51\u5361\uff1anet01 192.168.100.179\r\n- \u6d6e\u52a8 IP\uff1a\u7ed1\u5b9a\u81f3 net01 \u4e0a\uff0c172.16.150.59\r\n- \u4e8c\u5757\u6570\u636e\u76d8\uff1a\u4f5c\u4e3a OSD \u76d8\r\n\r\n#### \u90e8\u7f72 ceph\r\n\r\n\u90e8\u7f72\u7684\u662f ceph nautilus \u7248\u672c\u3002\r\n\r\n\u5177\u4f53\u6b65\u9aa4\u7565\uff0c\u53ef\u4ee5[\u53c2\u8003\u5b98\u65b9\u90e8\u7f72 ceph-deploy](https:\/\/docs.ceph.com\/en\/nautilus\/start\/)\r\n\r\n#### \u9a8c\u8bc1 ceph \u96c6\u7fa4\r\n\r\n```console\r\nroot@ceph-nautilus-allinone:~# ceph -s\r\n  cluster:\r\n    id:     61597978-90c8-4d19-b6b8-c6f8d29096a7\r\n    health: HEALTH_WARN\r\n            4 pool(s) have no replicas configured\r\n            application not enabled on 3 pool(s)\r\n            mon is allowing insecure global_id reclaim\r\n\r\n  services:\r\n    mon: 1 daemons, quorum ceph-nautilus-allinone (age 15h)\r\n    mgr: ceph-nautilus-allinone(active, since 15h)\r\n    osd: 2 osds: 2 up (since 15h), 2 in (since 15h)\r\n\r\n  data:\r\n    pools:   4 pools, 256 pgs\r\n    objects: 691 objects, 2.1 GiB\r\n    usage:   3.8 GiB used, 196 GiB \/ 200 GiB avail\r\n    pgs:     256 active+clean\r\n\r\n  io:\r\n    client:   2.0 KiB\/s wr, 0 op\/s rd, 0 op\/s wr\r\n```\r\n\r\n#### \u521b\u5efa\u6c60\u548c auth\r\n\r\n```console\r\nroot@ceph-nautilus-allinone:~# ceph osd pool create volumes 64 64\r\nroot@ceph-nautilus-allinone:~# ceph osd pool create backups 64 64\r\nroot@ceph-nautilus-allinone:~# ceph osd pool create vms 64 64\r\nroot@ceph-nautilus-allinone:~# ceph osd pool create images 64 64\r\nroot@ceph-nautilus-allinone:~# ceph auth get-or-create client.cinder mon 'profile rbd' osd 'profile rbd pool=volumes, profile rbd pool=vms, profile rbd pool=images'\r\nroot@ceph-nautilus-allinone:~# ceph auth get-or-create client.cinder-backup mon 'profile rbd' osd 'profile rbd pool=backups'\r\nroot@ceph-nautilus-allinone:~# ceph auth get-or-create client.glance mon 'profile rbd' osd 'profile rbd pool=images'\r\nroot@ceph-nautilus-allinone:~# ceph auth get-or-create client.nova mon 'profile rbd' osd 'profile rbd pool=volumes, profile rbd pool=vms, profile rbd pool=images'\r\nroot@ceph-nautilus-allinone:~# ceph osd pool ls detail\r\npool 1 'volumes' replicated size 1 min_size 1 crush_rule 0 object_hash rjenkins pg_num 64 pgp_num 64 autoscale_mode warn last_change 27 flags hashpspool,selfmanaged_snaps stripe_width 0\r\n        removed_snaps [1~3]\r\npool 2 'vms' replicated size 1 min_size 1 crush_rule 0 object_hash rjenkins pg_num 64 pgp_num 64 autoscale_mode warn last_change 31 flags hashpspool,selfmanaged_snaps stripe_width 0\r\n        removed_snaps [1~3]\r\npool 3 'backups' replicated size 1 min_size 1 crush_rule 0 object_hash rjenkins pg_num 64 pgp_num 64 autoscale_mode warn last_change 18 flags hashpspool stripe_width 0\r\npool 4 'images' replicated size 1 min_size 1 crush_rule 0 object_hash rjenkins pg_num 64 pgp_num 64 autoscale_mode warn last_change 34 flags hashpspool,selfmanaged_snaps stripe_width 0\r\n        removed_snaps [1~3]\r\nroot@ceph-nautilus-allinone:~# ceph auth list\r\n......\r\nclient.cinder\r\n        key: AQB49YthKZ\/lABAAHBdWtjivBI\/T4VyfEM2TxQ==\r\n        caps: [mon] profile rbd\r\n        caps: [osd] profile rbd pool=volumes, profile rbd pool=vms, profile rbd pool=images\r\nclient.cinder-backup\r\n        key: AQBs9YthJ6HsARAAUB7VIOxm\/gcpzz2JF9biJw==\r\n        caps: [mon] profile rbd\r\n        caps: [osd] profile rbd pool=backups\r\nclient.glance\r\n        key: AQBi9YthQxNbKBAAT7LZw0AJDM8NR4nSvaThHw==\r\n        caps: [mon] profile rbd\r\n        caps: [osd] profile rbd pool=images\r\nclient.nova\r\n        key: AQBY9YtheX\/SKxAA81Aqd6RCcNXmiEVo3Xco1w==\r\n        caps: [mon] profile rbd\r\n        caps: [osd] profile rbd pool=volumes, profile rbd pool=vms, profile rbd pool=images\r\n......\r\n```\r\n\r\n**\u5f85\u540e\u7eed OpenStack \u96c6\u7fa4\u90e8\u7f72\u65f6\uff0c\u4f7f\u7528 ceph \u96c6\u7fa4\u4fe1\u606f\u3002**\r\n\r\n### OpenStack \u96c6\u7fa4\u90e8\u7f72 - Wallaby \u7248\r\n\r\n#### \u73af\u5883\u51c6\u5907\r\n\r\n\u4e00\u53f0\u670d\u52a1\u5668\uff1a\r\n\r\n- OS\uff1a`ubuntu 20.04 LTS`\r\n- \u4e24\u5757\u7f51\u5361\uff1anet01 192.168.100.149 net02 192.168.200.162\r\n- \u6d6e\u52a8 IP\uff1a\u7ed1\u5b9a\u81f3 net01 \u4e0a\uff0c172.16.150.77\r\n\r\n**\u5173\u95ed\u4e24\u5757\u7f51\u5361\u7684\u5b89\u5168\u7ec4\uff0c\u5373\u5173\u95ed\u7aef\u53e3\u5b89\u5168\u3002**\r\n\r\n#### \u5f00\u59cb\u90e8\u7f72\r\n\r\n\u90e8\u7f72\u7684\u662f OpenStack Wallaby \u7248\u672c\u3002\r\n\r\n\u5177\u4f53\u6b65\u9aa4\u7565\uff0c\u53ef\u4ee5[\u53c2\u8003\u5b98\u65b9\u90e8\u7f72 kolla-ansible](https:\/\/docs.openstack.org\/kolla-ansible\/wallaby\/user\/quickstart.html)\r\n\r\n\u9644\u4e0a `globals.yml` \u914d\u7f6e\u8be6\u60c5\u3002\r\n\r\n- `globals.yml` \u914d\u7f6e\u89c1\u5982\u4e0b\uff0c\u4e0b\u8ff0\u4e3a\u6587\u4ef6\u4e2d\u6253\u5f00\u7684\u9009\u9879\uff1a\r\n\r\n```yaml\r\n---\r\nkolla_base_distro: \"ubuntu\"\r\n\r\nkolla_install_type: \"source\"\r\n\r\nopenstack_release: \"wallaby\"\r\n\r\nkolla_internal_vip_address: \"192.168.100.149\"\r\n\r\nnetwork_interface: \"ens3\"\r\n\r\nneutron_external_interface: \"ens4\"\r\n\r\nopenstack_logging_debug: \"True\"\r\n\r\nenable_openstack_core: \"yes\"\r\n\r\nenable_glance: \"{{ enable_openstack_core | bool }}\"\r\nenable_haproxy: \"no\"\r\nenable_keepalived: \"{{ enable_haproxy | bool }}\"\r\nenable_keystone: \"{{ enable_openstack_core | bool }}\"\r\nenable_mariadb: \"yes\"\r\nenable_memcached: \"yes\"\r\nenable_neutron: \"{{ enable_openstack_core | bool }}\"\r\nenable_nova: \"{{ enable_openstack_core | bool }}\"\r\nenable_rabbitmq: \"{{ 'yes' if om_rpc_transport == 'rabbit' or om_notify_transport == 'rabbit' else 'no' }}\"\r\n\r\nenable_cinder: \"yes\"\r\nenable_cinder_backup: \"yes\"\r\nenable_fluentd: \"yes\"\r\nenable_horizon: \"{{ enable_openstack_core | bool }}\"\r\nenable_ironic: \"yes\"\r\nenable_ironic_ipxe: \"yes\"\r\nenable_ironic_neutron_agent: \"{{ enable_neutron | bool and enable_ironic | bool }}\"\r\nenable_ironic_pxe_uefi: \"yes\"\r\nenable_neutron_vpnaas: \"yes\"\r\nenable_neutron_qos: \"yes\"\r\nenable_octavia: \"yes\"\r\nenable_prometheus: \"yes\"\r\n\r\nglance_backend_ceph: \"yes\"\r\nceph_glance_keyring: ceph.client.glance.keyring\r\nceph_glance_user: glance\r\nceph_glance_pool_name: images\r\nglance_backend_file: \"no\"\r\n\r\ncinder_backend_ceph: \"yes\"\r\nceph_cinder_keyring: ceph.client.cinder.keyring\r\nceph_cinder_user: cinder\r\nceph_cinder_pool_name: volumes\r\nceph_cinder_backup_keyring: ceph.client.cinder-backup.keyring\r\nceph_cinder_backup_user: cinder-backup\r\nceph_cinder_backup_pool_name: backups\r\n\r\nnova_backend_ceph: \"yes\"\r\nceph_nova_keyring: ceph.client.nova.keyring\r\nceph_nova_user: nova\r\nceph_nova_pool_name: vms\r\n\r\nironic_dnsmasq_interface: \"{{ network_interface }}\"\r\nironic_dnsmasq_dhcp_range: \"192.168.100.210,192.168.100.220,255.255.255.0\"\r\nironic_cleaning_network: \"public1\"\r\n\r\noctavia_auto_configure: \"yes\"\r\noctavia_amp_image_tag: \"amphora\"\r\noctavia_loadbalancer_topology: \"SINGLE\"\r\n```\r\n\r\n\u83b7\u53d6 ironic kernel \u4ee5\u53ca initramfs \u955c\u50cf\uff0c\u5e76\u4e14\u914d\u7f6e ceph \u7684\u4fe1\u606f\u3002\r\n\r\n```console\r\nmkdir -p \/etc\/kolla\/config\/ironic\r\nmkdir -p \/etc\/kolla\/config\/glance\r\nmkdir -p \/etc\/kolla\/config\/nova\r\nmkdir -p \/etc\/kolla\/config\/cinder\r\nmkdir -p \/etc\/kolla\/config\/cinder\/cinder-volume\r\nmkdir -p \/etc\/kolla\/config\/cinder\/cinder-backup\r\n```\r\n\r\n\u5728 seafile \u7684 \u516c\u5171\/\u4ea7\u54c1\u90e8\u8d44\u6599\/Animbus IaaS\u4ea7\u54c1\u8d44\u6599\/Ironic_deploy-images\/x86 \u76ee\u5f55\u4e2d\u4e0b\u8f7d ironic-agent.kernel \u548c\r\nironic-agent.initramfs \u653e\u5165\/etc\/kolla\/config\/ironic\/ \u76ee\u5f55\r\n\r\n\u4ee5\u4e0b\u64cd\u4f5c\u5728 ceph \u8282\u70b9\u8fdb\u884c\r\n\r\n```\r\n# glance \u914d\u7f6e\r\nssh root@172.16.150.77 sudo tee \/etc\/kolla\/config\/glance\/ceph.conf &lt;\/etc\/ceph\/ceph.conf\r\nceph auth get-or-create client.glance | ssh root@172.16.150.77 sudo tee \/etc\/kolla\/config\/glance\/ceph.client.glance.keyring\r\n\r\n# nova \u914d\u7f6e\r\nssh root@172.16.150.77 sudo tee \/etc\/kolla\/config\/nova\/ceph.conf &lt;\/etc\/ceph\/ceph.conf\r\nceph auth get-or-create client.cinder | ssh root@172.16.150.77 sudo tee \/etc\/kolla\/config\/nova\/ceph.client.cinder.keyring\r\nceph auth get-or-create client.nova | ssh root@172.16.150.77 sudo tee \/etc\/kolla\/config\/nova\/ceph.client.nova.keyring\r\n\r\n# cinder \u914d\u7f6e\r\nssh root@172.16.150.77 sudo tee \/etc\/kolla\/config\/cinder\/ceph.conf &lt;\/etc\/ceph\/ceph.conf\r\nceph auth get-or-create client.cinder | ssh root@172.16.150.77 sudo tee \/etc\/kolla\/config\/cinder\/cinder-volume\/ceph.client.cinder.keyring\r\nceph auth get-or-create client.cinder | ssh root@172.16.150.77 sudo tee \/etc\/kolla\/config\/cinder\/cinder-backup\/ceph.client.cinder.keyring\r\nceph auth get-or-create client.cinder-backup | ssh root@172.16.150.77 sudo tee \/etc\/kolla\/config\/cinder\/cinder-backup\/ceph.client.cinder-backup.keyring\r\n```\r\n\r\n\u5f00\u59cb\u90e8\u7f72\r\n\r\n```console\r\nroot@kolla-ansible-w:~# kolla-genpwd\r\nroot@kolla-ansible-w:~# kolla-ansible octavia-certificates\r\nroot@kolla-ansible-w:~# kolla-ansible -i all-in-one bootstrap-servers\r\nroot@kolla-ansible-w:~# kolla-ansible -i all-in-one prechecks\r\nroot@kolla-ansible-w:~# kolla-ansible -i all-in-one deploy\r\nroot@kolla-ansible-w:~# pip install python-openstackclient\r\nroot@kolla-ansible-w:~# kolla-ansible post-deploy\r\nroot@kolla-ansible-w:~# source \/etc\/kolla\/admin-openrc.sh\r\nroot@kolla-ansible-w:~# \/usr\/local\/share\/kolla-ansible\/init-runonce\r\n```\r\n\r\n\u4e0a\u4f20 octavia amphora \u955c\u50cf\r\n\r\n\u5728 seafile \u7684 \u516c\u5171\/\u4ea7\u54c1\u90e8\u8d44\u6599\/Animbus IaaS\u4ea7\u54c1\u8d44\u6599\/Octavia_deploy-images\/octavia \u76ee\u5f55\u4e2d\u4e0b\u8f7d amphora-x64-haproxy.qcow2\r\n\r\n```console\r\nroot@kolla-ansible-w:~# source \/etc\/kolla\/octavia-openrc.sh\r\nroot@kolla-ansible-w:~# openstack image create amphora-x64-haproxy.qcow2 --container-format bare --disk-format qcow2 --private --tag amphora --file amphora-x64-haproxy.qcow2 --property hw_architecture='x86_64' --property hw_rng_model=virtio\r\n```\r\n\r\n\u4fee\u6539 octavia \u4f7f\u7528\u7684 net\r\n\r\n```console\r\nroot@kolla-ansible-w:~# source \/etc\/kolla\/admin-openrc.sh\r\nroot@kolla-ansible-w:~# openstack router delete demo-router\r\nroot@kolla-ansible-w:~# openstack network delete public1\r\nroot@kolla-ansible-w:~# OCTAVIA_MGMT_SUBNET=192.168.200.0\/24\r\nroot@kolla-ansible-w:~# OCTAVIA_MGMT_SUBNET_START=192.168.200.210\r\nroot@kolla-ansible-w:~# OCTAVIA_MGMT_SUBNET_END=192.168.200.220\r\nroot@kolla-ansible-w:~# source \/etc\/kolla\/octavia-openrc.sh\r\nroot@kolla-ansible-w:~# openstack network create public1 --provider-network-type flat --provider-physical-network physnet1 --external --share\r\nroot@kolla-ansible-w:~# openstack subnet create --subnet-range $OCTAVIA_MGMT_SUBNET --allocation-pool start=$OCTAVIA_MGMT_SUBNET_START,end=$OCTAVIA_MGMT_SUBNET_END --network public1 subnet\r\nroot@kolla-ansible-w:~# NET_NETWORK_ID=`openstack network show public1 -f value -c id`\r\nroot@kolla-ansible-w:~# sed -i \"s\/^amp_boot_network_list = *.*\/amp_boot_network_list = $NET_NETWORK_ID\/g\" \/etc\/kolla\/octavia-api\/octavia.conf\r\nroot@kolla-ansible-w:~# sed -i \"s\/^amp_boot_network_list = *.*\/amp_boot_network_list = $NET_NETWORK_ID\/g\" \/etc\/kolla\/octavia-health-manager\/octavia.conf\r\nroot@kolla-ansible-w:~# sed -i \"s\/^amp_boot_network_list = *.*\/amp_boot_network_list = $NET_NETWORK_ID\/g\" \/etc\/kolla\/octavia-housekeeping\/octavia.conf\r\nroot@kolla-ansible-w:~# sed -i \"s\/^amp_boot_network_list = *.*\/amp_boot_network_list = $NET_NETWORK_ID\/g\" \/etc\/kolla\/octavia-worker\/octavia.conf\r\nroot@kolla-ansible-w:~# docker restart octavia_api octavia_health_manager octavia_housekeeping octavia_worker\r\n```\r\n\r\n\u4e0a\u4f20 ironic kernel \u548c initramfs \u955c\u50cf\r\n\r\n```console\r\nroot@kolla-ansible-w:~# source \/etc\/kolla\/admin-openrc.sh\r\nroot@kolla-ansible-w:~# openstack image create --disk-format ari --container-format ari --public --file \/etc\/kolla\/config\/ironic\/ironic-agent.initramfs deploy-initrd\r\nroot@kolla-ansible-w:~# openstack image create --disk-format aki --container-format aki --public --file \/etc\/kolla\/config\/ironic\/ironic-agent.kernel deploy-vmlinuz\r\n```\r\n\r\n### vBMC - \u865a\u62df\u88f8\u673a\u3010\u53ef\u9009\u3011\r\n\r\n#### \u73af\u5883\u51c6\u5907\r\n\r\n\u4e00\u53f0\u670d\u52a1\u5668\uff1a\r\n\r\n- OS\uff1a`CentOS 7.9.2009`\r\n- \u4e24\u5757\u7f51\u5361\uff1anet01 192.168.100.177 net02 192.168.200.173\r\n- \u6d6e\u52a8 IP\uff1a\u7ed1\u5b9a\u81f3 net01 \u4e0a\uff0c172.16.150.100\r\n\r\n**\u5173\u95ed\u4e24\u5757\u7f51\u5361\u7684\u5b89\u5168\u7ec4\uff0c\u5373\u5173\u95ed\u7aef\u53e3\u5b89\u5168\u3002**\r\n\r\n#### \u90e8\u7f72 vBMC\r\n\r\n\u53c2\u8003\u9879\u76ee\uff1ahttp:\/\/gitlab.sh.99cloud.net\/shaleijie\/ironic-ci-cd\r\n\r\n```console\r\n[root@vbaremetal ~]# git clone http:\/\/gitlab.sh.99cloud.net\/shaleijie\/ironic-ci-cd.git\r\n[root@vbaremetal ~]# cd ironic-ci-cd\/\r\n[root@vbaremetal ~]# chmod +x create-node.sh enroll_nodes.sh main.sh setup-network.sh\r\n[root@vbaremetal ~]# pip config set global.index-url https:\/\/pypi.tuna.tsinghua.edu.cn\/simple\r\n[root@vbaremetal ~]# pip config set global.trusted-host pypi.tuna.tsinghua.edu.cn\r\n[root@vbaremetal ~]# scp -r root@192.168.100.149:\/etc\/kolla\/ \/etc\/\r\n[root@vbaremetal ~]# cd ironic-ci-cd\/\r\n[root@vbaremetal ~]# bash main.sh\r\n```\r\n\r\n\u9a8c\u8bc1 vBMC\r\n\r\n```console\r\n[root@vbaremetal ~]# virsh list --all\r\n Id    \u540d\u79f0                         \u72b6\u6001\r\n----------------------------------------------------\r\n -     node-0                         \u5173\u95ed\r\n -     node-1                         \u5173\u95ed\r\n -     node-2                         \u5173\u95ed\r\n[root@vbaremetal ~]# vbmc list\r\n+-------------+---------+---------+------+\r\n| Domain name | Status  | Address | Port |\r\n+-------------+---------+---------+------+\r\n| node-0      | running | ::      | 6230 |\r\n| node-1      | running | ::      | 6231 |\r\n| node-2      | running | ::      | 6232 |\r\n+-------------+---------+---------+------+\r\n```\r\n\r\nenroll \u865a\u62df\u88f8\u673a\r\n\r\n```console\r\n[root@vbaremetal ironic-ci-cd]# HOST_ip=\"&lt;vBMC_IP&gt;\"\r\n[root@vbaremetal ironic-ci-cd]# sed -i \"s\/^HOST_IP=*.*\/HOST_IP=\\\"$HOST_IP\\\"\/g\" enroll_nodes.sh\r\n[root@vbaremetal ironic-ci-cd]# .\/enroll_nodes.sh\r\n```\r\n\r\n\u7b49\u5f85 enroll \u5b8c\u6210\u3002\u767b\u5f55 horizon \u754c\u9762\uff0c\u5728\u7ba1\u7406\u5e73\u53f0\u4e2d\uff0c\u66f4\u65b0\u88f8\u673a\u7684 kernel \u4ee5\u53ca initramfs \u955c\u50cf\u4fe1\u606f\u3002\r\n\r\n### \u90e8\u7f72 skyline\r\n\r\n#### \u6784\u5efa skyline \u955c\u50cf\r\n\r\n\u4f7f\u7528\u6b64 [Dockerfile](https:\/\/opendev.org\/skyline\/skyline-apiserver\/src\/branch\/master\/container) \u6784\u5efa\u955c\u50cf\u3002\r\n\r\n#### \u5f00\u59cb\u90e8\u7f72 skyline\r\n\r\n\u53c2\u8003\u6b64[\u6587\u6863](https:\/\/opendev.org\/skyline\/skyline-apiserver\/src\/branch\/master\/README-zh_CN.md#%E9%83%A8%E7%BD%B2-%E6%95%B0%E6%8D%AE%E5%BA%93%E4%BD%BF%E7%94%A8-mariadb)\u3002\r\n\r\n## \u767b\u5f55 skyline\r\n\r\n\u8bbf\u95ee\uff1ahttps:\/\/172.16.150.77:9999<\/pre>\n","protected":false},"excerpt":{"rendered":"<p># kolla-ansible \u90e8\u7f72\u57fa\u4e8e Wallaby \u7248\u672c\u7684 OpenStack ## \u6db5\u76d6\u7ec4\u4ef6 | \u7ec4\u4ef6 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[12,3],"tags":[],"class_list":["post-6818","post","type-post","status-publish","format-standard","hentry","category-linux","category-system"],"_links":{"self":[{"href":"https:\/\/www.xh86.me\/index.php?rest_route=\/wp\/v2\/posts\/6818","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.xh86.me\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.xh86.me\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.xh86.me\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.xh86.me\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=6818"}],"version-history":[{"count":1,"href":"https:\/\/www.xh86.me\/index.php?rest_route=\/wp\/v2\/posts\/6818\/revisions"}],"predecessor-version":[{"id":6819,"href":"https:\/\/www.xh86.me\/index.php?rest_route=\/wp\/v2\/posts\/6818\/revisions\/6819"}],"wp:attachment":[{"href":"https:\/\/www.xh86.me\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=6818"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.xh86.me\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=6818"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.xh86.me\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=6818"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}