介绍
Kolla的使命是为运营OpenStack云提供生产环境的容器和部署工具。可使用社区最佳实践进行扩展、快速、可靠和可升级。使用Ansible部署Docker容器运行OpenStack,并提供多种日志记录和监控服务配置。
可选:了解Ansible概念
官方Wiki:Kolla - OpenStack()
kolla文档:kolla 13.1.0.dev90 documentation ()
镜像列表:kolla’s Profile | Docker Hub
高可用配置参考:HAProxy Guide — kolla-ansible 13.1.0.dev199 文档 ()
kolla支持镜像列表: kolla 13.1.0.dev99 documentation ()
快读入门:kolla-ansible 13.1.0.dev199 文档 ()
快速部署ALL-IN-ONE节点
节点配置要求
最低配置要求:
2 个网络接口8GB 内存40GB 磁盘空间
本次实验环境:
系统:Centos7.6-1810 或 Centos8CPU:8核内存:16G网卡:eth0、eht1硬盘:40G(系统盘),100G(cinder服务使用)
安装
ps:单个步骤中若无注明系统版本则表示此步骤在两个系统中通用
安装Python虚拟环境
使用虚拟环境的目的是避免安装环境与系统环境冲突
# centos7sudo yum install python-virtualenv -y# centos8sudo 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版本
# 更新pippip install -U pip -i /pypi/simple/pip install -U setuptools -i /pypi/simple/
安装Ansible
# Kolla Ansible需要Ansible 2.6到2.9版本pip install 'ansible<2.10' -i /pypi/simple/
安装Kolla-ansible
# 安装Kolla-ansiblepip install kolla-ansible -i /pypi/simple/# 创建目录:/etc/kollasudo mkdir -p /etc/kollasudo chown $USER:$USER /etc/kolla# 复制文件到目录。globals.yml、passwords.yml -> /etc/kollacp -r /path/to/virtualenv/share/kolla-ansible/etc_examples/kolla/* /etc/kolla# 复制文件到当前目录,这里复制的就是kolla的清单文件cp /path/to/virtualenv/share/kolla-ansible/ansible/inventory/* .
配置Ansible
# 对ansible进行配置mkdir /etc/ansible/cat > /etc/ansible/ansible.cfg << EOF[defaults]# 跳过首次连接验证提示host_key_checking=False# 利用管道替换默认的拷贝模块pipelining=True# 执行时的并发数forks=100EOF
主机清单配置文件
编辑kolla的清单文件,我们在其中指定主机及其所属的组。我们可以使用它来定义节点角色和访问凭据。
Kolla-Ansible附带了示例库存文件。它们之间的区别在于,前者已准备好在localhost上部署单节点OpenStack。如果需要使用单独的主机或多个节点,请编辑清单:all-in-one(单节点)、multinode(多节点)。
关于清单文件的更多信息:/ansible/latest/intro_inventory.html
# 本文章以单节点为例,所以使用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,目的为了提供高可靠性。kolla_internal_vip_address: "10.48.39.132"# 如果不想使用Haproxy则需要设置此项为no# enable_haproxy: "no"# 如果no了haproxy则需要设置此项值为内部ip(控制节点ip)# kolla_internal_vip_address: "192.168.1.51"# 如果需要外部网络访问vip,还可以设置一个外网的vip# kolla_external_vip_address: ""# 其他服务选项## 启动cinder服务,并使用lvm卷组后端存储enable_cinder: "yes"cinder_volume_group: "cinder-volumes" #这里指定cinder所使用的卷组enable_cinder_backend_lvm: "yes"
# 如果启用了cinder服务,则需要保证在存储节点有cinder-volumes卷组pvcreate /dev/sdbvgcreate cinder-volumes /dev/sdb
本文章只说明最小化的服务安装,不涉及监控、对象存储、ceph等服务的安装,如果需要特殊配置请阅读kolla-ansible项目配置
注意:配置文件中的keepalived_virtual_router_id值不能与同一二层中的其他openstack相同,他的值在0-255之间。(Keepalived)虚拟路由的唯一id,在同一个网段里,不能有两个相同的id。
开始执行部署
设置配置后,我们可以进入部署阶段。首先,我们需要设置基本的主机级依赖项,如 docker。
Kolla-Ansible提供了一个剧本,将在正确的版本中安装所有必需的服务。
以下假设使用清单。如果使用其他清单(如 multinode ),请相应地替换参数。
# 1.部署依赖的引导服务器:安装一些软件比如docker之类的包kolla-ansible -i ./all-in-one bootstrap-servers# 2.对主机进行部署前检查kolla-ansible -i ./all-in-one prechecks# 3.开始部署OpenStackkolla-ansible -i ./all-in-one deploy
注意:在进行第二步命令时如果报错,请执行以下命令进行规避。
# 退出虚拟环境deactivate# 安装epel扩展源yum install epel-release -y# 安装新版pipcurl https://bootstrap.pypa.io/pip/2.7/get-pip.py | python# 设置pip加速pip config set global.index-url /pypi/simple/# 使用pip安装一些python包pip install requestspip install docker==4.4.4pip install websocket-client==0.59.0# 进入到虚拟环境mypip
部署结束
在上一步骤中第3小步在没有报错的情况下自动退出则代表部署完成,接下来对如何使用做一些说明
# 安装openstack cli客户端yum install -y centos-release-openstack-trainyum 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.tinyopenstack flavor create --id 2 --ram 2048 --disk 20 --vcpus 1 m1.smallopenstack flavor create --id 3 --ram 4096 --disk 40 --vcpus 2 m1.mediumopenstack flavor create --id 4 --ram 8192 --disk 80 --vcpus 4 m1.largeopenstack flavor create --id 5 --ram 16384 --disk 160 --vcpus 8 m1.xlarge# 设置配额# 40 instancesopenstack quota set --instances 40 $(openstack project list | awk '/ admin / {print $2}')# 40 coresopenstack quota set --cores 40 $(openstack project list | awk '/ admin / {print $2}')# 96GB ramopenstack 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}
其他参考
添加新主机
添加新主机:添加新主机
添加新的控制节点
# 修改ansible清单文件后执行下命令kolla-ansible -i 清单文件 bootstrap-servers --limit 新增服务器主机名# 拉取镜像到新主机kolla-ansible -i 清单文件 pull --limit 新增服务器主机名# 在新主机上部署容器,limit 包含所有控制器kolla-ansible -i 清单文件 deploy --limit controler1,controler2,新增服务器主机名
添加新的计算节点
# 添加hosts解析# 复制ansible密钥到新计算节点# 修改ansible清单文件(在清单文件的compute下添加新计算节点名)后执行下命令kolla-ansible -i 清单文件 bootstrap-servers --limit 新增服务器主机名# 对主机进行部署前检查kolla-ansible -i ./all-in-one prechecks# 拉取镜像到新主机kolla-ansible -i 清单文件 pull --limit 新增服务器主机名# 在新主机上部署容器,limit 包含所有控制器kolla-ansible -i 清单文件 deploy --limit 新增服务器主机名
kolla-ansible CLI命令
# 运行 CLI 时,可以通过环境变量将其他参数传递给该变量。kolla-ansible ansible-playbook EXTRA_OPTS# 用于部署和启动所有 Kolla 容器。kolla-ansible -i INVENTORY deploy # 用于清理群集中的容器和卷。kolla-ansible -i INVENTORY destroy # 用于恢复完全停止的 mariadb 集群。kolla-ansible -i INVENTORY mariadb_recovery # 用于在部署每个 OpenStack 服务之前检查是否满足所有要求。kolla-ansible -i INVENTORY prechecks # 用于在部署节点上执行后期部署,以获取管理员 openrc 文件kolla-ansible -i INVENTORY post-deploy# 用于拉取容器的所有映像。kolla-ansible -i INVENTORY pull # 用于重新配置 OpenStack 服务。kolla-ansible -i INVENTORY reconfigure # 用于升级现有的OpenStack环境。kolla-ansible -i INVENTORY upgrade # 用于执行部署后冒烟测试。kolla-ansible -i INVENTORY check # 注:冒烟测试需要配置:kolla_enable_sanity_checks=yes# 用于停止运行容器。kolla-ansible -i INVENTORY stop # deploy-containers 用于检查并在必要时更新容器,而不生成配置。kolla-ansible -i INVENTORY # 用于修剪主机上的孤立 Docker 映像。kolla-ansible -i INVENTORY prune-images # 可以通过多次传递 or 命令行选项来指定多个清单。这对于在多个环境之间共享配置非常有用。可以在 中设置任何常见配置,并可用于设置特定于环境的详细信息。--inventory-iINVENTORY1INVENTORY2kolla-ansible -i INVENTORY1 -i INVENTORY2 ...# 用于收集 Ansible 事实,例如填充事实缓存。kolla-ansible -i INVENTORY gather-facts
卸载清理
tools/cleanup-containers# 用于从系统中删除已部署的容器。当您想要执行新的干净部署时,这可能很有用。它将保留注册表和注册表中本地构建的映像,但会从本地 Docker 守护程序中删除所有正在运行的 Kolla 容器。它还会删除命名卷。tools/cleanup-host# 用于删除启动中子代理容器时在 Docker 主机上触发的网络更改的残余物。当您想要执行新的干净部署(尤其是更改网络拓扑的部署)时,这可能很有用。tools/cleanup-images --all# 用于从本地 Docker 缓存中删除 Kolla 构建的所有 Docker 映像。
修改dashboard的实例vnc地址
# 由于特殊需求,访问dashboard需要经过代理,但是dashboad上的vnc链接默认还是控制节点ip# 所以需要修改计算节点nova服务ansible -i multinode compute -a "crudini --set /etc/kolla/nova-compute/nova.conf vnc novncproxy_base_url http://外网访问地址:6080/vnc_auto.html"# 重启计算节点nova服务ansible -i multinode compute -a "docker restart nova_compute"