当前位置:网站首页>kolla-ansible部署openstack yoga版本
kolla-ansible部署openstack yoga版本
2022-06-26 05:41:00 【上海一畝地】
目錄
kolla介紹
簡介
kolla 的使命是為 openstack 雲平臺提供⽣產級別的、開箱即⽤的交付能⼒。kolla 的基本思想是⼀切皆容器,將所有服務基於 Docker 運 ⾏,並且保證⼀個容器只跑⼀個服務(進程),做到最⼩粒度的運⾏ docker。 kolla 要實現 openetack 部署總體上分為兩步,第⼀步是制作 docker 鏡像,第⼆步是編排部署。因此,kolla 項⽬⼜被分為兩個⼩項⽬: kolla、kolla-ansible 。
kolla 的優勢
kolla 的優勢主要得益於容器技術:
- 得益於成熟的部署⼯具 ansible 和 docker,部署快速且穩定。
- ⼀個容器只跑⼀個服務,所以能將 openstack 服務控制到很⼩的粒度。
- 可以以組件為單比特進⾏昇級和回滾,例如昇級 nova 組件,使⽤ kolla-ansible -i /path/to/inventory -t nova 命令即可。
- kolla 采⽤⼀切皆容器的基本思想,所以只需操作系統與 docker 兼容,從⽽規避了很多安裝包依賴沖突的問題。
- ⽬前 kolla 項⽬在社區內的熱度相對較⾼,社區⽀持更好。
kolla 的缺點
- 完全依賴於 docker ,docker 的不穩定性會給整個環境帶來巨⼤的灾難,不過⽬前 docker 已經問題很少了。
- 使⽤ kolla 部署好雲平臺後,給開發的 debug 和運維的故障排查會帶來更多的複雜度,這個問題也可能通過寫⼀個簡單的 client 解 决。
安裝前的環境配置
這篇文章不是小白手册,不會教您如何使用KVM,設置網絡,掛載硬盤,創建LVM等運維手段,需要您有一定的功底。底子太薄了,我就是寫10萬字也講不完。
節點規劃
計劃用的是KVM創建了3臺虛擬機。
- 一臺作為openstack的manager管理節點,上面跑了openstack的keystone身份認證和RabbitMQ、etcd等基礎組件,是openstack的命根子。往後的集群擴容都要連接manager的。CPU核心要足够用,內存要足,網速還要好。存儲要求不高,只要一個系統盤,100GB也就够了。
- 一臺作為計算節點,是專門運行雲服務器的。計算節點的特點是cpu核心和內存要大。存儲幾乎沒要求,雲服務器的系統盤和塊存儲、對象存儲、鏡像快照存儲都由另一臺節點提供。
- 一臺作為存儲節點,上面運行cinder、glance、swift等openstack存儲組件。所以這類存儲節點的特點就是磁盤大,網絡快(不然虛擬機訪問他的系統盤豈不是特別卡?)。
宿主機安裝kvm
Debian或Ubuntu安裝KVM的方法
sudo apt update
sudo apt -y install qemu qemu-system qemu-kvm virt-manager bridge-utils vlan
KVM中先創建兩個NAT的虛擬網絡設備
在創建虛擬機前先創建兩張NAT類型的虛擬網卡。
第一個網絡設備取名openstack,用於openstack各個組件的endpoint通信。網段是10.0.0.0/24
第二個網絡設備取名public,用於雲服務器的公網訪問。網段是192.168.100.0/24

虛擬機硬件規劃。
系統鏡像使用Ubuntu-20.04-desktop,每個虛擬機都是用之前創建的這兩個虛擬網卡。
硬件規劃:
- 主機名:kolla-manager。算力:4核8GB。硬盤:200GB系統盤。網絡:兩個網卡都使用。IP分別是10.0.0.201和192.168.100.201
- 主機名:kolla-compute1。算力:6核16GB。硬盤:200GB系統盤。網絡:兩張網卡都使用。IP分別是10.0.0.202和192.168.100.202
- 主機名:kolla-storage。算力:2核4GB,硬盤200GB系統盤,另外添加兩個250GB的額外硬盤,後面會把這兩塊盤合並成一個500GB的VG。網絡:兩張網卡都使用。(其實只用那個叫openstack的網卡就够了,再加一個不吃虧)IP分別是10.0.0.203和192.168.100.203
OS安裝完成後的系統配置更改
安裝OS的時候只能選擇一個網卡和一個磁盤,所以等安裝完OS後請立刻關機,並在硬件匯總添加第二章網卡,storage存儲設備添加500GB硬盤設備。
再次開機,並做以下設置
# 設置主機名
hostnamectl set-hostname --static kolla-manager # 第一臺
hostnamectl set-hostname --static kolla-compute1 # 第二臺
hostnamectl set-hostname --static kolla-storage # 第三臺
# 修改root密碼
sudo passwd root
新密碼:123456
# 修改ip
# 可以圖形化修改,以下是命令行修改ip
ip -a # 查看網絡接口名
# 編輯netplan。以第一臺的配置為例
vim /etc/netplan/01-network-manager-all.yaml
------------------------------------------------
network:
version: 2
renderer: NetworkManager
# 新增
ethernets:
enp1s0: # 這是第一個網絡設備名,這個設備名是通過ip a 命令獲取的。
dhcp4: no
addresses: [10.0.0.201/24]
optional: true
gateway4: 10.0.0.1
nameservers:
addresses: [10.0.0.1]
enp6s0: # 這是第二個網絡設備名
dhcp4: no
addresses: [192.168.100.201/24]
optional: true
gateway4: 192.168.100.1
nameservers:
addresses: [192.168.100.1]
# 關閉防火牆
ufw disable
# 更新系統包
apt -y update && apt -y full-upgrade
apt -y install ssh vim git
apt -y install python3-dev libffi-dev gcc libssl-dev
vim /etc/ssh/sshd_config
# 修改PermitRootLogin,允許root用戶通過密碼登錄
PermitRootLogin yes
# 重啟ssh
systemctl restart ssh
systemctl enable ssh
storage節點配置VG(Volume Group)
一下操作在storage(10.0.0.203)上執行
# storage節點上創建一個500GB的VG
apt -y install lvm2
pvcreate /dev/vdb /dev/vdc
vgcreate cinder-volumes /dev/vdb /dev/vdc
不要自己擅自安裝docker!
使用kolla-ansible部署openstack前,盡量保證各個節點的操作系統純淨,不要私自安裝docker,不要私自修改GPG key。否則會導致kolla-ansible無法運行,最終只能逼著你去重裝系統。
kolla-ansible會自動幫我們安裝全套的運行環境,包括docker!!!
kolla安裝openstack
安裝Docker SDK
docker SDK的作用就是,ansible通過每臺節點上的docker SDK來操作各個節點上的docker引擎,進而操作鏡像和容器。所以每臺機器上都要有安裝這個docker SDK。
本來kolla-ansible會自動安裝這個Docker SDK,但是我實際安裝時發現網絡不佳,導致Kolla-ansible經常跑失敗。所以提前通過清華源安裝好docker SDK後,就能保證kolla-ansible的100%成功。
以下操作每臺機器都執行
# 安裝sshpass
apt -y install sshpass # ansible依賴sshpass
apt -y install python3-dev libffi-dev gcc libssl-dev
# 安裝python pip和venv
apt -y install python3-pip python3-venv
# 下載Docker SDK.如果這一步報錯,可能是網絡不良,重試幾次就行了。
# 其實這一步是在kolla-ansible -i ./multinode bootstrap-servers中ansible的一個step
# 如果我們提前做了,後面就不會因為網絡不良而報錯
# 下方這個命令請在3臺節點上都執行一下!!
pip3 install docker -i https://pypi.tuna.tsinghua.edu.cn/simple
安裝配置Ansible
我們計劃將manager節點上進行kolla部署,以下操作只在10.0.0.201上執行。
# 生成虛擬環境
python3 -m venv ~/venv3
source ~/venv3/bin/activate
pip install -U pip wheel setuptools -i https://pypi.tuna.tsinghua.edu.cn/simple
# 安裝ansible
pip install 'ansible>=4,<6' -i https://pypi.tuna.tsinghua.edu.cn/simple
# 新增一個配置文件,讓ansible不要檢查known host key
vim ~/ansible.cfg
----------------------------------
[defaults]
host_key_checking=False
pipelining=True
forks=100
下載kolla-ansible 14.0.0版本,並安裝Galaxy依賴。
# 供github上下載kolla-ansible,yoga分支
pip install kolla-ansible==14.0.0 -i https://pypi.tuna.tsinghua.edu.cn/simple
# 安裝Ansible Galaxy依賴
cd ~ # 這一步cd為了讓當前目錄有ansible.cfg
kolla-ansible install-deps
配置inventory文件
# 配置ansible inventory
cd ~
cp ~/venv3/share/kolla-ansible/ansible/inventory/* ~/
ls ~
# 會出現兩個文件:all-in-one 、 multinode
# all in one是把所有openstack部署在一個節點上。如果采用all-in-one,則不需要修改。
# 我們將openstack部署在3臺節點上,使用multinode
vim ~/multinode
----------------------------------------
# 文件開頭新增這3行,自行修改密碼
manager ansible_host=10.0.0.201 ansible_user=root ansible_password=123456 ansible_python_interpreter=/usr/bin/python3
compute1 ansible_host=10.0.0.202 ansible_user=root ansible_password=123456 ansible_python_interpreter=/usr/bin/python3
storage1 ansible_host=10.0.0.203 ansible_user=root ansible_password=123456 ansible_python_interpreter=/usr/bin/python3
# 修改這幾個組,其他的保留不變
[control]
manager
[network]
control
compute1
storage1
[compute]
compute1
[monitoring]
manager
[storage]
storage1
[deployment]
localhost ansible_connection=local become=true
其實通過查看原始的multinode文件,你可以發現,kolla將你所有的節點劃分成了5種類型,即control類節點、network類節點、compute類、monitoring類節點、storage類節點。
這5個節點組是其他組的子組。
比方說文件下方有很多組件,比如loadbalance、trove等,都是[xxx:children]的形式,這個意思就是自由的組合這5個組。
加入我是生產環境的負責人,我手上有100臺服務器,那麼我會先計劃將這100臺機器分成5個類型。然後考慮openstack中哪些組件部署在哪種類型的節點上。
如nova是openstack的計算組件,我想把它安裝在control和compute類型的機器上,我就會寫
[nova:children]
control
compute
如horizon或者skyline是openstack的面板z組件,我就會把這些組件安裝在monitoring顯示類型的節點上。
[horizon:children]
monitoring
測試ansible和各個節點的連通性
ansible -i multinode all -m ping
-------------------------------------------
localhost | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python3"
},
"changed": false,
"ping": "pong"
}
manager | SUCCESS => {
"changed": false,
"ping": "pong"
}
compute1 | SUCCESS => {
"changed": false,
"ping": "pong"
}
storage1 | SUCCESS => {
"changed": false,
"ping": "pong"
}
配置kolla文件
# 創建kolla配置文件
mkdir -p /etc/kolla
chown -R $USER:$USER /etc/kolla
cp -r ~/venv3/share/kolla-ansible/etc_examples/kolla/* /etc/kolla
ls /etc/kolla
# 兩個文件globals.yml passwords.yml
# 生成密碼
kolla-genpwd
# 生成的密碼會自動寫入/etc/kolla/passwords.yml
# 編寫配置模板
cat << EOF > /etc/kolla/globals.yml --- kolla_base_distro: "ubuntu" kolla_install_type: "source" #使⽤基於源代碼的image openstack_release: "yoga" #該配置項最好與kolla-ansible分⽀版本保持⼀致 kolla_internal_vip_address: "10.0.0.250" # 找一個網段內沒有占用的ip # docker_registry: "10.0.0.203:5000" #指定私有registry network_interface: "enp1s0" # 內部openstack管理網段 neutron_external_interface: "enp6s0" enable_haproxy: "yes" enable_cinder: "yes" # 這一個是啟動cinder塊存儲並使用我們的VG enable_cinder_backend_lvm: "yes" nova_compute_virt_type: "qemu" #使⽤虛擬機部署時,該配置項必須改為qemu,默認值為kvm EOF
# 以上算作一行命令,從cat到EOF。複制時一起複制
什麼事VIP:我們能看到global.yml配置中有個kolla_internal_vip_address,這個VIP是所有組件endpoint使用的ip。說白了,openstack的每個組件交付形式都是對外提供一個URL,而所有組件URL的ip就是VIP。
官方文檔也是要求這個VIP必須有
openstack的各個組件依賴VIP才能相互通信
開始安裝
# 環境安裝,這一步會自動安裝docker
kolla-ansible -i ./multinode bootstrap-servers
# 參數預檢查
kolla-ansible -i ./multinode prechecks
# 下載openstack各個組件容器鏡像
kolla-ansible -i ./multinode pull
# 部署
kolla-ansible -i ./multinode deploy
# 遇到報錯,銷毀已安裝的環境
kolla-ansible -i ./multinode destroy --yes-i-really-really-mean-it
下圖是manager節點上的容器鏡像
openstack CLI和RC文件安裝
# CLI 客戶端安裝
pip install python-openstackclient -c https://releases.openstack.org/constraints/upper/master
# 生成RC文件
kolla-ansible post-deploy
. /etc/kolla/admin-openrc.sh
# 查看已經啟動的服務
openstack service list
+----------------------------------+-------------+----------------+
| ID | Name | Type |
+----------------------------------+-------------+----------------+
| 052da6e26e3b40169d7a98c25c3a3524 | heat | orchestration |
| 1021eeae32df41998452e5f568f9b37c | neutron | network |
| 121644d1ca2b4dcea4bf7307b67266f8 | heat-cfn | cloudformation |
| 349006301f34441dbcbd608e67f22595 | keystone | identity |
| 80f2041571584e7f9732bdf09439e7ec | placement | placement |
| 9350811e7bc0471ca193389095e8010a | nova | compute |
| a2a2040a434b4bd0bb596b8f261cb2af | nova_legacy | compute_legacy |
| adde91660a0f4a59b3cb0107008ffe48 | glance | image |
| f2246af5f4bc41e786c4f602d774e54d | cinderv3 | volumev3 |
+----------------------------------+-------------+----------------+
# 查看endpoint
openstack endpoint list
+----------------------------------+-----------+--------------+----------------+---------+-----------+-----------------------------------------+
| ID | Region | Service Name | Service Type | Enabled | Interface | URL |
+----------------------------------+-----------+--------------+----------------+---------+-----------+-----------------------------------------+
| 05ad7101f81443cfa8662501ebc6ac0b | RegionOne | cinderv3 | volumev3 | True | public | http://10.0.0.250:8776/v3/%(tenant_id)s |
| 09032bbcbe624484921942216030a0e8 | RegionOne | cinderv3 | volumev3 | True | internal | http://10.0.0.250:8776/v3/%(tenant_id)s |
| 0a142961c46a461ab97d76af86dc1d98 | RegionOne | glance | image | True | internal | http://10.0.0.250:9292 |
| 26d3381fe2e34cf09bd6f16cff1df777 | RegionOne | placement | placement | True | internal | http://10.0.0.250:8780 |
| 27131aea054544a296adffd746f4b8ec | RegionOne | nova | compute | True | internal | http://10.0.0.250:8774/v2.1 |
| 2be216627f994de9af3cdb194e04b99d | RegionOne | heat | orchestration | True | public | http://10.0.0.250:8004/v1/%(tenant_id)s |
| 30f4be49399e40a7a27188e04e0cc7e7 | RegionOne | heat | orchestration | True | internal | http://10.0.0.250:8004/v1/%(tenant_id)s |
| 361582326057467297a0602f851d3efa | RegionOne | glance | image | True | public | http://10.0.0.250:9292 |
| 363cef91256c492bb48bbc00035e17d6 | RegionOne | heat-cfn | cloudformation | True | public | http://10.0.0.250:8000/v1 |
| 3969900770c24ad8b8a01686359bba42 | RegionOne | neutron | network | True | internal | http://10.0.0.250:9696 |
| 62b1eb1b01ad4381b4ed27f45bf59fa3 | RegionOne | heat-cfn | cloudformation | True | internal | http://10.0.0.250:8000/v1 |
| 653db0f9fb1c41cfbda84ba1d4b05e2a | RegionOne | nova_legacy | compute_legacy | True | public | http://10.0.0.250:8774/v2/%(tenant_id)s |
| 73215e690046464ab291c52aade9fe52 | RegionOne | nova | compute | True | public | http://10.0.0.250:8774/v2.1 |
| 894360b84d18496ba6da655fc07d77e7 | RegionOne | placement | placement | True | public | http://10.0.0.250:8780 |
| 9bb87213428c46e89842d1ba3a69cfc6 | RegionOne | keystone | identity | True | admin | http://10.0.0.250:35357 |
| ae6ba80db41c4c41a523249cce2a08db | RegionOne | keystone | identity | True | internal | http://10.0.0.250:5000 |
| b1aba9e7b93a42b18610e0c069573db5 | RegionOne | neutron | network | True | public | http://10.0.0.250:9696 |
| c544455e03f045f9bcfc5a2cf3143e79 | RegionOne | keystone | identity | True | public | http://10.0.0.250:5000 |
| cbf4436955134a7493545fa4391b25ce | RegionOne | nova_legacy | compute_legacy | True | internal | http://10.0.0.250:8774/v2/%(tenant_id)s |
+----------------------------------+-----------+--------------+----------------+---------+-----------+-----------------------------------------+
Dashboard登錄
openstack的Dashboard組件有兩個,horizon(已經存在於多個版本中)和skyline(正在測試,沒有官方容器)
kolla安裝過程中會自動幫我們安裝一個全功能的horizon組件。
登錄網址:http://vip/auth/login/?next=/
比如本案例中就是http://10.0.0.250/auth/login/?next=/
但是我們還缺admin的密碼。
. /etc/kolla/admin-openrc.sh
env|grep OS_
OS_ENDPOINT_TYPE=internalURL
OS_REGION_NAME=RegionOne
OS_INTERFACE=internal
OS_AUTH_PLUGIN=password
OS_AUTH_URL=http://10.0.0.250:35357/v3
OS_PROJECT_DOMAIN_NAME=Default
OS_TENANT_NAME=admin
OS_USERNAME=admin
OS_USER_DOMAIN_NAME=Default
OS_PROJECT_NAME=admin
OS_PASSWORD=TdHUeHzlu1SVgZuMkKmBFDWZudyOMxcadJwmFNch # 這就是admin的密碼
OS_IDENTITY_API_VERSION=3
登錄成功
產生一個案例(可以不做)
~/venv3/share/kolla-ansible/init-runonce
边栏推荐
- 机器学习 05:非线性支持向量机
- cross entropy loss = log softmax + nll loss
- RIA ideas
- 使用Jedis監聽Redis Stream 實現消息隊列功能
- BOM document
- Feelings of virtual project failure
- About XXX management system (version C)
- DOM文档
- 自定义WebSerivce作为代理解决SilverLight跨域调用WebService问题
- Yunqi lab recommends experience scenarios this week, free cloud learning
猜你喜欢
转帖——不要迷失在技术的海洋中

pytorch(网络模型训练)

AutowiredAnnotationBeanPostProcessor什么时候被实例化的?

Red team scoring method statistics

5分钟包你学会正则表达式

Using Jenkins to perform testng+selenium+jsup automated tests and generate extendreport test reports

How to ensure the efficiency and real-time of pushing large-scale group messages in mobile IM?

Serious hazard warning! Log4j execution vulnerability is exposed!

Ribbon负载均衡服务调用

Fedora alicloud source
随机推荐
项目中止
Yunqi lab recommends experience scenarios this week, free cloud learning
Introduction to GUI programming to game practice (I)
[MySQL] MySQL million level data paging query method and its optimization
REUSE_ALV_GRID_DISPLAY 事件实现(DATA_CHANGED)
机器学习 05:非线性支持向量机
ZigBee explain in simple terms lesson 2 hardware related and IO operation
Wechat team sharing: technical decryption behind wechat's 100 million daily real-time audio and video chats
【MYSQL】MySQL 百万级数据量分页查询方法及其优化
[PHP] PHP two-dimensional array is sorted by multiple fields
Serious hazard warning! Log4j execution vulnerability is exposed!
Feelings of virtual project failure
cross entropy loss = log softmax + nll loss
uni-app吸顶固定样式
What management systems (Updates) for things like this
Recursively traverse directory structure and tree presentation
【C語言】深度剖析數據在內存中的存儲
Using Jenkins to perform testng+selenium+jsup automated tests and generate extendreport test reports
Consul服务注册与发现
DOM文档