2022 年 3 月,在麒麟軟件和 openEuler 社區(qū)的共同努力下,同時(shí)支持 x86_64 和 aarch64 架構(gòu)的云底座操作系統(tǒng) NestOS 首個(gè)正式版發(fā)布。NestOS 如何使用?與我們熟知的通用 OS 有哪些異同?本文將以容器化部署 OpenStack 場景作為實(shí)際應(yīng)用案例,嘗試為大家回答上述問題。
整體方案
在本方案中,我們以 Libvirt 創(chuàng)建 NestOS 虛擬化實(shí)例的方式組建集群,通過 Kolla-ansible 部署工具完成 OpenStack 容器化部署。任何可正常運(yùn)行 Kolla-ansible 的主機(jī)均可作為部署節(jié)點(diǎn),不建議采用 NestOS 作為部署節(jié)點(diǎn)。例如本方案中部署節(jié)點(diǎn)為 openEuler 21.09,而 NestOS 則作為 OpenStack 集群的實(shí)際運(yùn)行環(huán)境,擔(dān)當(dāng)控制、計(jì)算、存儲等節(jié)點(diǎn)。為簡化行文描述,后文以單個(gè) NestOS 實(shí)例配置進(jìn)行介紹,實(shí)際使用可根據(jù)需求添加任意數(shù)量 NestOS 實(shí)例。
如您是首次了解 NestOS,可首先在 openEuler 22.03 官方文檔中查閱 NestOS 相關(guān)用戶指南(https://docs.openeuler.org/zh/docs/22.03_LTS/docs/NestOS/overview.html)
「部署環(huán)境:」
- 部署節(jié)點(diǎn) OS:openEuler 21.09
- NestOS 版本:nestos-22.03.20220329-qemu.x86_64.qcow2
- OpenStack 版本:Wallaby
- Kollla-ansible 版本:12.0.0
「提醒:」
- CPU、內(nèi)存以及硬盤容量應(yīng)盡可能大,推薦配置為 4C、8G 和 40G, 若采用本地存儲方案(如 LVM)可添加第二塊硬盤。
- 建議使用兩塊網(wǎng)卡,其中網(wǎng)卡 1 用于 ssh 連接和訪問外網(wǎng);網(wǎng)卡 2 用于 Neutron 外部(或公共)網(wǎng)絡(luò),可以是 vlan 或 flat,取決于網(wǎng)絡(luò)的創(chuàng)建方式。此網(wǎng)卡應(yīng)該在沒有 IP 地址的情況下處于活動狀態(tài)。否則,實(shí)例將無法訪問外部網(wǎng)絡(luò)。
NestOS 實(shí)例創(chuàng)建與配置
準(zhǔn)備 Ignition 點(diǎn)火文件
結(jié)合容器化部署 OpenStack 特定場景環(huán)境配置需求,我們首先需要準(zhǔn)備一份供 NestOS 部署使用的 Ignition 點(diǎn)火配置,主要內(nèi)容分為操作系統(tǒng)基礎(chǔ)配置與 OpenStack 部署環(huán)境初始化兩部分,具體包括:
類別 | 配置項(xiàng) | 用途 |
---|---|---|
passwd | 配置 NestOS 登錄用戶和訪問鑒權(quán)等相關(guān)信息 | |
系統(tǒng)配置 | 主機(jī)名 | 配置 NestOS 實(shí)例主機(jī)名 |
網(wǎng)卡 1 | 該網(wǎng)卡負(fù)責(zé)部署、運(yùn)維 NestOS 實(shí)例,提供基礎(chǔ)網(wǎng)絡(luò)環(huán)境 | |
時(shí)區(qū) | 配置 NestOS 實(shí)例默認(rèn)時(shí)區(qū) | |
內(nèi)核參數(shù) | OpenStack 部署環(huán)境需確保開啟部分內(nèi)核參數(shù) | |
網(wǎng)卡 2 | 該網(wǎng)卡專用于 Neutron 使用 | |
OpenStack 部署環(huán)境初始化 | 安裝 python 環(huán)境 | OpenStack 部署需 python 環(huán)境支持 |
關(guān)閉 selinux | OpenStack 部署環(huán)境需關(guān)閉 selinux | |
時(shí)間同步 | OpenStack 部署環(huán)境需通過 chronyd 服務(wù)同步集群時(shí)間 | |
存儲配置 | 供 OpenStack 集群使用,本地存儲方案必選 |
ignition 文件被設(shè)計(jì)為可讀但難以編寫的形式(本質(zhì)為 json 格式),我們可以先編寫對人友好的 bu 文件(本質(zhì)為 yaml 格式),然后通過 Butane 工具將其轉(zhuǎn)化為 ignition 文件。
系統(tǒng)配置 passwd 時(shí),如計(jì)劃使用密碼驗(yàn)證的方式訪問 NestOS 實(shí)例,可以使用下述命令生成**${PASSWORD_HASH}**供 bu 文件使用。
opensslpasswd-1-saltyoursalt
我們按照上述表格中的信息將部署 OpenStack 所需的相關(guān)配置添加到 bu 文件中,示例如下。如需獲取該文件,可訪問 NestOS 項(xiàng)目倉庫(https://gitee.com/openeuler/NestOS)docs / use_sample / OpenStack / 路徑下獲取。
**注意:「本配置文件示例中,形如」${VALUE}**字段均需根據(jù)實(shí)際部署情況自行配置。
# Valid options are ['centos', 'debian', 'rhel', 'ubuntu']
kolla_base_distro: "centos"
# Valid options are [ binary, source ]
kolla_install_type: "binary"
openstack_release: "wallaby"
kolla_internal_vip_address: "{kolla_internal_vip_address}"
network_interface: "ens2"
api_interface: "{{ network_interface }}"
storage_interface: "{{ network_interface }}"
tunnel_interface: "{{ network_interface }}"
neutron_external_interface: "ens3"
neutron_plugin_agent: "openvswitch"
keepalived_virtual_router_id: "51"
openstack_logging_debug: "True"
enable_glance: "yes"
enable_haproxy: "yes"
enable_keepalived: "{{ enable_haproxy | bool }}"
enable_keystone: "yes"
enable_mariadb: "yes"
enable_memcached: "yes"
enable_neutron: "{{ enable_openstack_core | bool }}"
enable_nova: "{{ enable_openstack_core | bool }}"
enable_rabbitmq: "{{ 'yes' if om_rpc_transport == 'rabbit' or om_notify_transport == 'rabbit' else 'no' }}"
enable_chrony: "yes"
enable_cinder: "yes"
enable_cinder_backup: "yes"
enable_cinder_backend_lvm: "yes"
enable_cloudkitty: "no"
enable_gnocchi: "no"
enable_heat: "{{ enable_openstack_core | bool }}"
enable_horizon: "yes"
enable_horizon: "{{ enable_openstack_core | bool }}"
enable_horizon_blazar: "{{ enable_blazar | bool }}"
enable_horizon_cloudkitty: "{{ enable_cloudkitty | bool }}"
enable_horizon_murano: "{{ enable_murano | bool }}"
enable_horizon_neutron_lbaas: "{{ enable_neutron_lbaas | bool }}"
enable_horizon_sahara: "{{ enable_sahara | bool }}"
enable_horizon_senlin: "{{ enable_senlin | bool }}"
enable_horizon_watcher: "{{ enable_watcher | bool }}"
enable_ironic: "no"
enable_ironic_ipxe: "no"
enable_ironic_neutron_agent: "no"
enable_kafka: "no"
enable_murano: "no"
enable_neutron_lbaas: "yes"
enable_neutron_sriov: "yes"
enable_neutron_qos: "yes"
enable_nova_ssh: "yes"
enable_openvswitch: "{{ enable_neutron | bool and neutron_plugin_agent != 'linuxbridge' }}"
enable_placement: "{{ enable_nova | bool or enable_zun | bool }}"
enable_sahara: "no"
enable_senlin: "no"
enable_swift: "no"
enable_tempest: "no"
enable_watcher: "no"
keystone_token_provider: 'fernet'
keystone_admin_user: "admin"
keystone_admin_project: "admin"
fernet_token_expiry: 86400
glance_backend_file: "yes"
glance_enable_rolling_upgrade: "no"
cinder_volume_group: "cinder-volumes"
cinder_backup_driver: "lvm"
cinder_backup_share: "lvm"
cinder_backup_mount_options_nfs: "lvm"
nova_compute_virt_type: "qemu"
nova_safety_upgrade: "no"
horizon_backend_database: "{{ enable_murano | bool }}"
針對某些相對復(fù)雜的初始化配置需求,可以將其編寫為 systemd 托管的 service 服務(wù),如內(nèi)核參數(shù)配置通過寫入配置文件方式傳入?yún)?shù),再通過 systemd 服務(wù)進(jìn)行應(yīng)用:
systemd:
units:
##內(nèi)核參數(shù)配置
-name:set-kernel-para-for-openstack.service
enabled:true
contents:|
[Unit]
Description=foropenstack
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=modprobebr_netfilter
ExecStart=sysctl-p
[Install]
WantedBy=multi-user.target
配置編寫完畢后,可通過如下命令將 bu 文件通過 Butane 工具轉(zhuǎn)換為 ignition 點(diǎn)火文件:
dockerrun--interactive--rmquay.io/coreos/butane:latest--pretty--strictnestos.ign
除本地使用外,也可將生成的 ignition 點(diǎn)火文件以 http 服務(wù)等形式供 NestOS 實(shí)例部署時(shí)遠(yuǎn)程訪問,實(shí)現(xiàn)集中式批量部署配置。
Libvirt 創(chuàng)建 NestOS 實(shí)例
準(zhǔn)備好 ignition 文件后,使用 virt-install 創(chuàng)建 NestOS 虛擬化實(shí)例,創(chuàng)建指令參考如下,其中 vcpus、ram 和 disk 參數(shù)均為最低要求,如有額外需求,可參考 virt-install 手冊自行調(diào)整,${IGNITION_FILE_PATH}為 ignition 文件路徑,可以為本地路徑或遠(yuǎn)程 URL。
注意:「形如」${VALUE}字段均需根據(jù)實(shí)際部署情況自行配置。
virt-install--name=${NAME}--vcpus=4--ram=8192--import--network=bridge=virbr0--graphics=none--qemu-commandline="-fw_cfgname=opt/com.coreos/config,file=${IGNITION_FILE_PATH}"--disk=size=40,backing_store=${NESTOS_RELEASE_QCOW2_PATH}--network=bridge=virbr1--disk=size=40
以上就是 Libvirt 創(chuàng)建 NestOS 虛擬化實(shí)例的基本流程,可根據(jù)需要創(chuàng)建任意數(shù)量的 NestOS 實(shí)例,也可使用 PXE 方式引導(dǎo)部署在裸金屬服務(wù)器。
OpenStack 配置與部署
基于 NestOS 容器化部署 OpenStack 采用了主流的 Kolla-ansible 方案,按上文步驟創(chuàng)建的 NestOS 實(shí)例已具備 kolla-ansible 部署所需各項(xiàng)條件,在部署過程中無需任何操作。本章節(jié)所涉及的指令操作均在部署節(jié)點(diǎn)上執(zhí)行。
配置基礎(chǔ)環(huán)境
添加 OpenStack 源
在 openEuler 發(fā)行版中已提供 openstack 適配,如部署節(jié)點(diǎn)采用 openEuler,安裝 OpenStack 相關(guān)軟件包前均需安裝 OpenStack 源。
yuminstallopenstack-release-wallaby
安裝 Kolla 和 Kolla-ansible
yuminstallopenstack-kollaopenstack-kolla-ansible
配置 Ansible
將以下選項(xiàng)添加到 Ansible 配置文件**/etc/ansible/ansible.cfg**:
[defaults]
host_key_checking=False
pipelining=True
forks=100
配置 Kolla Ansible
Inventory
Inventory 是一個(gè) Ansible 文件,可以在其中指定主機(jī)及其所屬的組,使用它來定義節(jié)點(diǎn)角色和訪問憑證。
Kolla Ansible 附帶了 all-in-one 和 multinode 示例清單文件。它們之間的區(qū)別在于,前者是部署單節(jié)點(diǎn) OpenStack,后者則是使用多個(gè)節(jié)點(diǎn)。本文將使用 multinode 方式部署。
- 在 multinode 文件中編輯環(huán)境的節(jié)點(diǎn)信息,例如:
[control]
nestosansible_ssh_user=${USERNAME}ansible_ssh_password=${USERPASSWARD}ansible_become=true
[network]
nestos
[compute]
nestosansible_ssh_user=${USERNAME}ansible_ssh_password=${USERPASSWARD}ansible_become=true
[monitoring]
nestos
[storage]
nestos
[deployment]
localhostansible_connection=localbecome=true
- 檢查配置是否正確,運(yùn)行:
ansible-i./multinode all-mping
Kolla 密碼
在部署過程中使用的密碼存儲在/etc/kolla/passwords.yml 文件中。初始情況下,該文件中的所有密碼都是空白的,必須手動填充或通過運(yùn)行隨機(jī)密碼生成器來填充:
kolla-genpwd
SourceURL///home/lijian/文檔/公眾號文檔_NestOS 應(yīng)用:容器化部署 OpenStack/20220704_NestOS 應(yīng)用案例:容器化部署 OpenStack.docx
Kolla globals.yml
globals.yml 是 Kolla Ansible 的主要配置文件。由于當(dāng)前 OpenStack 官方容器鏡像還未正式支持 openEuler 系統(tǒng),因此在部署時(shí)將選用 CentOS 容器鏡像。
- 鏡像選擇
#Validoptionsare['centos','debian','rhel','ubuntu']
kolla_base_distro:"centos"
#Validoptionsare[binary,source]
kolla_install_type:"binary"
#Donotoverridethisunlessyouknowwhatyouaredoing.
openstack_release:"wallaby"
- 網(wǎng)絡(luò)
Kolla Ansible 需要設(shè)置一些網(wǎng)絡(luò)選項(xiàng)。
network_interface:"eth0"
neutron_external_interface:"eth1"
kolla_internal_vip_address:"10.1.0.250"
- 啟用其他服務(wù)
默認(rèn)情況下,Kolla Ansible 提供了大量的附加服務(wù),可根據(jù)需求啟用服務(wù)。例如,啟用 cinder 服務(wù):
enable_cinder:"yes"
部署 OpenStack
Kolla Ansible 提供了一個(gè) playbook,能夠以指定的版本安裝所有必需的服務(wù)。
下面為使用 multinode 配置的情況,如使用 all-in-one,需進(jìn)行替換。也可添加-vvv 參數(shù),查看詳細(xì)執(zhí)行日志。
- 引導(dǎo)服務(wù)
kolla-ansible-i./multinodebootstrap-servers
- 環(huán)境檢查
kolla-ansible-i./multinodeprechecks
- 拉取鏡像
kolla-ansible-i./multinodepull
- 執(zhí)行部署
kolla-ansible-i./multinodedeploy
如部署失敗,可執(zhí)行銷毀命令:
kolla-ansibledestroy-i./multinode--yes-i-really-really-mean-it
使用 OpenStack
- 安裝 OpenStack CLI 客戶端
yuminstallpython3-openstackclient
- OpenStack 需要一個(gè) openrc 文件,其中設(shè)置了管理員用戶的憑證。生成該文件:
kolla-ansiblepost-deploy
./etc/kolla/admin-openrc.sh
- 根據(jù)安裝 Kolla Ansible 的方式,執(zhí)行下述腳本創(chuàng)建示例網(wǎng)絡(luò),鏡像等。
kolla-ansible/tools/init-runonce
- 通過 ip 地址與 admin-openrc.sh 中提供的 horizon 賬號密碼進(jìn)行登錄:
登錄成功后可看到 OpenStack 的 web 界面:
更多詳細(xì)信息可查閱 OpenStack 官方部署文檔:https://docs.openstack.org/kolla-ansible/wallaby/user/quickstart.html。
總結(jié)
NestOS 作為一款在 openEuler 社區(qū) CloudNative Sig 組孵化的云底座操作系統(tǒng),從以上部署 OpenStack 的流程可以看出,它專為運(yùn)行容器化工作負(fù)載而設(shè)計(jì),意在成為計(jì)算集群的安全可靠主機(jī)。在第一次啟動期間,NestOS 使用 ignition 點(diǎn)火文件配置系統(tǒng),無論是在云端、虛擬化還是裸金屬,NestOS 始終都從同一個(gè)地方開始,我們還可將 ignition 保存于服務(wù)器中,供 NestOS 遠(yuǎn)程訪問,實(shí)現(xiàn)集中式的配置管理,這為大規(guī)模部署集群提供了便利。
NestOS 旨在作為不可變基礎(chǔ)架構(gòu)進(jìn)行管理,當(dāng)機(jī)器創(chuàng)建完成后,如想要更新配置不應(yīng)通過修改/etc 或其他方式進(jìn)行更改,而應(yīng)使用新的 ignition 點(diǎn)火文件配置替換機(jī)器。這與我們管理容器的方式類似,容器鏡像不會就地更新,而是從頭開始重新構(gòu)建并重新部署。這種方法可以在負(fù)載增加時(shí)輕松擴(kuò)展,只需使用相同的 ignition 配置即可啟動其他計(jì)算機(jī)。
NestOS 將配置工具 ignition 與 rpm-ostree、OCI 支持、Selinux 強(qiáng)化等技術(shù)集成在一起,采用基于雙系統(tǒng)分區(qū)、容器技術(shù)和集群架構(gòu)的設(shè)計(jì)思路,搭載 iSulad、docker、podman 等主流容器基礎(chǔ)平臺,克服了由于用戶修改系統(tǒng)內(nèi)容、用戶服務(wù)對系統(tǒng)組件依賴,以及系統(tǒng)軟件包升級時(shí)不穩(wěn)定中間態(tài)等種種導(dǎo)致升級過程不可靠的因素,最終以一種輕量級、定制化的操作系統(tǒng)呈現(xiàn)出來,可以適應(yīng)各種不同的基礎(chǔ)設(shè)施環(huán)境。
More
openEuler 社區(qū)的 OpenStack 生態(tài)正在逐步完善,期待 Sig-OpenStack 盡快推出 openEuler 社區(qū)支持維護(hù)的 OpenStack 容器鏡像。未來 NestOS 項(xiàng)目也計(jì)劃與 Sig-OpenStack 緊密合作,推出更加適用于 NestOS 部署方式的部署工具,不僅如此,我們也會推出特定于 OpenStack 場景使用的 NestOS 集成定制版本,減少冗余軟件包,在降低操作系統(tǒng)基座底噪的同時(shí)減少暴露攻擊面,實(shí)現(xiàn)更便捷、更高效地部署。
「聯(lián)系我們」
NestOS 項(xiàng)目官方倉庫:https://gitee.com/openeuler/NestOS
您也可通過 openEuler 社區(qū) sig-cloudnative 與 sig-K8sDistro 聯(lián)系我們。
-
操作系統(tǒng)
+關(guān)注
關(guān)注
37文章
6941瀏覽量
124154 -
容器
+關(guān)注
關(guān)注
0文章
500瀏覽量
22193 -
OpenStack
+關(guān)注
關(guān)注
1文章
70瀏覽量
19024
原文標(biāo)題:NestOS應(yīng)用案例:容器化部署OpenStack
文章出處:【微信號:openEulercommunity,微信公眾號:openEuler】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
使用 ESS SDK 快速創(chuàng)建多實(shí)例規(guī)格伸縮配置
阿里云ECS開放批量創(chuàng)建實(shí)例接口,實(shí)現(xiàn)彈性資源的創(chuàng)建
ESS控制臺發(fā)布新功能:創(chuàng)建多實(shí)例規(guī)格的伸縮配置
基于 openEuler 22.09 版本構(gòu)建的 NestOS 全新發(fā)布!
創(chuàng)建和配置數(shù)據(jù)源
如何使用Vivado Device Programmer創(chuàng)建和配置存儲設(shè)備
使用SQL語句創(chuàng)建數(shù)據(jù)庫的實(shí)例詳細(xì)說明
基于NestOS新版本的特性
編寫一個(gè)創(chuàng)建模塊dut實(shí)例的測試平臺
西門子博途:創(chuàng)建實(shí)例數(shù)據(jù)塊

評論