介绍
Kolla的使命是为运营OpenStack云提供生产环境的容器和部署工具。可使用社区最佳实践进行扩展、快速、可靠和可升级。使用Ansible部署Docker容器运行OpenStack,并提供多种日志记录和监控服务配置。
可选:了解Ansible概念
参考网址
官方Wiki:Kolla - OpenStack(openstack.org)
kolla文档:kolla 13.1.0.dev90 documentation (openstack.org)
镜像列表:kolla’s Profile | Docker Hub
高可用配置参考:HAProxy Guide — kolla-ansible 13.1.0.dev199 文档 (openstack.org)
kolla支持镜像列表: kolla 13.1.0.dev99 documentation (openstack.org)
快读入门:kolla-ansible 13.1.0.dev199 文档 (openstack.org)
快速部署ALL-IN-ONE节点
节点配置要求
须满足以下最低硬件配置:
- 2 个网络接口(网卡)
- 8GB 内存
- 40GB 磁盘空间
实验环境:
- 系统:Centos7.6-1810 或 Centos8
- CPU:8核
- 内存:16G
- 网卡:eth0、eht1
- 硬盘:40G(系统盘),100G(cinder服务使用)
安装Python虚拟环境
# centos7
sudo yum install python-virtualenv -y
# centos8
sudo dnf install python3-virtualenv -y
创建虚拟环境并激活
# 创建虚拟环境
virtualenv /path/to/virtualenv
# 激活虚拟环境
source /path/to/virtualenv/bin/activate
# 停用虚拟环境命令
# deactivate
# 列出虚拟环境列表命令
# workon
# 写入到用户环境 下次登陆后执行mypip就可以进入虚拟环境
alias mypip='source /path/to/virtualenv/bin/activate'
echo "alias mypip='source /path/to/virtualenv/bin/activate'" >> ~/.bash_profile
更新pip版本 保存最新的pip版本
# 更新pip
pip install -U pip -i https://mirrors.aliyun.com/pypi/simple/
pip install -U setuptools -i https://mirrors.aliyun.com/pypi/simple/
安装Ansible
# Kolla Ansible需要Ansible 4到6版本 适用国内镜像 可以加快速度
pip install 'ansible>=4,<6' -i https://mirrors.aliyun.com/pypi/simple/
安装Kolla-ansible
# 安装Kolla-ansible
pip install kolla-ansible -i https://mirrors.aliyun.com/pypi/simple/
# 创建目录:/etc/kolla
sudo mkdir -p /etc/kolla
# 赋予用户权限:/etc/kolla
sudo chown $USER:$USER /etc/kolla
# 复制文件到目录。globals.yml、passwords.yml -> /etc/kolla
cp -r /path/to/virtualenv/share/kolla-ansible/etc_examples/kolla/* /etc/kolla
# 复制文件到当前目录,这里复制的就是kolla的清单文件
cp /path/to/virtualenv/share/kolla-ansible/ansible/inventory/* .
设置python环境
对于all-in-one虚拟环境中的场景,将以下内容添加到清单的最开始:
vi ./all-in-one
localhost ansible_python_interpreter=python
如果采用虚拟环境的python 报错 则修改真实环境的python 路径
配置Ansible
# 对ansible进行配置
#创建文件
mkdir /etc/ansible/
#写入文件
cat > /etc/ansible/ansible.cfg << EOF
[defaults]
# 跳过首次连接验证提示
host_key_checking=False
# 利用管道替换默认的拷贝模块
pipelining=True
# 执行时的并发数
forks=100
log_path=ansible.log
gathering = smart
fact_caching = jsonfile
fact_caching_connection = ansible-facts
EOF
安装 Ansible Galaxy 要求
安装 Ansible Galaxy 依赖项(Yoga 版本以后):
kolla-ansible install-deps
准备初始配置
编辑kolla的清单文件,我们在其中指定主机及其所属的组。我们可以使用它来定义节点角色和访问凭据。
Kolla-Ansible附带了示例库存文件。它们之间的区别在于,前者已准备好在localhost上部署单节点OpenStack。如果需要使用单独的主机或多个节点,请编辑清单:all-in-one(单节点)、multinode(多节点)。
关于清单文件的更多信息
# 本文章以单节点为例,所以使用all-in-one配置文件
# vim all-in-one
# 检查配置清单是否正常
# 此命令会ping清单文件中的主机
ansible -i all-in-one all -m ping
生成密码
部署时所使用的密码在 /etc/kolla/passwords.yml 文件中,此文件中密码为空,需要手动或随机生成密码填充此文件。
# 自动生成密码并进行填充
kolla-genpwd
配置globals.yml文件
/etc/kolla/globals.yml 是 Kolla-Ansible 的主配置文件。部署 Kolla-Ansible 需要指定以下配置
# 修改globals.yml配置文件
vim /etc/kolla/globals.yml
修改为以下配置
# 指定使用centos基础镜像
kolla_base_distro: "centos"
# 指定使用二进制(yum安装)安装类型
kolla_install_type: "binary"
# 指定网络接口
## 管理接口
network_interface: "eth0"
## Neutron外部网络接口 连接外部网络的接口
neutron_external_interface: "eth1"
## 管理地址VIP(虚拟IP),设置一个没有被占用的IP,目的为了提供高可靠性。 需要能够ping通的ip地址
kolla_internal_vip_address: "10.48.39.132"
# 其他服务选项
## 启动cinder服务,并使用lvm卷组后端存储
enable_cinder: "yes"
cinder_volume_group: "cinder-volumes" #这里指定cinder所使用的卷组
enable_cinder_backend_lvm: "yes"
## 请记得手动创建卷组
## pvcreate /dev/sdb
## vgcreate cinder-volumes /dev/sdb
本文章只说明最小化的服务安装,不涉及监控、对象存储、ceph等服务的安装,如果需要特殊配置请阅读kolla-ansible项目配置
注意:配置文件中的 keepalived_virtual_router_id 值不能与同一二层中的其他openstack相同,他的值在0-255之间。(Keepalived)虚拟路由的唯一id,在同一个网段里,不能有两个相同的id。
开始执行部署
安装依赖
# 设置pip加速
pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/
# 使用pip安装一些python包
pip install requests
#在这docker 版本要在4.4。4 以上的 因为14.3.0的低版本docker 会报错
pip install docker
pip install websocket-client
部署OpenStack
设置配置后,我们可以进入部署阶段。首先,我们需要设置基本的主机级依赖项,如 docker。
Kolla-Ansible提供了一个剧本,将在正确的版本中安装所有必需的服务。
以下假设使用清单。如果使用其他清单(如 multinode ),请相应地替换参数。
# 1.部署依赖的引导服务器:安装一些包比如docker之类的
kolla-ansible -i ./all-in-one bootstrap-servers
# 2.对主机进行部署前检查
kolla-ansible -i ./all-in-one prechecks
# 3.开始部署OpenStack
kolla-ansible -i ./all-in-one deploy
注意:在进行第二步命令时如果报错,请执行以下命令进行规避。
如果遇到版本冲突则先卸载 重新安装
# 推出虚拟环境
deactivate
# 安装epel扩展源
yum install epel-release -y
# 安装新版pip
sudo dnf install python3-pip
sudo pip3 install -U pip
# 设置pip加速
pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/
# 使用pip安装一些python包
pip install requests
pip install docker
pip install websocket-client
# 进入到虚拟环境
mypip
部署结束
在上一步骤中第3小步在没有报错的情况下自动退出则代表部署完成,接下来对如何使用做一些说明:
# 安装openstack cli客户端
yum install -y centos-release-openstack-train
yum install -y python-openstackclient
# 生成openrc文件
kolla-ansible post-deploy
# 导入openrc中的环境变量
. /etc/kolla/admin-openrc.sh
以及简单的创建示例,比如网络、云主机等
注意:需要将命令中的IP、网段、镜像文件替换为自己的环境配置
# 创建外部网络
openstack network create --external --provider-physical-network physnet1 --provider-network-type flat public1
# 创建内部网络
openstack network create --provider-network-type vxlan demo-net
# 创建路由器
openstack router create demo-router
# 创建内部子网
openstack subnet create --subnet-range 10.0.0.0/24 --network demo-net --gateway 10.0.0.1 --dns-nameserver 8.8.8.8 demo-subnet
# 创建外部子网
openstack subnet create --no-dhcp --allocation-pool start=10.47.174.150,end=10.47.174.200 --network public1 --subnet-range 10.47.160.0/20 --gateway 10.47.160.1 public1-subnet
# 配置路由器外部网络接口
openstack router set --external-gateway public1 demo-router
# 配置路由器内部接口
openstack router add subnet demo-router demo-subnet
# 上传镜像
openstack image create --disk-format qcow2 --container-format bare --public --property os_type=linux --file ./cirros-0.5.2-x86_64-disk.img cirros0.5.2
# 创建主机类型
openstack flavor create --id 1 --ram 512 --disk 1 --vcpus 1 m1.tiny
openstack flavor create --id 2 --ram 2048 --disk 20 --vcpus 1 m1.small
openstack flavor create --id 3 --ram 4096 --disk 40 --vcpus 2 m1.medium
openstack flavor create --id 4 --ram 8192 --disk 80 --vcpus 4 m1.large
openstack flavor create --id 5 --ram 16384 --disk 160 --vcpus 8 m1.xlarge
# 设置配额
# 40 instances
openstack quota set --instances 40 $(openstack project list | awk '/ admin / {print $2}')
# 40 cores
openstack quota set --cores 40 $(openstack project list | awk '/ admin / {print $2}')
# 96GB ram
openstack quota set --ram 96000 $(openstack project list | awk '/ admin / {print $2}')
# 创建云主机
openstack server create --image cirros0.5.2 --flavor m1.tiny --network demo-net demo1
# 放通安全组
ADMIN_PROJECT_ID=$(openstack project list | awk '/ admin / {print $2}')
ADMIN_SEC_GROUP=$(openstack security group list --project ${ADMIN_PROJECT_ID} | awk '/ default / {print $2}')
openstack security group rule create --ingress --ethertype IPv4 --protocol icmp ${ADMIN_SEC_GROUP}
openstack security group rule create --ingress --ethertype IPv4 --protocol tcp --dst-port 22 ${ADMIN_SEC_GROUP}
openstack security group rule create --ingress --ethertype IPv4 --protocol tcp --dst-port 8000 ${ADMIN_SEC_GROUP}
openstack security group rule create --ingress --ethertype IPv4 --protocol tcp --dst-port 8080 ${ADMIN_SEC_GROUP}