Kolla-Ansible 部署 Yoga

kolla介绍

#简介

kolla 的使命是为 openstack 云平台提供⽣产级别的、开箱即⽤的交付能⼒。kolla 的基本思想是⼀切皆容器,将所有服务基于 Docker 运 ⾏,并且保证⼀个容器只跑⼀个服务(进程),做到最⼩粒度的运⾏ docker。 kolla 要实现 openetack 部署总体上分为两步,第⼀步是制作 docker 镜像,第⼆步是编排部署。因此,kolla 项⽬⼜被分为两个⼩项⽬: kolla、kolla-ansible 。

#kolla 的优势

kolla 的优势主要得益于容器技术:

  • 得益于成熟的部署⼯具 ansible 和 docker,部署快速且稳定。
  • ⼀个容器只跑⼀个服务,所以能将 openstack 服务控制到很⼩的粒度。
  • 可以以组件为单位进⾏升级和回滚,例如升级 nova 组件,使⽤ kolla-ansible -i /path/to/inventory -t nova 命令即可。
  • kolla 采⽤⼀切皆容器的基本思想,所以只需操作系统与 docker 兼容,从⽽规避了很多安装包依赖冲突的问题。
  • ⽬前 kolla 项⽬在社区内的热度相对较⾼,社区⽀持更好。

#kolla 的缺点

  • 完全依赖于 docker ,docker 的不稳定性会给整个环境带来巨⼤的灾难,不过⽬前 docker 已经问题很少了。
  • 使⽤ kolla 部署好云平台后,给开发的 debug 和运维的故障排查会带来更多的复杂度,这个问题也可能通过写⼀个简单的 client 解决。

#节点规划

VMWare 提供三台(或者更多)Ubuntu22.04 Live Server 下载链接 (opens new window)服务器

  1. 一台作为 openstack 的 manager 管理节点,上面跑了 openstack 的 keystone 身份认证和 RabbitMQ、etcd等基础组件,是 openstack 的命根子。往后的集群扩容都要连接 manager 的。CPU核心要足够用,内存要足,网速还要好。存储要求不高,只要一个系统盘,100GB也就够了。
  2. 一台作为计算节点,是专门运行云服务器的。计算节点的特点是cpu核心和内存要大。存储几乎没要求,云服务器的系统盘和块存储、对象存储、镜像快照存储都由另一台节点提供。
  3. 一台作为存储节点,上面运行 cinder、glance、swift等openstack存储组件。所以这类存储节点的特点就是磁盘大,网络快(不然虚拟机访问他的系统盘岂不是特别卡?)。

注意

后期采用 ceph 提供存储

kvm提供虚拟化方案(题外话)

#虚拟机硬件规划

系统镜像使用 Ubuntu22.04 Live Server,每个虚拟机都是用之前创建的这两个虚拟网卡。

我这里使用3+1机器演示: 1 x 部署机:10.10.1.80/24 节点01:10.10.1.81/24 control01 节点02:10.10.1.82/24 control02 节点03:10.10.1.83/24 control03

#OS安装完成后的系统配置更改

# 修改root密码
sudo passwd root
新密码:root

# 修改ip
# 可以图形化修改,以下是命令行修改ip
ip -a   # 查看网络接口名

# 编辑netplan。以第一台的配置为例
vim /etc/netplan/01-network-manager-all.yaml
------------------------------------------------
network:
    version: 2
    renderer: NetworkManager
    # 新增
    ethernets:
        ens1: # 这是第一个网络设备名,这个设备名是通过ip a 命令获取的。
            dhcp4: no
            addresses: [10.0.0.201/24]
            optional: true
            gateway4: 10.0.0.1
            nameservers:
                addresses: [10.0.0.1]
        ens2: # 这是第二个网络设备名
            dhcp4: no
            addresses: [192.168.100.201/24]
            optional: true
            gateway4: 192.168.100.1
            nameservers:
                addresses: [192.168.100.1]
        

# 关闭防火墙
ufw disable

# 修改清华源镜像
cp /etc/apt/sources.list /etc/apt/sources.list.bak

cat > /etc/apt/sources.list << EOF
#替换为下面的
# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse

# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse
# # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse

deb http://security.ubuntu.com/ubuntu/ focal-security main restricted universe multiverse
# deb-src http://security.ubuntu.com/ubuntu/ focal-security main restricted universe multiverse

# 预发布软件源,不建议启用
# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse
# # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse
EOF

# 更新系统包
apt -y update && apt -y full-upgrade
apt -y install ssh vim git
apt -y install python3-dev libffi-dev gcc libssl-dev
vim /etc/ssh/sshd_config
# 修改PermitRootLogin,允许root用户通过密码登录
PermitRootLogin yes

# 重启ssh
systemctl restart ssh
systemctl enable ssh

#storage节点配置VG(Volume Group)

# storage节点上创建一个500GB的VG
apt -y install lvm2
pvcreate /dev/vdb /dev/vdc
vgcreate cinder-volumes /dev/vdb /dev/vdc

不要自己擅自安装docker!

使用kolla-ansible部署openstack前,尽量保证各个节点的操作系统纯净,不要私自安装docker,不要私自修改GPG key。否则会导致kolla-ansible无法运行,最终只能逼着你去重装系统。 kolla-ansible会自动帮我们安装全套的运行环境,包括docker!!!

#kolla安装openstack

#安装系统依赖

sudo apt install git python3-dev libffi-dev gcc libssl-dev
sudo apt install python3-venv sshpass

#创建虚拟环境并激活它

mkdir /path && mkdir /path/to # 也可以自定路径
python3 -m venv /path/to/venv
source /path/to/venv/bin/activate

# 确保安装了最新版本的pip
python -m pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --upgrade pip

# pypi换源
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

# 安装Ansible
pip install 'ansible>=4,<6'

#安装Kolla-Ansible

# 1. kolla
# pip install git+https://opendev.org/openstack/kolla-ansible@stable/yoga
# 上面是原版命令,建议使用jihulab.com克隆一份
pip install git+https://jihulab.com/james-curtis/kolla-ansible@stable/yoga

# 2. 创建文件夹/etc/kolla
sudo mkdir -p /etc/kolla
sudo chown $USER:$USER /etc/kolla

# 3. 复制 globals.yml 和 passwords.yml 到 /etc/kolla
# 如果你使用了自定义路径,记得替换/path/to
cp -r /path/to/venv/share/kolla-ansible/etc_examples/kolla/* /etc/kolla

# 4. 复制清单文件
cp /path/to/venv/share/kolla-ansible/ansible/inventory/* .

#安装Ansible Galaxy依赖

#换源

找到 /path/to/venv/share/kolla-ansible/requirements.yml

---
collections:
    - name: https://opendev.org/openstack/ansible-collection-kolla
      type: git
      version: stable/yoga

修改这个git仓库地址,如果镜像拉不下,建议去拉github的OpenStack镜像

---
collections:
    - name: https://jihulab.com/james-curtis/ansible-collection-kolla
      type: git
      version: stable/yoga

#安装Kolla-Ansible-Collections依赖

kolla-ansible install-deps

#docker换源 && 指定docker版本到20.10.*

sed -i.bak 's/https:\/\/download\.docker\.com/https:\/\/mirrors\.tuna\.tsinghua\.edu\.cn\/docker-ce/g'   /root/.ansible/collections/ansible_collections/openstack/kolla/roles/baremetal/defaults/main.yml
sed  -i.bak  's/_package: "docker-ce"/_package: "docker-ce=5:20.10*"/g'   /root/.ansible/collections/ansible_collections/openstack/kolla/roles/baremetal/defaults/main.yml

#配置Ansible

mkdir /etc/ansible 
echo "[defaults]
host_key_checking=False
pipelining=True
forks=100" > /etc/ansible/ansible.cfg

#准备初始化配置

单机部署可以去 OpenStack 官网查看

对于all-in-one虚拟环境中的场景,将以下内容添加到all-in-one清单的最开头

localhost ansible_python_interpreter=python

#修改配置文件(注意配置文件不要照搬)

# These initial groups are the only groups required to be modified. The
# additional groups are for more control of the environment.
[all:vars]
ansible_user=root
ansible_password=root

[control]
# These hostname must be resolvable from your deployment host
control01  ansible_user=root
control02  ansible_user=root
control03  ansible_user=root

# The above can also be specified as follows:
# control[01:03]     ansible_user=kolla

# The network nodes are where your l3-agent and loadbalancers will run
# This can be the same as a host in the control group
# [network]
# network01
# network02

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


# [compute]
# compute01
[compute:children]
control

[monitoring:children]
control
# [monitoring]
# control01   ansible_user=root ansible_password=1 ansible_become=true
# monitoring01

# When compute nodes and control nodes use different interfaces,
# you need to comment out "api_interface" and other interfaces from the globals.yml
# and specify like below:
#compute01 neutron_external_interface=eth0 api_interface=em1 storage_interface=em1 tunnel_interface=em1

# [storage]
# storage01
[storage:children]
control

[deployment]
deploy  ansible_connection=local

#修改 hosts

# 这里是deploy机器上的文件
127.0.0.1 localhost
10.10.1.80 deploy
10.10.1.81 control01
10.10.1.82 control02
10.10.1.83 control03

#配置ssh密钥对

apt install sshpass -y
ssh-keygen # 一路回车

ssh-copy-id 10.10.1.81 # 注意替换自己的内网ip 输入yes同意指纹,然后输入密码。就可以了

#检查清单配置是否正确

ansible -i multinode all -m ping

成功效果

(venv) root@ubuntu:~# ansible -i multinode all -m ping
[WARNING]: Invalid characters were found in group names but not replaced, use -vvvv to see details
localhost | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python3"
    },
    "changed": false,
    "ping": "pong"
}
control01 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python3"
    },
    "changed": false,
    "ping": "pong"
}

#生成密码

生成所有组件依赖的密码,保存在 /etc/kolla/passwords.yml

kolla-genpwd

#配置globals.yml

建议拷贝出来修改

vim /etc/kolla/globals.yml
:set number # 显示行号

#1. 修改基础镜像发行版

sed -i.bak 's/#kolla_base_distro: "centos"/kolla_base_distro: "ubuntu"/' /etc/kolla/globals.yml

#2. 编辑网络接口

设置的第一个接口是“ Network_interface”。这是多个管理类型网络的默认接口。

network_interface: "eth0" # 替换为自己的网口

所需的第二个接口专用于Neutron外部(或公共)网络,可以是vlan或flat,这取决于网络的创建方式。此接口应处于活动状态,没有IP地址。否则,实例将无法访问外部网络。

neutron_external_interface: "eth1" # 替换为自己的网口

提示

neutron_external_interface 是指在 OpenStack 中的 Neutron 网络服务中,用来定义 OpenStack 实例(Instance)访问外部网络(external network)的接口(interface)。

在 OpenStack 中,外部网络通常是指与 Internet 连接的物理网络或虚拟网络,例如一个公共云提供商的公共网络。如果您想要使 OpenStack 实例能够访问 Internet 或其他外部网络,您需要配置 neutron_external_interface 来建立连接。

具体而言,在 OpenStack 中,neutron_external_interface 通常是通过配置路由器(router)和浮动 IP (Floating IP)地址来实现的。它定义了与外部网络相连的网络接口和 IP 地址范围,并为 OpenStack 实例分配公网 IP 地址,以便它可以被外界访问。

当您在 OpenStack 中配置完 neutron_external_interface 之后,您可以使用浮动 IP(Floating IP)来映射 OpenStack 实例的内部 IP 地址到公网 IP 地址,使得 OpenStack 实例能够被外部网络直接访问。这样,您就可以通过互联网访问您的 OpenStack 实例,并提供服务给外界用户。

#3. 搜索并设置浮动ip

接下来,我们需要为管理流量提供浮动IP。该IP将由keepalive管理,以提供高可用性,并且应设置为在连接到我们网络接口的管理网络中不使用的地址。

kolla_internal_vip_address: "10.1.0.250"

#部署

#1. docker quay.io换源

sed -i.bak 's/#docker_registry:/docker_registry: quay.nju.edu.cn/g' /etc/kolla/globals.yml

#2. 引导服务器

kolla-ansible -i ./multinode bootstrap-servers

此步骤会在家目录下生成 .ansible 文件夹,并将配置文件和清单文件复制在这里

Docker 版本检查(确保Server: Docker Engine版本在20.10.xx就行)

(venv) root@ubuntu:~# docker version
Client: Docker Engine - Community
    Version:           23.0.0
    API version:       1.41 (downgraded from 1.42)
    Go version:        go1.19.5
    Git commit:        e92dd87
    Built:             Wed Feb  1 17:47:51 2023
    OS/Arch:           linux/amd64
    Context:           default

Server: Docker Engine - Community
  Engine:
    Version:          20.10.23
    API version:      1.41 (minimum version 1.12)
    Go version:       go1.18.10
    Git commit:       6051f14
    Built:            Thu Jan 19 17:42:57 2023
    OS/Arch:          linux/amd64
    Experimental:     false
    containerd:
    Version:          1.6.16
    GitCommit:        31aa4358a36870b21a992d3ad2bef29e1d693bec
    runc:
    Version:          1.1.4
    GitCommit:        v1.1.4-0-g5fd4c4d
    docker-init:
    Version:          0.19.0
    GitCommit:        de40ad0

#3. 对主机进行部署前检查

这里会花一些时间,耐心等待(主要是配置环境和拉取依赖,比如 Docker),前置步骤没有错误的话,这里应该可以通过,如果出现问题按照问题逐个解决即可

kolla-ansible -i ./multinode prechecks -vvv

#4. 最后进行实际的 OpenStack 部署

这里会花更多时间(主要看 global.yml 开启多少功能),耐心等待,在这一步骤会拉取镜像并启动

kolla-ansible -i ./multinode deploy -vvv

#使用 OpenStack

#1. 安装 OpenStack CLI 客户端

可以在这里自行替换

pip install python-openstackclient -c https://releases.openstack.org/constraints/upper/yoga

# pip install python-openstackclient -c https://jihulab.com/james-curtis/requirements/-/raw/stable/yoga/upper-constraints.txt # 换源的

#2. OpenStack 需要一个 openrc 文件

kolla-ansible post-deploy
. /etc/kolla/admin-openrc.sh # 可以写到环境变量中

echo source /path/to/venv/bin/activate >> ~/.bashrc
echo source /etc/kolla/admin-openrc.sh >> ~/.bashrc

#安装 skyline 面板

在有容器的机器上执行,一般推荐在控制节点上都运行一个

创建文件夹

mkdir /etc/skyline && touch /etc/skyline/skyline.yaml

填充配置文件(需要修改 database_url,keystone_url,system_user_password)

配置文件

#创建数据库

因为是用 kolla 创建的数据库

数据库密码

cat /etc/kolla/passwords.yml |grep ^database_password
docker exec -it mariadb bash

# 1.连接到数据库
mysql -uroot -p数据库root用户密码
# 2.创建skyline数据库
CREATE DATABASE IF NOT EXISTS skyline DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
# 3.创建skyline数据库用户,并设置密码为 SKYLINE_DBPASS
GRANT ALL PRIVILEGES ON skyline.* TO 'skyline'@'localhost' IDENTIFIED BY 'SKYLINE_DBPASS';
GRANT ALL PRIVILEGES ON skyline.* TO 'skyline'@'%'  IDENTIFIED BY 'SKYLINE_DBPASS';

#创建服务凭证

openstack user create --domain default --password SKYLINE_PASS  skyline
openstack role add --project service --user skyline admin

#运行 skyline_bootstrap 容器进行初始化引导

# 进行初始化
docker run -d --name skyline_bootstrap -e KOLLA_BOOTSTRAP="" -v /etc/skyline/skyline.yaml:/etc/skyline

# 检查日志输出结尾是否是"exit 0"
docker logs skyline_bootstrap

#运行 skyline 服务

# 删除引导容器
docker rm -f skyline_bootstrap

# 启动skyline服务容器
docker run -d --name skyline --restart=always -v /etc/skyline/skyline.yaml:/etc/skyline/skyline.yaml --net=host 99cloud/skyline:latest
暂无评论

发送评论 编辑评论


|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇