简介html
kolla 的使命是为 openstack 云平台提供生产级别的、开箱即用的自动化部署能力。python
kolla 要实现 openetack 部署分为两步,第一步是制做 docker 镜像,第二步是用 ansible 实现编排部署。所以,kolla 项目又被分为两个小项目:kolla、kolla-ansible,分别用于实现镜像制做和编排部署功能。linux
kolla-kubernetes 相似于于 kolla-ansible,篇幅缘由本文不作过多介绍。git
kolla 的优点 github
市面上 openstack 的部署工具和方案不少,kolla 的优点主要得益于容器技术:docker
关于本文实验bootstrap
本文主要介绍下如何在 Ubuntu 18.04.1 LTS 系统上使用 kolla 部署 opesntack Rocky 版本 all-in-one 环境,其中:ubuntu
基础环境后端
关于网卡,部署all-in-one最少须要两块网卡。有 IP 地址的网卡做为管理网和其余网络默认网卡(包括存储网),没有 IP 地址的网卡做为业务网络网卡;第二块网卡不需配置 IP 地址,不然会影响虚拟机联网。安全
virtualenv
为了与其余 python 项目隔离,本实验使用 virtualenv 来存放 kolla 项目。
建立 virtuanenv 并激活:
# 升级 pip sudo pip install -U pip # 安装 venv sudo pip install virtualenv sudo virtualenv ~/kolla/virtualenv sudo source ~/kolla/virtualenv/bin/activate
升级包索引
sudo apt-get update
安装 python 依赖包
sudo apt-get install python-dev libffi-dev gcc libssl-dev python-selinux python-setuptools
安装 ansible
sudo apt-get install ansible
配置 ansible
更改 ansible 配置文件 /etc/ansible/ansible.cfg(配置文件不存在则需新建):
cat << EOF > /etc/ansible/ansible.cfg [defaults] host_key_checking=False pipelining=True forks=100 EOF
关于 ansible 的配置项及含义,能够参考 ansible基础-安装与配置
建立 loop 设备和 lvm
本实验环境咱们使用 lvm 做为 cinder-volume 后端存储。一种方法是给虚拟机添加一块硬盘 sdb 并建立 pv 和 vg。另外一种方式是使用本地文件建立 loop 设备而后再建立 pv 和 vg。
第一种方式操做起来比较简单,这里介绍下第二种方式:
free_device=$(losetup -f) fallocate -l 20G /var/lib/cinder_data.img losetup $free_device /var/lib/cinder_data.img pvcreate $free_device vgcreate cinder-volumes $free_device
下载指定分支的 kolla-ansible 代码
cd ~/kolla git clone https://github.com/openstack/kolla-ansible -b stable/rocky
配置 kolla-ansible
安装依赖:
pip install -r kolla-ansible/requirements.txt
建立 kolla 配置文件并设置权限:
sudo mkdir -p /etc/kolla
sudo chown $USER:$USER /etc/kolla
拷贝 kolla 配置文件模版:
cp -r kolla-ansible/etc/kolla/* /etc/kolla
修改 kolla 配置文件:
cat << EOF > /etc/kolla/globals.yml --- enable_iscsid: 'no' #不加会报错,看起来是stable/rocky分支的bug kolla_base_distro: "ubuntu" kolla_install_type: "source" #使用基于源代码的image openstack_release: "rocky" #该配置项最好与kolla-ansible分支版本保持一致 kolla_internal_vip_address: "10.211.55.23" #与network_interface配置项网卡ip保持一致 network_interface: "enp0s5" neutron_external_interface: "enp0s6" enable_cinder: "yes" #开启cinder部署开关 enable_cinder_backend_lvm: "yes" #使用lvm做为cinder-volume后端存储 enable_haproxy: "no" glance_enable_rolling_upgrade: "no" nova_compute_virt_type: "qemu" #使用虚拟机部署时,该配置项必须改成qemu,默认值为kvm EOF
生成密码文件:
#执行脚本自动生成
cd kolla-ansible/tools ./generate_passwords.py
#检验
cat /etc/kolla/passwords.yml
拷贝 ansible 主机清单文件:
cp kolla-ansible/ansible/inventory/* ~/kolla
主机清单(inventory)文件定义了 ansible 的主机组的划分,若是是 all in one 环境那么直接使用 all-in-one 文件便可,无需修改。
Bootstrap servers
cd kolla-ansible/tools ./kolla-ansible -i ~/kolla/all-in-one bootstrap-servers
部署前检查
这里要添加 ansible_python_interpreter 变量,用于指定 virtualenv 环境位置,不然执行报错:
./kolla-ansible -i ~/kolla/all-in-one prechecks -e 'ansible_python_interpreter=/root/kolla/virtualenv/bin/python'
执行部署
这步也要指定 virtualenv 环境位置:
./kolla-ansible -i ~/kolla/all-in-one deploy -e 'ansible_python_interpreter=/root/kolla/virtualenv/bin/python'
生成 keystone admin 用户环境变量文件
./kolla-ansible -i ~/kolla/all-in-one post-deploy
. /etc/kolla/admin-openrc.sh
啊安装 openstack client
pip install python-openstackclient python-glanceclient python-neutronclient
初始化
初始化脚本会建立 cirros 镜像、网络、子网、路由、安全组、规格、配额等虚拟机资源:
. kolla-ansible/tools/init-runonce
建立虚拟机
根据实际环境替换 IMAGE_NAME 变量后执行以下脚本:
cat << EOF > ~/boot.sh IMAGE_NAME=603672c1-47a9-45dc-92ad-226c2ac00d95 openstack server create --image ${IMAGE_NAME} --flavor m1.tiny --key-name mykey --network demo-net demo1 EOF