# 硬件环境准备
1. 最少节点个数3个
2. 最低配置8C/16G/100G测试环境
3. 最低网卡个数2个
4. 磁盘个数,每台节点上3块空余的盘,用作ceph,大小无所谓(测试环境)
5. centos操作系统,最好使用目前最新系统centos7.7
6. 系统能够访问外部网络
# 安装 kolla-ansible 前的准备
1. 关闭selinux和firewalld(所有节点)
2. 修改对应的host和ip地址(control01)
[root@control01 ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
10.211.55.13 control01
10.211.55.14 control02
10.211.55.15 control03
3. 在control01节点上安装 epel
sudo yum install epel-release -y
4. 安装python依赖(control01)
sudo yum install -y python-devel libffi-devel gcc openssl-devel libselinux-python
5. 安装ansible(2.5+版本)(control01节点上)
- 目前 kolla 已经不再支持 2.5 以下的 ansible 的版本
yum install -y python-pip //安装pip
pip install -U pip //确保使用最新的pip
pip install ansible //安装ansible
- 国内 pip 安装速度较慢的话,可以使用国内的 pip 源
pip install ansible -i https://pypi.tuna.tsinghua.edu.cn/simple
6. 验证ansible版本
[root@control01 ~]# ansible --version
ansible 2.8.2
config file = None
configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
ansible python module location = /usr/lib/python2.7/site-packages/ansible
executable location = /usr/bin/ansible
python version = 2.7.5 (default, Jun 20 2019, 20:27:34) [GCC 4.8.5 20150623 (Red Hat 4.8.5-36)]
7. 设置deploy节点(control01)免密登录其他的节点
- 首先创建临时host文件,内容为所有的节点主机名
[root@control01 ~]# cat host
control01
control02
control03
- 生成ssh公钥(control01)
[root@control01 ~]# ssh-keygen //一直回车即可
- 批量设置免密(control01)
[root@control01 ~]# ssh-copy-id root@control01
[root@control01 ~]# ssh-copy-id root@control02
[root@control01 ~]# ssh-copy-id root@control03
- 测试免密是否通过
[root@control01 ~]# ansible all -i ~/host -m ping
8. 拷贝hosts文件到其他的节点上
ansible all -i ~/host -m copy -a "src=/etc/hosts dest=/etc/hosts"
# 安装 kolla-ansible 工具
1. 本次安装最新的发布版本 stein 版本,所以我们使用 stein 版本的 kolla-ansible
2. 如果操作系统没有安装 git 需要首先安装 git
yum install -y git
3. 之后克隆 kolla-ansible 的代码
git clone https://github.com/openstack/kolla-ansible.git -b stable/stein
4. 该步骤如果克隆较慢,可以自己下载压缩包,或者配置 git 代理
[root@openstack-allinone kolla-ansible]# git branch //检查分支
* stable/stein
[root@openstack-allinone kolla-ansible]# pwd
/root/kolla-ansible
[root@openstack-allinone kolla-ansible]#
5. 安装 kolla-ansible
cd ~/kolla-ansible
pip install . -i https://pypi.tuna.tsinghua.edu.cn/simple
6. 创建配置文件目录
sudo mkdir -p /etc/kolla
sudo chown $USER:$USER /etc/kolla
7. 拷贝 globals.yml 和 passwords.yml 文件到 /etc/kolla 目录下
cp -r /usr/share/kolla-ansible/etc_examples/kolla/* /etc/kolla
8. 拷贝 allinone 和 mutinode 文件到当前家目录下
cp /usr/share/kolla-ansible/ansible/inventory/* ~/
# 部署 OpenStack 前的配置
1. 修改multinode文件
vi ~/multinode
[control]
# These hostname must be resolvable from your deployment host
control01
control02
control03
# The above can also be specified as follows:
#control[01:03] ansible_user=kolla
# The network nodes are where your l3-agent and loadbalancers will run
# This can be the same as a host in the control group
[network]
control01
control02
control03
[compute]
control01
control02
control03
[monitoring]
#monitoring01
# When compute nodes and control nodes use different interfaces,
# you need to comment out "api_interface" and other interfaces from the globals.yml
# and specify like below:
#compute01 neutron_external_interface=eth0 api_interface=em1 storage_interface=em1tunnel_interface=em1
[storage]
control01
control02
control03
2. 修改globals.yml文件
vi /etc/kolla/globals.yml
修改如下选项
kolla_install_type: "source"
openstack_release: "stein"
kolla_internal_vip_address: "10.211.55.200" //这个ip需要是管理网同一个网段的
network_interface: "eth0"
neutron_external_interface: "eth1"
enable_cinder: "yes"
enable_ceph: "yes"
enable_ceph_dashboard: "no"
......其他的默认即可
enable_neutron_provider_networks: "yes" //如果开启octavia,最好开启neutron的二层网络功能,否则octavia的boot_network不好处理。
ceph_osd_store_type: "filestore" //在文件中添加该行,默认是bulesotre
3. 准备ceph
- 查看要被ceph使用的盘,本例是sdb sdc sdd
[root@control01 kolla-ansible]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 100G 0 disk
├─sda1 8:1 0 500M 0 part /boot
└─sda2 8:2 0 99.5G 0 part
├─VolGroup-lv_root 253:0 0 50G 0 lvm /
├─VolGroup-lv_swap 253:1 0 2G 0 lvm [SWAP]
└─VolGroup-lv_home 253:2 0 47.6G 0 lvm /home
sdb 8:16 0 10G 0 disk
sdc 8:32 0 10G 0 disk
sdd 8:48 0 10G 0 disk
sr0 11:0 1 119.3M 0 rom
sr1 11:1 1 918M 0 rom
- 给磁盘打上标签(在所有的存储节点上)
parted /dev/sdb -s -- mklabel gpt mkpart KOLLA_CEPH_OSD_BOOTSTRAP 1 -1
parted /dev/sdc -s -- mklabel gpt mkpart KOLLA_CEPH_OSD_BOOTSTRAP 1 -1
parted /dev/sdd -s -- mklabel gpt mkpart KOLLA_CEPH_OSD_BOOTSTRAP 1 -1
```
- 检查磁盘是否打标记成功,检查是否多一个分区
[root@control01 kolla-ansible]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 100G 0 disk
├─sda1 8:1 0 500M 0 part /boot
└─sda2 8:2 0 99.5G 0 part
├─VolGroup-lv_root 253:0 0 50G 0 lvm /
├─VolGroup-lv_swap 253:1 0 2G 0 lvm [SWAP]
└─VolGroup-lv_home 253:2 0 47.6G 0 lvm /home
sdb 8:16 0 10G 0 disk
└─sdb1 8:17 0 10G 0 part
sdc 8:32 0 10G 0 disk
└─sdc1 8:33 0 10G 0 part
sdd 8:48 0 10G 0 disk
└─sdd1 8:49 0 10G 0 part
sr0 11:0 1 119.3M 0 rom
sr1 11:1 1 918M 0 rom
# 部署 openstack
1. 执行 bootstrap,会安装 docker 一类所需要的工具(control01节点上)
kolla-ansible -i ~/multinode bootstrap-servers
2. 确认cpu是否支持硬件虚拟化(control01)
grep -E 'svm|vmx' /proc/cpuinfo
#如果有回显,则下面的操作不需要,如果没有回显,说明cpu不支持硬件虚拟化,需要修改virt_type
mkdir -p /etc/kolla/config/nova
cat << EOF > /etc/kolla/config/nova/nova-compute.conf
[libvirt]
virt_type=qemu
cpu_mode = none
EOF
3. docker 是从 docker hub 上面 pull openstack 镜像,国内的环境有点慢,所以这里配置了 docker 加速,当然也可以不配置这个步骤(所有节点)
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://registry.docker-cn.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
4. 生成 kolla 密码
kolla-genpwd
5. 执行 precheck
kolla-ansible -i ~/multinode prechecks
6. 执行 pull(可以不执行,deploy 的时候会自动 pull)
kolla-ansible -i ~/multinode pull
7. 执行deploy
kolla-ansible -i ~/multinode deploy
# 调整 ceph
1. 查看ceph状态
[root@control01 ~]# docker exec ceph_mon ceph -s
cluster:
id: 8b0dd7b5-da1e-434c-bbc2-aa1963c3bdaf
health: HEALTH_WARN
too few PGs per OSD (10 < min 30)
services:
mon: 3 daemons, quorum 10.211.55.13,10.211.55.14,10.211.55.15 (age 44m)
mgr: control01(active, since 44m), standbys: control02,control03
osd: 9 osds: 9 up (since 43m), 9 in (since 43m)
data:
pools: 4 pools, 32 pgs
objects: 0 objects, 0 B
usage: 9.0 GiB used, 81 GiB / 90 GiB avail
pgs: 32 active+clean
2. 计算pg数
- 参考[ceph官网的pg计算器](https://ceph.com/pgcalc/),调整`pg_num`和`pgp_num`
- 
[root@control01 ~]# docker exec -it -u root ceph_mon bash
(ceph-mon)[root@control01 /]# ceph osd pool set images pg_num 128
set pool 1 pg_num to 128
(ceph-mon)[root@control01 /]# ceph osd pool set images pgp_num 128
set pool 1 pgp_num to 128
(ceph-mon)[root@control01 /]# ceph osd pool set volumes pg_num 128
set pool 2 pg_num to 128
(ceph-mon)[root@control01 /]# ceph osd pool set volumes pgp_num 128
set pool 2 pgp_num to 128
(ceph-mon)[root@control01 /]# ceph osd pool set backups pg_num 32
set pool 3 pg_num to 32
(ceph-mon)[root@control01 /]# ceph osd pool set backups pgp_num 32
set pool 3 pgp_num to 32
(ceph-mon)[root@control01 /]# ceph osd pool set vms pg_num 32
set pool 4 pg_num to 32
(ceph-mon)[root@control01 /]# ceph osd pool set vms pgp_num 32
set pool 4 pgp_num to 32
(ceph-mon)[root@control01 /]# ceph -s
cluster:
id: 8b0dd7b5-da1e-434c-bbc2-aa1963c3bdaf
health: HEALTH_OK
services:
mon: 3 daemons, quorum 10.211.55.13,10.211.55.14,10.211.55.15 (age 52m)
mgr: control01(active, since 52m), standbys: control02, control03
osd: 9 osds: 9 up (since 51m), 9 in (since 51m)
data:
pools: 4 pools, 320 pgs
objects: 0 objects, 0 B
usage: 9.1 GiB used, 81 GiB / 90 GiB avail
pgs: 320 active+clean
(ceph-mon)[root@control01 /]#
# 使用 openstack
1. 安装openstack client
pip install python-openstackclient -i https://pypi.tuna.tsinghua.edu.cn/simple
2. 生成admin-rc文件
kolla-ansible -i ~/multinode post-deploy
默认是生成的文件名是: /etc/kolla/admin-openrc.sh
# 配置 octavia
1. 克隆octavia仓库
git clone https://github.com/openstack/octavia.git -b stable/stein
2. 创建证书
[root@control01 ~]# cd octavia/
[root@control01 ~]# grep octavia_ca /etc/kolla/passwords.yml
octavia_ca_password: OgY7o4XSLqRIrEWkQOJPeuGeDZgMI8zpyYPIlxvE
[root@control01 octavia]# sed -i 's/foobar/OgY7o4XSLqRIrEWkQOJPeuGeDZgMI8zpyYPIlxvE/g' bin/create_certificates.sh
[root@control01 octavia]# ./bin/create_certificates.sh cert $(pwd)/etc/certificates/openssl.cnf
- 之后会得到一个cert文件夹
[root@control01 octavia]# ls -al cert/
总用量 60
drwxr-xr-x. 4 root root 4096 7月 22 02:45 .
drwxr-xr-x. 19 root root 4096 7月 22 02:45 ..
-rw-r--r--. 1 root root 1294 7月 22 02:45 ca_01.pem
-rw-r--r--. 1 root root 989 7月 22 02:45 client.csr
-rw-r--r--. 1 root root 1704 7月 22 02:45 client.key
-rw-r--r--. 1 root root 4405 7月 22 02:45 client-.pem
-rw-r--r--. 1 root root 6109 7月 22 02:45 client.pem
-rw-r--r--. 1 root root 71 7月 22 02:45 index.txt
-rw-r--r--. 1 root root 21 7月 22 02:45 index.txt.attr
-rw-r--r--. 1 root root 0 7月 22 02:45 index.txt.old
drwxr-xr-x. 2 root root 4096 7月 22 02:45 newcerts
drwx------. 2 root root 4096 7月 22 02:45 private
-rw-r--r--. 1 root root 3 7月 22 02:45 serial
-rw-r--r--. 1 root root 3 7月 22 02:45 serial.old
```
- 接下来将认证文件放到kolla部署节点上的/etc/kolla/octavia目录里
[root@control01 octavia]# mkdir /etc/kolla/config/octavia
[root@control01 octavia]# cp cert/{private/cakey.pem,ca_01.pem,client.pem} /etc/kolla/config/octavia/
[root@control01 octavia]# ls -al /etc/kolla/config/octavia/
总用量 24
drwxr-xr-x. 2 root root 4096 7月 22 02:59 .
drwxr-xr-x. 4 root root 4096 7月 22 02:57 ..
-rw-r--r--. 1 root root 1294 7月 22 02:59 ca_01.pem
-rw-r--r--. 1 root root 1743 7月 22 02:59 cakey.pem
-rw-r--r--. 1 root root 6109 7月 22 02:59 client.pem
3. 构建镜像
[root@control01 ~]# cd ~
[root@control01 ~]# git clone https://github.com/openstack/diskimage-builder
#克隆disk-builder工具,目录在/root/diskimage-builder下
[root@control01 ~]# pip install diskimage-builder/ -i https://pypi.tuna.tsinghua.edu.cn/simple
[root@control01 ~]# pwd
/root
[root@control01 ~]# yum install qemu-img -y
#构建镜像的时候需要改工具
[root@control01 ~]# cd octavia/diskimage-create/
[root@control01 diskimage-create]# ./diskimage-create.sh -i centos -s 3
- 构建完成后,当前目录下会生成`amphora-x64-haproxy.qcow2`文件。改步骤过程较慢,使用的是国外的源,而且可能会失败。实际上没必要每次去构建这个镜像,直接使用现有的镜像即可。[镜像下载地址](ftp://[email protected]/builder-images/octavia/amphora-x64-haproxy.raw)
4. 上传镜像到openstack中
source /etc/kolla//admin-openrc.sh
openstack image create --container-format bare --disk-format qcow2 --private --file amphora-x64-haproxy.qcow2 --tag amphora amphora
[root@control01 ~]# openstack image list
+--------------------------------------+--------- +--------+
| ID | Name | Status |
+--------------------------------------+--------- +--------+
| 16c35d86-9e05-4a24-94ec-0884ea69ccef | amphora | active |
+--------------------------------------+--------- +--------+
5. 创建openstack网络,该网络必须要和network节点,双向通信。
[root@control01 ~]# openstack network create --provider-physical-network physnet1 --provider-network-type flat --external --share lb-net
[root@control01 ~]# openstack subnet create --allocation-pool start=10.211.55.150,end=10.211.55.200 --network lb-net --subnet-range 10.211.55.0/24 --gateway 10.211.55.1 lb-subnet
- 根据回显,我们拿到该网络的id(而不是子网的id),后面会用到,本次的id:`21f243d8-606d-4430-8bfd-16e9e0d3acab`
6. 创建octavia虚拟机flavor
[root@control01 ~]# openstack flavor create --disk 40 --private --ram 1024 --vcpus 1 octavia_flavor
- 拿到该flavor的id,后面会用到,本例为:`2354f1c2-fc2d-487e-bef0-b12b7f095718`
7. 创建安全组并配置安全组规则
[root@control01 ~]# openstack security group create --description 'used by Octavia amphora instance' octavia
[root@control01 ~]# openstack security group rule create --protocol icmp ec40be6f-bad2-4c2c-b014-a95c362d24a1
[root@control01 ~]# openstack security group rule create --protocol tcp --dst-port 5555 --egress ec40be6f-bad2-4c2c-b014-a95c362d24a1
[root@control01 ~]# openstack security group rule create --protocol tcp --dst-port 9443 --ingress ec40be6f-bad2-4c2c-b014-a95c362d24a1
- 其中ec40be6f-bad2-4c2c-b014-a95c362d24a1为安全组的id。
8. 部署octavia(主要目的是为了创建octavia的用户)
- 修改vim /etc/kolla/globals.yml
enable_octavia: "yes"
- 开始部署octaiva
[root@control01 ~]# kolla-ansible deploy -i ~/multinode --tags octavia,horizon,haproxy
9. 创建octavia虚拟机的key,其中key的名字必须为`octavia_ssh_key`
[root@control01 ~]# grep octavia_keystone_password /etc/kolla/passwords.yml
octavia_keystone_password: 5RPTorrBeNeLt5a0WBG5OXAPGHTsnSv7jqpxnD0O
[root@control01 ~]# openstack --os-username octavia --os-password 5RPTorrBeNeLt5a0WBG5OXAPGHTsnSv7jqpxnD0O keypair create --public-key ~/.ssh/id_rsa.pub octavia_ssh_key
10. 更新globas.yml文件并reconfigure
- vim /etc/kolla/globals.yml在文件最后增加如下字段
octavia_loadbalancer_topology: "ACTIVE_STANDBY"
octavia_amp_boot_network_list: 21f243d8-606d-4430-8bfd-16e9e0d3acab
octavia_amp_secgroup_list: ec40be6f-bad2-4c2c-b014-a95c362d24a1
octavia_amp_flavor_id: 2354f1c2-fc2d-487e-bef0-b12b7f095718
- reconfigure octavia
[root@control01 ~]# kolla-ansible -i ~/multinode reconfigure --tags octavia
# octavia 的使用
1. 登录到horizon创建router和子网,并把子网绑定到router上
- 项目->网络->路由->创建
- 项目->网络->网络->创建网络和子网
- 项目->网络->路由->选中路由器->接口->添加接口
2. 创建loadbalancer
- 项目->网络->负载均衡器中根据提示创建即可。
暂无评论