kolla ansible部署openstack高可用集羣

環境信息

參考:https://docs.openstack.org/kolla-ansible/latest/user/quickstart.html

kolla安裝節點要求:

  • 2 network interfaces
  • 8GB main memory
  • 40GB disk space

本次部署train版openstack,kolla的安裝,要求目標機器是兩塊網卡,在vmware workstation新增一塊網卡:

  • ens33,NAT模式,管理網絡,租戶網絡與該網絡複用,正常配置靜態IP即可。
  • ens37,橋接模式,無需配置IP地址,這個其實是讓neutron的br-ex 綁定使用,虛擬機通過這塊網卡訪問外網。

節點規劃

  • 3個控制節點(網絡節點與控制節點合併),1計算節點+1個存儲節點(cinder lvm)
  • 第一個控制節點也作爲kolla-ansible部署節點
  • 控制節點和計算節點2塊網卡,存儲節點1塊網卡,網卡1NAT模式作爲管理網絡,網卡2橋接模式,作爲外部網絡。
  • 操作系統使用CentOS7.8 minimal,所有節點CPU內存配置爲2C4G。

節點及IP規劃

節點名稱 IP地址 角色
control01 ens33:192.168.93.61
ens37:
控制節點
control02 ens33:192.168.93.62
ens37:
控制節點
control03 ens33:192.168.93.63
ens37:
控制節點
compute01 ens33:192.168.93.64
ens37:
計算節點
storage01 ens33:192.168.93.65 存儲節點

如果啓用cinder還需要在storage01節點額外添加一塊磁盤,這裏以/dev/sdb爲例,在storage01節點執行

pvcreate /dev/sdb
vgcreate cinder-volumes /dev/sdb

注意卷組名稱爲cinder-volumes,默認與globals.yml一致。

[root@kolla ~]# cat /etc/kolla/globals.yml | grep cinder_volume_group
#cinder_volume_group: "cinder-volumes"

所有節點按照規劃配置IP地址

[root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=752fa178-bbb6-4ab3-84ee-aa86a34a16b4
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.93.61
PREFIX=24
GATEWAY=192.168.93.2
DNS1=114.114.114.114
DNS2=8.8.8.8
IPV6_PRIVACY=no

[root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens37
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens37
UUID=c1513435-9706-3d76-802b-00c4e901ee82
DEVICE=ens37
ONBOOT=yes
IPV6_PRIVACY=no

基本配置

無特殊說明,以下所有操作在kolla ansible部署節點執行,即control01節點。

安裝依賴

yum install -y python-devel libffi-devel gcc openssl-devel libselinux-python

安裝 Ansible

yum install -y ansible

配置阿里雲pip源

mkdir ~/.pip
cat > ~/.pip/pip.conf << EOF 
[global]
trusted-host=mirrors.aliyun.com
index-url=https://mirrors.aliyun.com/pypi/simple/
EOF

安裝 kolla-ansible

kolla版本與openstack版本對應關係:https://releases.openstack.org/teams/kolla.html

yum install -y epel-release
yum install -y python-pip
pip install -U pip
pip install kolla-ansible==9.1.0 --ignore-installed PyYAML

複製 kolla-ansible配置

mkdir -p /etc/kolla
chown $USER:$USER /etc/kolla

##Copy globals.yml and passwords.yml
cp -r /usr/share/kolla-ansible/etc_examples/kolla/* /etc/kolla

##Copy all-in-one and multinode inventory files
cp /usr/share/kolla-ansible/ansible/inventory/* .

修改ansible配置文件

$ vim /etc/ansible/ansible.cfg
[defaults]
host_key_checking=False
pipelining=True
forks=100

修改multinode inventory文件,其他默認即可

$ cat multinode
[control]
# These hostname must be resolvable from your deployment host
control01
control02
control03

[network]
control01
control02
control03

[compute]
compute01

[monitoring]
control01

[storage]
storage01
...

配置ssh免密

ssh-keygen
ssh-copy-id 192.168.93.61
ssh-copy-id 192.168.93.62
ssh-copy-id 192.168.93.63
ssh-copy-id 192.168.93.64
ssh-copy-id 192.168.93.65

配置主機名(所有節點)

hostnamectl set-hostname control01
hostnamectl set-hostname control02
hostnamectl set-hostname control03
hostnamectl set-hostname compute01
hostnamectl set-hostname storage01

配置主機名解析(預配置時kolla會配置主機名解析,這裏只在部署節點操作)

cat > /etc/hosts <<EOF
192.168.93.61 control01
192.168.93.62 control02
192.168.93.63 control03
192.168.93.64 compute01
192.168.93.65 storage01
EOF

檢查inventory配置是否正確,執行:

ansible -i multinode all -m ping

生成kolla密碼

kolla-genpwd

修改keystone_admin_password可以修改爲自定義,在登錄dashboard會用到

sed -i 's#keystone_admin_password:.*#keystone_admin_password: kolla#g' /etc/kolla/passwords.yml 

$ cat /etc/kolla/passwords.yml | grep keystone_admin_password
keystone_admin_password: kolla

修改全局配置文件globals.yml

cp /etc/kolla/globals.yml{,.bak}
cat >> /etc/kolla/globals.yml <<EOF

#version
kolla_base_distro: "centos"
kolla_install_type: "binary"
openstack_release: "train"

#vip
kolla_internal_vip_address: "192.168.93.200"

#docker registry
docker_registry: "registry.cn-shenzhen.aliyuncs.com"
docker_namespace: "kollaimage"

#network
network_interface: "ens33"
neutron_external_interface: "ens37"
neutron_plugin_agent: "openvswitch"
enable_neutron_provider_networks: "yes"

#storage
enable_cinder: "yes"
enable_cinder_backend_lvm: "yes"

#virt_type
nova_compute_virt_type: "qemu"
EOF

參數說明:

  • kolla_base_distro: kolla鏡像基於不同linux髮型版構建,主機使用centos這裏對應使用centos類型的docker鏡像即可。
  • kolla_install_type: kolla鏡像基於binary二進制和source源碼兩種類型構建,實際部署使用binary即可。
  • openstack_release: openstack版本可自定義,會從dockerhub拉取對應版本的鏡像
  • kolla_internal_vip_address: 單節點部署kolla也會啓用haproxy和keepalived,方便後續擴容爲高可用集羣,該地址是ens33網卡網絡中的一個可用IP。
  • docker_registry: 默認從dockerhub拉取鏡像,這裏使用阿里雲鏡像倉庫,也可以本地搭建倉庫,提前推送鏡像上去。但該倉庫目前只有train和ussuri版本的鏡像,如何自己推送鏡像參考該博客的其他文章。
  • docker_namespace: 阿里雲kolla鏡像倉庫所在的命名空間,dockerhub官網默認是kolla。
  • network_interface: 管理網絡的網卡
  • neutron_external_interface: 外部網絡的網卡
  • neutron_plugin_agent: 默認啓用openvswitch
  • enable_neutron_provider_networks: 啓用外部網絡
  • enable_cinder: 啓用cinder
  • enable_cinder_backend_lvm: 指定cinder後端存儲爲lvm
  • nova_compute_virt_type: 由於使用vmware安裝,要改爲qemu,否則創建虛擬機失敗,生產部署默認使用kvm。

修改docker官方yum源爲阿里雲yum源,另外配置docker鏡像加速,指定使用阿里雲鏡像加速。

$ vim /usr/share/kolla-ansible/ansible/roles/baremetal/defaults/main.yaml
docker_yum_url: "https://mirrors.aliyun.com/docker-ce/linux/{{ ansible_distribution | lower }}"
docker_custom_config: {"registry-mirrors": ["https://uyah70su.mirror.aliyuncs.com"]}

部署openstack

在運行bootstrap-servers時會執行easy_install pip命令安裝pip,如果網絡較慢可能任務一直卡在這裏,可以提前在所有節點手動安裝pip(可選)。

mkdir ~/.pip
cat > ~/.pip/pip.conf << EOF 
[global]
trusted-host=mirrors.aliyun.com
index-url=https://mirrors.aliyun.com/pypi/simple/
EOF

yum install -y epel-release
yum install -y python-pip
pip install -U pip

開始部署openstack

kolla-ansible -i ./multinode bootstrap-servers

#部署檢查
kolla-ansible -i ./multinode prechecks

#拉取鏡像
kolla-ansible -i ./multinode pull

#執行部署
kolla-ansible -i ./multinode deploy

OpenStack客戶端

生成openrc文件,該文件中設置了管理員用戶的憑據

kolla-ansible post-deploy

cat /etc/kolla/admin-openrc.sh

使用docker作爲openstack客戶端

docker pull registry.cn-shenzhen.aliyuncs.com/kollaimage/centos-binary-openstack-base:train

kolla ansible部署節點啓動一個臨時容器:

docker run -d --name client \
  --restart always \
  -v /etc/kolla/admin-openrc.sh:/admin-openrc.sh:ro \
  -v /usr/share/kolla-ansible/init-runonce:/init-runonce:rw \
  registry.cn-shenzhen.aliyuncs.com/kollaimage/centos-binary-openstack-base:train sleep infinity

進入容器即可執行openstack命令

[root@control01 ~]# docker exec -it client bash
()[root@7863d16d6839 /]#  source /admin-openrc.sh
()[root@7863d16d6839 /]# openstack service list
+----------------------------------+-------------+----------------+
| ID                               | Name        | Type           |
+----------------------------------+-------------+----------------+
| 2ab6a571b71444adb69f10d18a876c55 | keystone    | identity       |
| 4b0ea157a8dc4ef5adc720dda56902ce | cinderv2    | volumev2       |
| 57b38f38444949f98e6f3ed46b5a24e6 | cinderv3    | volumev3       |
| 84431d0e3727426f82faf4a9bb898045 | heat        | orchestration  |
| 8a8675bc425a45ac9e83140b18a8c864 | nova_legacy | compute_legacy |
| b54c859fa8214ca68bb5002e5e58ade2 | glance      | image          |
| b9adda688c024c56aace1902340cadf7 | heat-cfn    | cloudformation |
| c301474681f74271a39b74d29899d7ee | nova        | compute        |
| c3fb659dea224e3ab8655f77976cc98f | placement   | placement      |
| edfa32d4099a435397497b19b055fd10 | neutron     | network        |
+----------------------------------+-------------+----------------+

kolla提供了一個快速創建demo實例的腳本,修改init-runonce示例腳本外部網絡配置。

()[root@7863d16d6839 /]#  vi init-runonce
# This EXT_NET_CIDR is your public network,that you want to connect to the internet via.
ENABLE_EXT_NET=${ENABLE_EXT_NET:-1}
EXT_NET_CIDR=${EXT_NET_CIDR:-'192.168.1.0/24'}
EXT_NET_RANGE=${EXT_NET_RANGE:-'start=192.168.1.200,end=192.168.1.250'}
EXT_NET_GATEWAY=${EXT_NET_GATEWAY:-'192.168.1.1'}

()[root@7863d16d6839 /]#  bash init-runonce

參數說明:

  • EXT_NET_CIDR 指定外部網絡,由於使用橋接模式,直接橋接到了電腦的無線網卡,所以這裏網絡就是無線網卡的網段。
  • EXT_NET_RANGE 指定從外部網絡取出一個地址範圍,作爲外部網絡的地址池
  • EXT_NET_GATEWAY 外部網絡網關,這裏與wifi網絡使用的網關一致

該腳本首先會從github下載cirros鏡像,如果網絡較慢可以提前下載到cache目錄

docker exec -it client mkdir -p /opt/cache/files/
wget https://github.com/cirros-dev/cirros/releases/download/0.4.0/cirros-0.4.0-x86_64-disk.img
docker cp cirros-0.4.0-x86_64-disk.img client:/opt/cache/files/

腳本執行完後根據提示運行一個cirros實例

openstack server create \
    --image cirros \
    --flavor m1.tiny \
    --key-name mykey \
    --network demo-net \
    demo1

訪問horizon

在3個control節點查找vip地址

[root@control03 ~]# ip a | grep ens33
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    inet 192.168.93.63/24 brd 192.168.93.255 scope global noprefixroute ens33
    inet 192.168.93.200/32 scope global ens33

瀏覽器訪問:http://192.168.93.200,用戶名密碼在admin-openrc.sh中可以找到,這裏默認是admin/kolla

cat /admin-openrc.sh

查看網絡拓撲
在這裏插入圖片描述

爲實例分配浮動IP
在這裏插入圖片描述
連接到實例,驗證訪問外網,cirros鏡像默認賬號密碼爲cirros/gocubsgo

[root@control01 ~]# ssh [email protected]
[email protected]'s password:
$
$
$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc pfifo_fast qlen 1000
    link/ether fa:16:3e:e4:16:00 brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.74/24 brd 10.0.0.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::f816:3eff:fee4:1600/64 scope link
       valid_lft forever preferred_lft forever
$
$ ping -c 4 www.openstack.org
PING www.openstack.org (104.20.110.33): 56 data bytes
64 bytes from 104.20.110.33: seq=1 ttl=53 time=178.064 ms
64 bytes from 104.20.110.33: seq=2 ttl=53 time=177.797 ms
64 bytes from 104.20.110.33: seq=3 ttl=53 time=178.392 ms

--- www.openstack.org ping statistics ---
4 packets transmitted, 3 packets received, 25% packet loss
round-trip min/avg/max = 177.797/178.084/178.392 ms

配置文件目錄

各個組件配置文件目錄: /etc/kolla/

各個組件日誌文件目錄:/var/log/kolla/

清理集羣

kolla-ansible destroy --include-images --yes-i-really-really-mean-it
vgremove cinder-volume
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章