继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

Kolla 让 OpenStack 部署更贴心

至尊宝的传说
关注TA
已关注
手记 129
粉丝 82
获赞 463

Kolla 简介

长久以来 OpenStack 部署难、 升级难的问题经常为人诟病,简单、便捷、高效的部署升级方案是所有 OpenStack 用户(客户、云服务提供商、开发者)的共性刚需。Kolla 正是应需而生,它基于社区的最佳实践,提出了可靠、可扩展的生产级别 OpenStack Service Containers 部署方式。

简单来说,Kolla 就是充分应用容器特性,实现容器化部署 OpenStack 服务的 DevOps 工具。

Kolla 显著的特点是「开箱即用」「简易升级」,前者由编排工具(Ansible/Kubernetes)提供自动化支撑,后者则完全是 Container 的功劳。Kolla 追求为每一个 OpenStack Service 都构建相应的 Container,将升级/回滚的粒度(隔离依赖关系集)降维到 Service 或 Project 级别,实现升级/回滚的原子性。假若升级失败,则直接启动 Old Version Container 完成回滚。版本升级只需三步:

  1. Pull New Docker Image

  2. Stop Old Docker Container

  3. Start New Docker Container

除此之外,Kolla 还提供了定制化部署拓扑的能力,允许用户花费更小的学习和试错成本,逐渐摸索演变出适合自己的部署架构蓝图。

众所周知,容器技术具有非常优秀的应用部署敏捷性和效率,其中以 Docker 和 Kubernetes 作为构建容器化应用程序的主要标准,是最受欢迎的容器技术选型。Kolla 社区紧贴用户,将 Kolla Project 逐渐解耦成为了三个产品。由 Kolla 负责构建镜像,由 Kolla-ansible/Kolla-kubernetes 负责部署,而且 Kolla-kubernetes 还兼具着容器管理的能力。它们之间既互相配合又能自成一家,松耦合的架构更有利于最大限度的覆盖用户多方面需求。

  • Kolla:容器镜像构建

  • Kolla-ansible:容器部署

  • Kolla-kubernetes:容器部署,容器管理

在 Queens Release,Kolla-ansible 开始支持「开发者模式」,这的确是一个令人兴奋的消息。

支持开发模式。这个对 OpenStack 的开发者很是方便。以住,开发者可能要通过 devstack 搭建完整的 OpenStack 来开发,但是部署复杂,难度高。现在 kolla-ansible 已经支持了开发模式。通过配置要开发环境的 dev_mode, 如  horizon_dev_mode: true, 那么 horizon 容器内的代码会从物理机上挂载进去,开发者对代码修改后,就可以直接看到修改后的效果。十分方便。
 from:
 99Cloud 雷神(Kolla PTL)

详细请参考:
https://docs.openstack.org/kolla-ansible/latest/contributor/kolla-for-openstack-development.html

虽然,现在开发模式支持的项目还比较有限,但社团贡献者已经提交了 BluePrint,相信很快就能支持大部分核心项目了。
BP:https://review.openstack.org/#/c/560969/

在本文中,我们以 Kolla & Kolla-ansible 的组合,介绍如何轻松的部署出一套 OpenStack 环境。

Kolla & Kolla-ansible 部署 OpenStack

部署环境

  • 平台:VMware Workstations

  • 操作系统:CentOS 74,4C/8G

  • 双网卡

    • Host 模式:eth0 192.168.1.13/24

    • Bridge 模式:eth1 DHCP

  • Kolla branch master

  • Kolla-ansible branch master

  • OpenStack Version 6.0.0

部署须知

  1. 建议最小化安装 CentOS 7.4,并以 root 用户完成所有操作

  2. 有一些软件源没有国内镜像,建议科学上网

  3. 本文面向 Kolla 入门者和开发者,采用 centos+source 的 For development & All-In-One 部署方式

  4. eth1 被用于 Neutron Ext Network,被放到 Linux Network Namespace qrouter-XXXX 后,会导致网络断开

  5. 理论上 eth0 和 eth1 都需要连通外网,但根据部署需求 eth1 允许不通外网

  6. 需要始终保持 eth0 的内外网互通性,并建议使用 eth0 进行 ssh 连接

  7. Troubleshooting List 位于文末

准备操作系统基础环境

安装系统基础依赖包

yum install epel-release -yyum update -yyum upgrade -yyum install python-pip python-devel libffi-devel gcc openssl-devel libselinux-python vim git wget -y

惯例开启 NTP 时间同步服务

systemctl enable ntpd.service && systemctl start ntpd.service && systemctl status ntpd.service

惯例关闭防火墙服务

systemctl stop firewalld && systemctl disable firewalld && systemctl status firewalld

禁用宿主机的 Libvirt 服务

systemctl stop libvirtd.service && systemctl disable libvirtd.service && systemctl status libvirtd.service

Tips:建议此处上快照

准备 Python 基础环境

安装基础依赖包

pip install -U pip
pip install -U ansible
pip install -U tox
pip install -U python-openstackclient python-neutronclientpip install -U docker
pip install -U jinja2

Tips:下列软件包版本是 ERROR 高发区,如果出现疑似依赖包版本的问题,不妨查看一番。

  • docker>=2.0

  • jinja 2>=2.10

  • ansible>= 2.0

  • 确保没有安装 docker-py

ps:使用 docker 代替 docker-py

修改 ansible 配置文件

mkdir /etc/ansible
vim /etc/ansible/ansible.cfg
[defaults]host_key_checking=Falsepipelining=Trueforks=100deprecation_warnings=False

准备 Docker 基础环境

安装 Docker

curl -SSL https://get.docker.io | bash

开启 Docker 的 shared mount 共享挂载功能

mkdir /etc/systemd/system/docker.service.d
tee /etc/systemd/system/docker.service.d/kolla.conf << 'EOF'[Service]
MountFlags=shared
EOF

启动 Docker 服务

systemctl daemon-reloadsystemctl enable docker
systemctl restart docker

安装 kolla & kolla-ansible

Tips:这里使用两个沙盒环境,建议在不同的终端内操作,避免错乱

安装 Kolla

virtualenv kolla_env
source kolla_env/bin/activate
git clone https://github.com/openstack/kollacd kolla
pip install -r requirements.txt -r test-requirements.txt -e .tox -egenconfigmkdir /etc/kolla/cp etc/kolla/kolla-build.conf /etc/kolla/

编辑 kolla-build.conf:该配置文件用于控制 kolla build 的过程,这里设定 centos+source 部署方式

vim /etc/kolla/kolla-build.conf

[DEFAULT]base = centosinstall_type = sourcenamespace = kollapush = false# The Docker Images tag (string value)tag = 6.0.0

安装 Kolla-ansible

virtualenv kolla-ansible_envsource kolla-ansible_env/bin/activate
git clone https://github.com/openstack/kolla-ansiblecd kolla-ansiblepip install -r requirements.txt -r test-requirements.txt -e .cp etc/kolla/globals.yml /etc/kolla/cp etc/kolla/passwords.yml /etc/kolla/

编辑 passwords.yml:该文件用于设定 OpenStack Services 的各种密码,这里仅设定 admin 管理员登陆密码

vim /etc/kolla/passwords.ymlkeystone_admin_password: fanguiju

编辑 globals.yml:这是最重要的配置文件,用于设定 Deploy 操作的细节

vim /etc/kolla/globals.yml

kolla_dev_mode: "yes"network_interface: "eth0"neutron_external_interface: "eth1"kolla_internal_vip_address: "192.168.1.15"kolla_base_distro: "centos"kolla_install_type: "source"docker_registry: ""docker_namespace: "kolla"openstack_logging_debug: "true"enable_cinder: "no"enable_heat: "no"# Valid option is Docker repository tagopenstack_release: "6.0.0"
  • kolla_dev_mode: "yes":启用开发者模式

NOTE:passwords.yml tag 和 globals.yml openstack_release 的项目值必须保持一致,否则 Kolla Build 的 Images 不会被 Kolla-ansible Deploy 使用。

修改 Hypervisor Type:因为在 VirtualMachine 里部署 OpenStack,存在嵌套虚拟化不支持 KVM 的问题,如果你希望启动 OpenStack Instance,就需要把使用 QEMU(Default KVM)。

mkdir -p /etc/kolla/config/nova
cat << EOF > /etc/kolla/config/nova/nova-compute.conf[libvirt]virt_type=qemu
cpu_mode = none
EOF

Kolla Build Images

cd kolla/tools
./build.py -p default
  • 参数项 -p default 对应 kolla-build.conf 的 [profiles] Sections,Default images 表示仅 Build 主要的 Images。

[profiles]# From kolla

# Infra images (list value)
#infra = ceph,certmonger,cron,elasticsearch,etcd,fluentd,haproxy,keepalived,kibana,kolla-toolbox,mariadb,memcached,mongodb,opendaylight,openvswitch,ptp,qdrouterd,rabbitmq,redis,rsyslog,skydive,tgtd

# Main images (list value)
#main = ceilometer,cinder,glance,heat,horizon,iscsi,keystone,neutron,nova-,swift

# Aux Images (list value)
#aux = almanach,aodh,blazar,cloudkitty,congress,designate,dragonflow,ec2-api,freezer,gnocchi,influxdb,ironic,kafka,karbor,kuryr,magnum,manila,mistral,monasca,murano,novajoin,octavia,panko,rally,redis,sahara,searchlight,senlin,solum,tacker,telegraf,trove,vitrage,zaqar,zookeeper,zun

# Default images (list value)
#default = chrony,cron,kolla-toolbox,fluentd,glance,haproxy,heat,horizon,keepalived,keystone,mariadb,memcached,neutron,nova-,openvswitch,rabbitmq

# Gate images (list value)
#gate = chrony,cron,fluentd,glance,haproxy,horizon,keepalived,keystone,kolla-toolbox,mariadb,memcached,neutron,nova-,openvswitch,rabbitmq

接下来需要一段漫长的镜像构建时间,如果出现异常中断现象,可重复执行。赖于 Docker Build 的 Cache 功能,能为 Re-Build 追回不少时间。

但有些情况,错误的配置参数可能也会被 Cache 住,这时建议执行 Clean 操作:

# 从系统中移除部署的容器tools/cleanup-containers# 移除由于残余网络变化引发 docker 启动的 neutron-agents 主机tools/cleanup-host# 从 Cache 中移除所有的 docker imagetools/cleanup-images

Build Successfully
这里写图片描述

查看镜像列表
这里写图片描述

从上图可见,Kolla Build 出来的 Images 通常具有四层,镜像分层可以更好地对环境依赖集进行抽象,降低依赖包重复率,提高镜像传输率。简而言之,有点 “代码复用” 的意味。

这里写图片描述

  • Base image:最基础的操作系统环境,几乎是所有 Images 的基础环境。

  • openstack-base image:OpenStack All Service 的基础环境,安装了 OpenStack Service 级别的依赖集。

  • <project>-base image:OpenStack  Service 的基础环境,安装了 Project 级别的依赖集。

  • <service> image:一个具体 Service 最后的特异性依赖集,并设置了服务启动入口。

Kolla 是根据 Jinja2 Template 语法生成的 Dockerfile 文件来引导镜像构建的,所以如果你有个性化的定制需求可以通过编辑镜像的 Dockerfile.j2 实现:

vim /root/kolla/docker/nova/nova-api/Dockerfile.j2

Kolla-ansible Deploy OpenStack

Kolla-ansible 通过提供一个完整的 Ansible Playbook 来引导部署这些 Images,并且同时提供了 all-in-one 和 multihost 两种部署模式。

cd kolla-ansible/cp ansible/inventory/* ~$ ll ~-rw-r--r--   1 root root 8292 May 28 09:43 all-in-one-rw-r--r--   1 root root 8766 May 28 09:43 multinode

在正式 Deploy 之前,还需要进行一些准备工作

Step 1. 自动生成随机密码,填充 passwords.yml 文件配置项

kolla-genpwd

Step 2. 处理 bootstrap servers 所需要的依赖

cd kolla-ansible/tools./kolla-ansible -i ~/all-in-one bootstrap-servers

Step 3. Deploy 环境预检查

./kolla-ansible -i ~/all-in-one prechecks

Tips:做 prechecks 环境检查前需要完成 kolla-genpwd

正式开始 Deploy OpenStack

./kolla-ansible -i ~/all-in-one deploy

成功 Deploy 之后,查看 Container 状态
这里写图片描述

Tips:horizon project 通常是最后部署的。

NOTE

  1. 从上图可见,Service Container 实际上是由 kolla_start 脚本启动起来的

  2. 因为 Kolla 使用的是 –net=host 网络,所以没有必要做端口映射

检验 & 使用

生成 /etc/kolla/admin-openrc.sh 文件:该文件用于 Export Keystone Auth 环境变量

./kolla-ansible post-deploy

初始化运行环境:会自动执行下列操作

  • Creating glance image.

  • Configuring neutron.

  • Generating ssh key.

  • Configuring nova public key and quotas.

NOTE:如果你希望 External Network 能够正常运行,还需要编辑初始化脚本 init-runonce 中的网络配置,设定为 eth1 的网络信息。
e.g. eth1 IP:172.16.0.10/24

# This EXT_NET_CIDR is your public network,that you want to connect to the internet via.EXT_NET_CIDR='172.16.0.0/24'EXT_NET_RANGE='start=172.16.0.100,end=172.16.0.200'EXT_NET_GATEWAY='172.16.0.1'

这样,Instance Floating IP 才能够利用 qrouter-XXXX 中的 iptables 进行 NAT 转发。

source /etc/kolla/admin-openrc.sh./init-runonce

创建虚拟机

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

这里写图片描述

**清理环境:完全清理部署好的 OpenStack Container

kolla-ansible destroy -i all-in-one --yes-i-really-really-mean-it

最后

NOTE 1:实际上,Kolla-ansible 和 Kolla-kubernetes 是支持独立部署的(不依赖 Kolla),它们实现了检测和构建 Images 的策略。如果 Deploy 时,镜像没有 Ready,则会远程 Pull Images。不过这样做的速度是比较慢的,而且 Pull 下来的 Images 未必包含有最新的 Commit,所以建议使用 Kolla 在本地构建镜像。查看 Kollaglue Repo 提供的 Docker 镜像:

docker search kollaglue

Building Container Images,请参考:
https://docs.openstack.org/kolla/latest/admin/index.html#building-container-images
Docker Hub,请参考:  
https://hub.docker.com/u/kollaglue/

NOTE 2:如果你希望使用 Kolla 进行多节点部署,那么还需要依赖 Local Docker Register 服务器,构建 Docker 私有仓库,请参考:
https://docs.openstack.org/kolla-ansible/latest/user/multinode.html

参考文档

https://docs.openstack.org/kolla/latest/
http://xcodest.me/kolla-aio-install.html
http://www.chenshake.com/kolla-installation/
https://blog.csdn.net/karamos/article/details/80122218
https://my.oschina.net/LastRitter/blog/1617079
http://xcodest.me/kolla-queens-and-rocky.html

Troubleshooting List

ERROR 1

Cannot uninstall 'requests'. It is a distutils installed project and thus we cannot accurately determine which files belong to it which would lead to only a partial uninstall

TS 1:因为 requests 包被系统环境依赖,不能卸载,也不需要卸载,跳过即可。

pip install -U python-openstackclient python-neutronclient  --ignore-installed requests

ERROR 2

https://packagecloud.io/grafana/stable/el/7/x86_64/repodata/repomd.xml: [Errno 14] HTTPS Error 302 - Found

TS 2:网络不可达,请科学上网或随缘安装。

ERROR 3

TASK [neutron : Checking tenant network types] ****************************************************************************************fatal: [controller]: FAILED! => {"msg": "The conditional check 'item not in type_drivers' failed. The error was: An unhandled exception occurred while templating '{{ neutron_type_drivers.replace(' ', '').split(',') | reject('equalto', '') | list }}'. Error was a <class 'jinja2.exceptions.TemplateRuntimeError'>, original message: no test named 'equalto'\n\nThe error appears to have been in '/root/venv/share/kolla-ansible/ansible/roles/neutron/tasks/precheck.yml': line 41, column 3, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n\n- name: Checking tenant network types\n ^ here\n”}

TS 3:Jinja2 版本过低不支持 reject,需要高于 2.8。

ERROR 4:Deploy 过程中重复 Build 镜像
这里写图片描述
TS 4:kolla 和 kolla-ansible 指定的 Docker Image Tag 不一致。

镜像分层示意图

这里写图片描述

原文出处

打开App,阅读手记
1人推荐
发表评论
随时随地看视频慕课网APP

热门评论

请问Bridge 模式:eth1 DHCP 这个代表什么呢

查看全部评论