Kolla-ansible部署openStack

FuShudi發表於2024-07-13

目錄
  • Kolla-ansible部署openStack
    • 1. 簡介
    • 2. 環境準備
    • 3. 部署
      • 3.1 基礎環境配置
        • 3.1.1 配置主機名,所有節點操作,這裡以openstack01為例
        • 3.1.2 新增hosts
        • 3.1.3 配置免密登入
        • 3.1.4 關閉防火牆以及selinux
        • 3.1.5 設定yum源
        • 3.1.6 安裝docker
      • 3.2 配置kolla-ansible
        • 3.2.1 安裝相關依賴
        • 3.2.2 部署kolla-ansible
        • 3.2.3 配置所有節點的python依賴
        • 3.2.4 執行kolla-ansible的部署
      • 3. 登入dashboard
    • 4. 執行初始化

Kolla-ansible部署openStack

部署的版本是openStack2024.1

1. 簡介

kolla是openstack官方開發的一套基於docker部署openstack的工具,旨在為openstack提供生產級別的、開箱即用的交付能力。

kolla的基本思想是一切皆容器,將所有服務基於docker執行,並且保證一個容器只跑一個服務。

kolla分為如下兩個專案:

  • kolla:製作部署openstack所需的docker映象
  • kolla-ansible:基於ansible+docker部署openstack

使用kolla部署openstack的優勢:

  • 基於ansible和docker,部署快速穩定
  • 一個容器一個服務,可以將openstack服務控制到很小的粒度
  • 可以以元件為單位進行升級和回滾,例如可透過kolla-ansible -i /path/to/inventory -t nova upgrade 指令完成nova的快速升級
  • 目前 kolla 專案在社群內的熱度相對較高,社群支援更好

2. 環境準備

主機名 網路卡名/型別 IP地址
openstack01 ens33 NAT
ens34 NAT
ens33: 192.168.200.130
ens34: IP留空
openstack02 ens33 NAT
ens34 NAT
ens33: 192.168.200.133
ens34 :IP留空
openstack03 ens33 NAT
ens34 NAT
ens33: 192.168.200.134
ens34: IP留空

需要說明的是,在這個環境當中配置一個控制節點,兩個計算節點

3. 部署

3.1 基礎環境配置

3.1.1 配置主機名,所有節點操作,這裡以openstack01為例

[root@localhost ~]# hostnamectl set-hostname openstack01
[root@localhost ~]# bash

3.1.2 新增hosts

# 在部署節點上新增所有節點的hosts
192.168.200.130 openstack01
192.168.200.133 openstack02
192.168.200.134 openstack03

# 非部署節點只需要新增自己的主機名解析即可,如下為openstack02的配置
192.168.10.10 openstack02

3.1.3 配置免密登入

在部署節點上配置對所有節點的免密訪問,只需要在openstack01上做

[root@openstack01 ~]# ssh-keygen
[root@openstack01 ~]# ssh-copy-id openstack01
[root@openstack01 ~]# ssh-copy-id openstack02
[root@openstack01 ~]# ssh-copy-id openstack03

3.1.4 關閉防火牆以及selinux

所有節點都做

[root@openstack01 ~]# systemctl disable --now firewalld
[root@openstack01 ~]# setenforce 0
[root@openstack01 ~]# sed -i 's/SELINUX=/SELINUX=disabled/g' /etc/selinux/config

3.1.5 設定yum源

我使用的是尤拉,這一步可以不做,其他的linux需要安裝epel源

[root@openstack01 ~]# yum install epel-release -y

3.1.6 安裝docker

因為kolla-ansible是將各個元件部署在容器內的,所以需要安裝docker

[root@openstack01 ~]# dnf install -y yum-utils device-mapper-persistent-data lvm2 -y
[root@openstack01 ~]#  wget -O /etc/yum.repos.d/docker-ce.repo https://repo.huaweicloud.com/docker-ce/linux/centos/docker-ce.repo
[root@openstack01 ~]# yum install docker-ce -y

如果是尤拉系統,這裡就直接yum install docker -y就可以了,尤拉的源自帶了docker

3.2 配置kolla-ansible

3.2.1 安裝相關依賴

需要在每個節點上執行

[root@openstack01 ~]# dnf install git python3-devel libffi-devel gcc openssl-devel python3-libselinux -y

3.2.2 部署kolla-ansible

啟用python虛擬環境

[root@openstack01 ~]# python3 -m venv .venv/kolla
[root@openstack01 ~]# source ~/.venv/kolla/bin/activate 

後續的操作在這個虛擬環境中執行

安裝kolla-ansible

(kolla) [root@openstack01 ~]# pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
(kolla) [root@openstack01 ~]# pip3 install -U pip
(kolla) [root@openstack01 ~]# pip3 install 'ansible-core>=2.15,<2.16.99'
(kolla) [root@openstack01 ~]# pip3 install kolla-ansible

# 安裝galaxy依賴
(kolla) [root@openstack01 ~]# kolla-ansible install-deps

下載kolla-ansible的原始碼

(kolla) [root@openstack01 ~]# git clone https://github.com/openstack/kolla-ansible.git
(kolla) [root@openstack01 ~]# cd kolla-ansible
(kolla) [root@openstack01 kolla-ansible]# git checkout stable/2024.1

生成配置檔案

(kolla) [root@openstack01 kolla-ansible]# mkdir /etc/kolla
(kolla) [root@openstack01 kolla-ansible]# cd 
(kolla) [root@openstack01 ~]# cp kolla-ansible/etc/kolla/* /etc/kolla/
(kolla) [root@openstack01 ~]# cp kolla-ansible/ansible/inventory/multinode /etc/kolla

修改inventory檔案

(kolla) [root@openstack01 ~]# vim /etc/kolla/multinode
[control]
openstack01
openstack02
openstack03

[network]
openstack01
openstack02
openstack03

[compute]
openstack01
openstack02
openstack03

[monitoring]
openstack01

[storage]
openstack01
openstack02
openstack03

只改動這些,其他的配置不動就可以了

修改globals.yml檔案

(kolla) [root@openstack01 ~]# vim /etc/kolla/globals.yml
node_config: "/etc/kolla"   # 自行新增
kolla_base_distro: "rocky"
openstack_release: "2024.01"
node_custom_config: "{{ node_config }}/config"
kolla_internal_vip_address: "192.168.200.150"
docker_registry: quay.nju.edu.cn
network_interface: "ens33"
neutron_external_interface: "ens34"
neutron_plugin_agent: "openvswitch"
enable_openstack_core: "yes"
enable_hacluster: "no"
enable_haproxy: "yes"
enable_keepalived: "{{ enable_haproxy | bool }}"
enable_cinder: "no"
enable_cinder_backend_nfs: "no"
cinder_volume_group: "cinder-volumes"
nova_compute_virt_type: "kvm"
  • kolla_base_distro:openstack的元件映象使用的基礎映象
  • openstack_release:openstack版本
  • node_custome_config: 自定義配置檔案的路徑
  • kolla_internal_vip_address:在controller多機部署的場景,多個controller會開啟haproxy+keepalived實現負載均衡,這裡需要配置為keepalived的vip, 如果是單controller的場景,這裡的地址為controller節點的ip地址,此時需要設定enable_haproxy選項為no
  • docker_registry:預設情況下,openstack的映象會從quay.io官方倉庫拉取,速度很慢,這裡使用的是國內的映象站
  • docker_namespace:指定映象倉庫中用於儲存這些映象的namespace
  • network_interface:管理網路的介面
  • neutron_external_interface:neutron使用的外部網路的介面, 此介面不應該配置ip地址
  • neutron_plugin_agent:指定neutron使用的網路外掛
  • enable_openstack_core:是否部署openstack的核心服務,此項應為yes
  • enable_hacluster:是否開啟虛擬機器的故障遷移(當虛擬機器所在物理機出現故障時,自動遷移虛擬機器)
  • enable_haproxy:如果controller有多個節點,這裡應該設定為yes,同時kolla_internal_vip_address應該設定為vip地址
  • enble_cinder:是否開啟cinder
  • enable_cinder_backend_nfs:指定cinder後端儲存為nfs,如果開啟了cinder,則必須指定一種backend,支援lvm、nfs、ceph等
  • cinder_volume_group:此項只在cinder為yes且cinder的儲存驅動設定為lvm時有效
  • nova_compute_virt_type:指定nova compute所使用的虛擬化型別

接下來填充密碼檔案

(kolla) [root@openstack01 ~]# kolla-genpwd

3.2.3 配置所有節點的python依賴

kolla-ansible部署openstack,在所有openstack節點上需要部署相應的python依賴包。這些依賴包可以從部署節點上獲得:

(kolla) [root@openstack01 ~]# pip3 freeze > /tmp/requirements.txt

從/tmp/requirements.txt中刪除如下2行(其他節點不需要安裝ansible和kolla-ansible):

ansible-core==2.15.12
kolla-ansible==18.0.0

將以上2行刪除,然後將這個檔案複製到其他節點來安裝

(kolla) [root@openstack01 ~]# scp /tmp/requirements.txt openstack02:/tmp
(kolla) [root@openstack01 ~]# scp /tmp/requirements.txt openstack03:/tmp

需要說明的是,這些包需要在所有節點安裝,包括控制節點。且不可以安裝在python虛擬環境中:

# 退出虛擬環境
(kolla) [root@openstack01 ~]# deactivate 
[root@openstack01 ~]# pip3 install -r /tmp/requirements.txt
[root@openstack02 ~]# pip3 install -r /tmp/requirements.txt
[root@openstack03 ~]# pip3 install -r /tmp/requirements.txt

3.2.4 執行kolla-ansible的部署

(kolla) [root@openstack01 ~]# cd /etc/kolla
# 安裝依賴
(kolla) [root@openstack01 kolla]# kolla-ansible -i ./multinode bootstrap-servers
# 前置檢查
(kolla) [root@openstack01 kolla]# kolla-ansible -i ./multinode prechecks
# 拉取映象
(kolla) [root@openstack01 kolla]# kolla-ansible -i ./multinode pull
# 執行部署
(kolla) [root@openstack01 kolla]# kolla-ansible -i ./multinode deploy
# 部署完後執行
(kolla) [root@openstack01 kolla]# kolla-ansible -i ./multinode post-deploy

如果在執行拉取映象的時候非常慢,或者直接卡住了,可以將其打斷,自行拉取,因為它使用ansible拉取映象我麼看不見進度條,我們可以自行編寫指令碼來拉取

(kolla) [root@openstack01 kolla]# vim images_pull.sh
docker pull quay.nju.edu.cn/openstack.kolla/neutron-server:2024.1-rocky-9
docker pull quay.nju.edu.cn/openstack.kolla/nova-compute:2024.1-rocky-9
docker pull quay.nju.edu.cn/openstack.kolla/neutron-dhcp-agent:2024.1-rocky-9
docker pull quay.nju.edu.cn/openstack.kolla/neutron-metadata-agent:2024.1-rocky-9
docker pull quay.nju.edu.cn/openstack.kolla/neutron-openvswitch-agent:2024.1-rocky-9
docker pull quay.nju.edu.cn/openstack.kolla/neutron-l3-agent:2024.1-rocky-9
docker pull quay.nju.edu.cn/openstack.kolla/heat-api:2024.1-rocky-9
docker pull quay.nju.edu.cn/openstack.kolla/heat-engine:2024.1-rocky-9
docker pull quay.nju.edu.cn/openstack.kolla/heat-api-cfn:2024.1-rocky-9
docker pull quay.nju.edu.cn/openstack.kolla/nova-novncproxy:2024.1-rocky-9
docker pull quay.nju.edu.cn/openstack.kolla/nova-conductor:2024.1-rocky-9
docker pull quay.nju.edu.cn/openstack.kolla/nova-ssh:2024.1-rocky-9
docker pull quay.nju.edu.cn/openstack.kolla/nova-api:2024.1-rocky-9
docker pull quay.nju.edu.cn/openstack.kolla/keystone-fernet:2024.1-rocky-9
docker pull quay.nju.edu.cn/openstack.kolla/nova-scheduler:2024.1-rocky-9
docker pull quay.nju.edu.cn/openstack.kolla/keystone:2024.1-rocky-9
docker pull quay.nju.edu.cn/openstack.kolla/keystone-ssh:2024.1-rocky-9
docker pull quay.nju.edu.cn/openstack.kolla/horizon:2024.1-rocky-9
docker pull quay.nju.edu.cn/openstack.kolla/placement-api:2024.1-rocky-9
docker pull quay.nju.edu.cn/openstack.kolla/kolla-toolbox:2024.1-rocky-9
docker pull quay.nju.edu.cn/openstack.kolla/openvswitch-db-server:2024.1-rocky-9
docker pull quay.nju.edu.cn/openstack.kolla/openvswitch-vswitchd:2024.1-rocky-9
docker pull quay.nju.edu.cn/openstack.kolla/mariadb-server:2024.1-rocky-9
docker pull quay.nju.edu.cn/openstack.kolla/mariadb-clustercheck:2024.1-rocky-9
docker pull quay.nju.edu.cn/openstack.kolla/nova-libvirt:2024.1-rocky-9
docker pull quay.nju.edu.cn/openstack.kolla/cron:2024.1-rocky-9
docker pull quay.nju.edu.cn/openstack.kolla/keepalived:2024.1-rocky-9
docker pull quay.nju.edu.cn/openstack.kolla/memcached:2024.1-rocky-9
docker pull quay.nju.edu.cn/openstack.kolla/haproxy:2024.1-rocky-9
docker pull quay.nju.edu.cn/openstack.kolla/fluentd:2024.1-rocky-9
docker pull quay.nju.edu.cn/openstack.kolla/glance-api:2024.1-rocky-9
docker pull quay.nju.edu.cn/openstack.kolla/rabbitmq:2024.1-rocky-9

然後賦予這個檔案執行許可權,再執行,他就會開始拉取映象,這個我們是可以看的見進度的

(kolla) [root@openstack01 kolla]# chmod +x image_pull.sh
(kolla) [root@openstack01 kolla]# ./image_pull.sh

等到他拉取完成之後再去執行部署,部署完成之後執行kolla-ansible -i ./multinode post-deploy這個命令生成密碼檔案

(kolla) [root@openstack01 ~]# kolla-ansible -i ./multinode post-deploy

3. 登入dashboard

登入之前我們得先知道密碼,而密碼檔案就在/etc/kolla/clouds.yaml這裡面會有全部的密碼

admin-openec.sh這裡面會有admin的密碼,我們檢視這個檔案就可以

[root@openstack01 kolla]# cat /etc/kolla/admin-openrc.sh 
# Ansible managed

# Clear any old environment that may conflict.
for key in $( set | awk '{FS="="}  /^OS_/ {print $1}' ); do unset $key ; done
export OS_PROJECT_DOMAIN_NAME='Default'
export OS_USER_DOMAIN_NAME='Default'
export OS_PROJECT_NAME='admin'
export OS_TENANT_NAME='admin'
export OS_USERNAME='admin'
export OS_PASSWORD='jjLYD6R82pEDu4xlbUMRkynJX1Xv6wpfpqSxeRWl'
export OS_AUTH_URL='http://192.168.200.150:5000'
export OS_INTERFACE='internal'
export OS_ENDPOINT_TYPE='internalURL'
export OS_IDENTITY_API_VERSION='3'
export OS_REGION_NAME='RegionOne'
export OS_AUTH_PLUGIN='password'

jjLYD6R82pEDu4xlbUMRkynJX1Xv6wpfpqSxeRWl 這個就是我們的密碼了,現在去瀏覽器登入

在瀏覽器我們輸入VIP就可以直接進入這個頁面,輸入使用者名稱admin和剛剛檢視的密碼就可以登入

4. 執行初始化

# 安裝python-openstackclient
(kolla) [root@openstack01 ~]# pip3 install python-openstackclient
# 執行初始化
. kolla-ansible/tools/init-runonce

相關文章