Kolla-Ansible 部署OpenStack

持续更新。。。

参考链接
https://docs.openstack.org/stein/

选择R版
https://docs.openstack.org/rocky/index.html

https://docs.openstack.org/rocky/deploy/

https://docs.openstack.org/project-deploy-guide/kolla-ansible/rocky/

快速开始

参考链接
https://docs.openstack.org/project-deploy-guide/kolla-ansible/rocky/quickstart.html

主机环境

  • 系统:VMware Workstation ,Ubuntu server 16.04.2 LTS 64位
  • 网口:2个,1个桥接,1个NAT
  • 内存:2G
  • 硬盘:64G

另,所有操作过程是在root账户下直接进行的,目录亦是/root/

安装依赖项

  1. 升级pip

    1
    2
    3
    apt-get update
    apt-get install python-pip
    pip install -U pip
  2. 安装依赖包

    1
    apt-get install python-dev libffi-dev gcc libssl-dev python-selinux python-setuptools git vim -y
  3. 安装Ansible

    1
    apt-get install ansible
  4. (可选)使用pip安装或升级Ansible到最新版本:

    1
    pip install -U ansible
  5. (可选)将以下选项添加到ansible配置文件中 /etc/ansible/ansible.cfg:

    1
    2
    3
    4
    [defaults]
    host_key_checking=False
    pipelining=True
    forks=100

安装Kolla-ansible

安装Kolla-ansible for deployment or evaluation

  1. 使用安装kolla-ansible及其依赖项pip。

    1
    pip install kolla-ansible

    国内加速

    1
    pip install -i https://mirrors.aliyun.com/pypi/simple/ kolla-ansible

    排错记录

    1
    pip install -U --ignore-installed PyYAML
  2. 复制globals.yml和passwords.yml到/etc/kolla目录。

    1
    cp -r /usr/local/share/kolla-ansible/etc_examples/kolla /etc/
  3. 将文件复制all-in-one和multinode库文件到当前目录。
    本次记录当前路径为/root/

    1
    cp /usr/local/share/kolla-ansible/ansible/inventory/* .

安装 Kolla for development

  1. 从GitHub克隆kolla 和 kolla-ansible 仓库

    1
    2
    git clone https://github.com/openstack/kolla
    git clone https://github.com/openstack/kolla-ansible
  2. 安装kolla 和 kolla-ansible依赖

    1
    2
    pip install -r kolla/requirements.txt
    pip install -r kolla-ansible/requirements.txt
  3. 将配置文件复制到/etc/kolla目录下
    kolla-ansible在etc/kolla目录下保存配置文件globals.yml 和 passwords.yml。

    1
    2
    mkdir -p /etc/kolla
    cp -r kolla-ansible/etc/kolla/* /etc/kolla
  4. 复制库文件到当前目录
    kolla-ansible在ansible/inventory目录下保存库文件all-in-one 和 multinode

    1
    cp kolla-ansible/ansible/inventory/* .

准备初始配置

库文件

下一步是准备我们的inventory库存文件。Inventory是一个ansible文件,我们在其中指定节点角色和访问凭据。
Kolla-Ansible配备all-in-one和multinode例子 inventory库文件,它们之间的区别在于:

  • 前者all-in-one已准备好在localhost上部署单节点OpenStack。
  • multinode例子,如果您需要使用单独的主机或多个节点,请编辑multinode库文件,multinode例子如下:
  1. 编辑multinode文件的第一部分,包含multinode使用环境的连接信息。

配置对应节点的服务的主机名称。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[control]
10.0.0.[10:12] ansible_user=ubuntu ansible_password=foobar ansible_become=true
# Ansible supports syntax like [10:12] - that means 10, 11 and 12.
# Become clause means "use sudo".

[network:children]
control
# when you specify group_name:children, it will use contents of group specified.

[compute]
10.0.0.[13:14] ansible_user=ubuntu ansible_password=foobar ansible_become=true

[monitoring]
10.0.0.10
# This group is for monitoring node.
# Fill it with one of the controllers' IP address or some others.

[storage:children]
compute

[deployment]
localhost ansible_connection=local become=true
# use localhost and sudo

另,To learn more about inventory files, 打开 Ansible documentation.

  1. 检查库文件配置是否正确

    1
    ansible -i multinode all -m ping

    注意:
    Ubuntu可能没有预先安装python。这将导致ping模块出错。
    要使用ansible快速安装python,您可以运行

    1
    ansible -i multinode all -m raw -a "apt-get -y install python-dev"

Kolla 密码

部署过程中使用到的密码存储在/etc/kolla/passwords.yml文件中。
此文件中的所有密码都是空白的,必须手动填写或运行随机密码生成器:

  • 对于for deployment or evaluation,请运行命令

    1
    kolla-genpwd
  • 对于development,请运行

    1
    2
    cd kolla-ansible/tools
    ./generate_passwords.py

Kolla globals.yml

globals.yml是Kolla-Ansible的主要配置文件。部署Kolla-Ansible需要一些选项,具体可打开globals.yml文件查看,下面会对:

  • 镜像:Image options
  • 网络:Networking
  • 启用其他服务:Enable additional services

进行简介。

  1. Image options
    必须指定用于部署使用的镜像,这里先使用DockerHub提供预先构建的镜像。
    要了解有关的构建机制,参阅镜像构建文档Building Container Images
    Kolla提供了几种容器中Linux发行版的选择:Centos、Ubuntu、Oraclelinux、Debian、RHEL。
    对于新手的话,建议使用Centos或者Ubuntu 16.04.即:

    1
    kolla_base_distro: "centos"

    下一步关于安装类型“type”需要配置,可选项有
    binary:using repositories like apt or yum
    source:using raw source archives, git repositories or local source directory
    注意:这仅影响OpenStack服务。像Ceph这样的基础设施服务总是“二进制”的。
    注意:且经证明,源代码构建比二进制代码更可靠。

    1
    kolla_install_type: "source"

    要使用DockerHub镜像,必须覆盖修改镜像标签。镜像都标有发行版本名称。例如使用稳定的Rocky镜像,就设置为下面的。

    1
    openstack_release: "rocky"

    使用与kolla-ansible相同版本的镜像非常重要。这意味着如果pip用于安装kolla-ansible,这意味着它是最新的稳定版本,所以openstack_release应该设置为rocky。如果git与master分支一起使用,DockerHub也提供了master分支的每日构建(标记为master):

    1
    openstack_release: "master"
  2. Networking
    Kolla-Ansible需要设置一些网络选项。我们需要设置OpenStack使用的网络接口.

    • (1)设置的第一个接口是network_interface。这是多个管理类型网络的默认接口.

      1
      network_interface: "eth0"
    • (2)所需的第二个接口专用于Neutron外部(或公共)网络,可以是vlan或flat,取决于网络的创建方式。此接口应在没有IP地址的情况下处于活动,如果不是,实例将无法访问外部网络。

      1
      neutron_external_interface: "eth1"

    另,要了解更多有关网络配置,请参阅网络概览Network overview

    • (3)接下来,我们需要为管理流量提供浮动IP。此IP将由keepalived管理以提供高可用性,并应设置为 未连接到我们的管理网络中的地址 network_interface。
      1
      kolla_internal_vip_address: "10.1.0.250"
  3. Enable additional services
    默认情况下,Kolla-Ansible提供了一个裸计算工具包,但它确实为大量附加服务提供支持。要启用它们,请设置 enable_*为“yes”。例如,要启用块存储服务:

    1
    enable_cinder: "yes"

    另,Kolla现在支持许多OpenStack服务,有 一个可用服务列表 a list of available services。有关服务配置的详细信息,请参阅服务参考指南 Services Reference Guide

部署

配置完成后,我们可以进入部署阶段。
首先,我们需要设置基本的主机级依赖项,例如docker。
Kolla-Ansible提供了一个将以正确版本安装所有必需服务的剧本。

  • 对于部署或评估,请运行:
  1. 具有kolla部署依赖关系的引导服务器:
    1
    kolla-ansible -i ./multinode bootstrap-servers

回车之后报错
img
参考解决
(1)ansible –version,查看ansible版本为2.0.0.2,确实非常低。
(2)apt install ansible,提示已经是最新版本。
(3)更新apt库,然后重装ansible

1
2
3
4
5
6
7
ansible --version
apt-get install software-properties-common
apt-add-repository ppa:ansible/ansible
apt-get update
apt-get install ansible
ansible --version
apt install ansible

安装过程需要进行确认等操作,仔细看提示,重新编辑/etc/ansible/ansible.cfg,
再次执行初始化命令

1
kolla-ansible -i ./multinode bootstrap-servers

问题解决。时间需要很久很久,请耐心等待。

  1. 对主机进行预部署检查:

    1
    kolla-ansible -i ./multinode prechecks
  2. 最后进入实际的OpenStack部署:

    1
    kolla-ansible -i ./multinode deploy
  • 对于开发,运行:
  1. 具有kolla部署依赖关系的引导服务器:

    1
    2
    cd kolla-ansible/tools
    ./kolla-ansible -i ../ansible/inventory/multinode bootstrap-servers
  2. 对主机进行预部署检查:

    1
    ./kolla-ansible -i ../ansible/inventory/multinode prechecks
  3. 最后进入实际的OpenStack部署:

    1
    ./kolla-ansible -i ../ansible/inventory/multinode deploy

另,当这个剧本完成时,OpenStack应该启动,运行并且功能齐全!如果执行期间发生错误,请参阅故障排除指南troubleshooting

使用 OpenStack

  1. 安装基本的OpenStack CLI客户端:

    1
    pip install python-openstackclient python-glanceclient python-neutronclient
  2. OpenStack需要一个openrc文件,其中设置了admin用户的凭据。要生成此文件:

  • 对于部署或评估,请运行:

    1
    2
    kolla-ansible post-deploy
    . /etc/kolla/admin-openrc.sh
  • 对于开发,运行:

    1
    2
    3
    cd kolla-ansible/tools
    ./kolla-ansible post-deploy
    . /etc/kolla/admin-openrc.sh
  1. 根据您安装Kolla-Ansible的方式,有一个脚本可以创建示例网络,图像等。
  • 对于部署或评估,

请init-runonce在CentOS上运行脚本:

1
. /usr/share/kolla-ansible/init-runonce

init-runonce在Ubuntu上运行脚本:

1
. /usr/local/share/kolla-ansible/init-runonce

  • 对于开发,运行:
    1
    . kolla-ansible/tools/init-runonce

Kolla的多节点部署

参考链接
https://docs.openstack.org/project-deploy-guide/kolla-ansible/rocky/multinode.html

部署注册表

Docker注册表是一个本地托管的注册表,它取代了从Docker Hub获取图像的需要。Kolla可以在有或没有本地注册表的情况下运行,但是对于多节点部署,某些类型的注册表是强制性的。尽管存在用于注册表服务的HA功能,但只能部署一个注册表。
版本2.3之前的Docker注册表具有极差的性能,因为所有容器数据都是针对每个图像推送的,而不是利用Docker分层来优化推送操作。有关更多信息,请参阅pokey registry pokey注册表

  1. 编辑/etc/kolla/globals.yml并添加以下内容,其中192.168.1.100是计算机的IP地址,5000是注册表当前运行的端口

    1
    docker_registry: 192.168.1.100:5000
  2. Kolla社区建议使用注册表2.3或更高版本。
    另,如果要部署2.3或更高版本的注册表,请执行以下操作:

    1
    2
    cd kolla
    tools/start-registry

3.Docker注册表可以配置为拉出缓存,以代理Docker Hub中托管的官方Kolla映像。为了将本地注册表配置为拉入式缓存,在主机中将环境变量设置REGISTRY_PROXY_REMOTEURL为Docker Hub上存储库的URL。

1
export REGISTRY_PROXY_REMOTEURL=https://registry-1.docker.io

在所有节点配置Docker

启动注册表后,有必要指示Docker将与不安全的注册表进行通信。例如,要启用不安全的注册表通信,请修改该/etc/docker/daemon.json文件以包含以下内容 192.168.1.100:当前运行注册表的计算机的IP地址:

1
2
3
{
"insecure-registries" : ["192.168.1.100:5000"]
}

执行以下命令重启Docker:

  • 对于带有systemd的CentOS或Ubuntu:

    1
    systemctl restart docker
  • 对于使用upstart或sysvinit的Ubuntu:

    1
    service docker restart

编辑库文件Inventory File

ansible库文件包含确定哪些服务将在哪些主机上登陆所需的所有信息。编辑Kolla-Ansible目录中的库存文件ansible/inventory/multinode。
如果Kolla-Ansible安装了pip,可以在/usr/share/kolla-ansible。

将IP地址或主机名添加到组中,与该组关联的服务将登陆该主机。必须将IP地址或主机名添加到组控制,网络,计算,监视和存储中。
此外,定义附加的行为清单参数诸如ansible_ssh_user, ansible_become和ansible_private_key_file/ansible_ssh_pass控制与远程主机如何ansible相互作用。

另,Ansible使用SSH连接部署主机和目标主机,应注意配置免密登录。更多的配置参阅Ansible文档

1
2
3
4
5
6
# These initial groups are the only groups required to be modified. The
# additional groups are for more control of the environment.
[control]
# These hostname must be resolvable from your deployment host
control01 ansible_ssh_user=<ssh-username> ansible_become=True ansible_private_key_file=<path/to/private-key-file>
192.168.122.24 ansible_ssh_user=<ssh-username> ansible_become=True ansible_private_key_file=<path/to/private-key-file>

另外,根据具体的环境配置可能还会需要修改其他的库参数,参阅Ansible文档

对于更高级的角色,操作员可以编辑与每个组关联的服务。请记住,某些服务必须组合在一起,更改这些服务可能会破坏您的部署:

1
2
3
4
5
6
7
8
[kibana:children]
control

[elasticsearch:children]
control

[haproxy:children]
network

部署 Kolla

  • 注意
    如果在同一第2层网络中运行多个keepalived集群,请编辑该文件/etc/kolla/globals.yml并指定 keepalived_virtual_router_id。本keepalived_virtual_router_id应该是唯一的,属于范围0〜255。
  • 注意
    如果将glance配置为file用作后端,则只会glance_api 启动一个容器。file默认情况下在未指定其他后端时启用/etc/kolla/globals.yml。
  1. 首先,检查部署目标是否处于Kolla可能部署到的状态:
    1
    kolla-ansible prechecks -i <path/to/multinode/inventory/file>
  • 注意
    RabbitMQ不能与IP地址一起使用,因此api_interface主机名应该可以解析IP地址, 以确保所有RabbitMQ Cluster主机可以事先解析彼此的主机名。
  1. 运行部署:
    1
    kolla-ansible deploy -i <path/to/multinode/inventory/file>
---本文结束感谢您的阅读---
北岸冷若冰霜 wechat
欢迎使用微信扫一扫上面的二维码,订阅我的公众号!
坚持原创分享,点击下方打赏,您的支持将鼓励我继续创作!