使用kolla-ansible单点部署openstack云平台

发布于:2025-03-11 ⋅ 阅读:(28) ⋅ 点赞:(0)

目录

任务 3.1 云基础环境构建

3.1.1 规划节点

3.1.2 环境准备

3.1.3 系统基本环境设置

3.1.4 安装 Ansible 和 Kolla-ansible

3.1.5 Ansible 运行配置优化

3.1.6 Kolla-ansible 环境初始配置

3.1.7 部署集群环境

3.1.8 OpenStackCLI 客户端设置

3.1.9 安装 Skyline 服务


项目三:云基础架构平台部署

【学习目标】

【知识目标】

1. 学习 OpenStack 的多种部署方式。

2. 学习 Kolla-ansible 概念。

3. 学习 Ansible 概念。

【技能目标】

1. 掌握 Kolla-ansible 部署模式搭建云平台的技能。

2. 具备 OpenStack 云平台部署的能力。

3. 掌握云平台扩容的方法。

【素养目标】

1. 激发创新思维与探索精神,促进科学态度的形成。

2. 培育诚信为本的道德品质,树立忠诚可靠的行为准则。

3. 塑造精益求精的工作态度,追求严谨细致的职业风范。

【项目实施】

任务 3.1 云基础环境构建

在本项目实践中,编者将逐步演示如何利用 Kolla-Ansible 工具从零开始搭

建单节点 OpenStack 环境,为实际私有云平台建设提供实践参考。

3.1.1 规划节点

单节点部署 OpenStack 云平台,各节点主机名和 IP 地规划见表 3-1。

表 3-1 各节点主机名和 IP 地址规划列表(单节点部署模式下)

IP

192.168.100.10

192.168.143.129

192.168.104.200

网卡

仅主机

Nat

桥接

作用

管理网络

数据网络

外部网络

3.1.2 环境准备

在物理机上申请一台安装 openEuler-22.09 操作系统的虚拟机作为 OpenStack all-in-one

节点,处理器处勾选“虚拟化 IntelVT-x/EPT 或 AMD-V/RVI(V)”。all-in-one 节点类型为 8

vCPU12 GB内存、100 GB系统硬盘。需要给虚拟机设置三个网络接口,网络接口 1 设置为 外部网络,其网卡使用 NAT 模式,主要作为该节点的数据网络,在集群部署完成后创建的云主机便使用的是网络接口 1 的网卡,网络接口 2 设置为内部网络,其网卡使用仅主机模式,作为该节点的通信和管理使用;网络接口3 设置为外部网络,其网卡使用桥接模式,为本节点提供下包等等服务

3.1.3 系统基本环境设置

1. 修改主机名

[root@localhost ~]# hostnamectl set-hostname controller

[root@localhost ~]#  bash

[root@controller ~]#

2. 更新系统软件包

配置华为源

参考华为官方镜像网站:华为开源镜像站_软件开发服务_华为云

sed -i 's|http://repo.openeuler.org/| https://repo.huaweicloud.com/|g' /etc/yum.repos.d/openEuler.repo

all-in-one 节点更新系统软件包,以获得最新的功能支持。

[root@controller ~]# dnf -y update && dnf -y upgrade

[root@controller ~]# reboot

3. 修改网卡地址

按照规划节点的 IP 规划,配置 all-in-one 节点的静态 IP 地址,修改以下示例配置中的

参数。

[root@localhost ~]# ip a

这里由于是做完写的文档,后续nat网卡会被neutron组件服务占用,所以这里没有ip,正常是有的

[root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens160

[root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens224

[root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens256

载入网卡配置并启动相应的网卡。

[root@controller ~]# nmcli c reload

[root@controller ~]# nmcli c up ens160

[root@controller ~]# nmcli c up ens224

[root@controller ~]# nmcli c up ens256

3.1.4 安装 Ansible Kolla-ansible

为了可以使用 pip3 安装和管理 Python3 软件包,安装 pip3

[root@controller ~]# dnf -y install python3-pip

使用镜像源来加速 pip 安装包的下载速度。

[root@controller ~]# mkdir .pip

[root@controller ~]# cat << EFO > .pip/pip.conf

[global]

index-url = https://pypi.tuna.tsinghua.edu.cn/simple

[install]

trusted-host=pypi.tuna.tsinghua.edu.cn

EFO

更新 Python3 中的 pip 工具到最新版本,保证 pip 工具的可用性和安全性。

[root@controller ~]#  pip3 install --ignore-installed --upgrade pip

使用以下命令安装 Ansible,并查看所安装的版本号。

[root@controller ~]#  pip3 install -U 'ansible>=4,<6'

[root@controller ~]#  ansible --version

Ansible的版本会直接影响后续安装kolla-ansible的版本

安装 Kolla-ansible Kolla-ansible 环境必需的依赖项。

[root@controller ~]# dnf -y install git python3-devel libffi-devel gcc openssl-devel python3-libselinux

[root@controller ~]# dnf -y install openstack-kolla-ansible

[root@controller ~]# kolla-ansible --version

14.2.0

创建 Kolla-ansible 配置文件目录。

[root@controller ~]# mkdir -p /etc/kolla/{globals.d,config}

kolla目录所有者和所属组均设置为root用户

[root@controller ~]# chown $USER:$USER /etc/kolla

inventory 文件复制到/etc/ansible 目录。

[root@controller ~]# mkdir /etc/ansible

[root@controller ~]# cp /usr/share/kolla-ansible/ansible/inventory/* /etc/ansible

随着 Kolla-ansible 版本的更迭, Yoga 版本已经被删除,这里直接使用master版本即可

执行以下命令进行修改。

[root@localhost ~]# cd /usr/share/kolla-ansible

[root@localhost kolla-ansible]# ls

ansible  requirements.yml  setup.cfg

此文件用于拉取ansible-collection-kolla仓库,以下载python依赖以及ansible依赖

[root@localhost kolla-ansible]# vi requirements.yml

[root@localhost kolla-ansible]# cat requirements.yml

---

collections:

  - name: https://opendev.org/openstack/ansible-collection-kolla

    type: git

    version: master

安装 Ansible Galaxy 的依赖项,

[root@controller ~]# pip3 install cryptography==38.0.4

[root@controller ~]# kolla-ansible install-deps

3.1.5 Ansible 运行配置优化

在使用 Kolla-ansible 部署 OpenStack 时,它会执行大量的命令和任务,因此对 Ansible

进行调优可以加快执行速度,具体的优化如下。

[root@controller ~]# cat /etc/ansible/ansible.cfg

[defaults]

#SSH 服务关闭密钥检测

host_key_checking=False

#如果不使用 sudo,建议开启

pipelining=True

#执行任务的并发数

forks=100

timeout=800

#禁用警告#

devel_warning = False

deprecation_warnings=False

#显示每个任务花费的时间

callback_whitelist = profile_tasks

25#记录 Ansible 的输出,相对路径表示

log_path= wxic_cloud.log

#主机清单文件,相对路径表示

inventory = yoga_all-in-one

#命令执行环境,也可更改为/bin/bash

executable = /bin/sh

remote_port = 22

remote_user = root

#默认输出的详细程度

#可选值 01234

#值越高输出越详细

verbosity = 0

show_custom_stats = True

interpreter_python = auto_legacy_silent

[colors]

#成功的任务绿色显示

ok = green

#跳过的任务使用亮灰色显示

skip = bright gray

#警告使用亮紫色显示

warn = bright purple

[privilege_escalation]

become_user = root

[galaxy]

display_progress = True

修改好以后,可以使用 ansible-config view 命令查看。

[root@controller ~]# ansible-config view

[defaults]

#SSH 服务关闭密钥检测

host_key_checking=False

… … …

3.1.6 Kolla-ansible 环境初始配置

1. 修改主机清单文件

进入/etc/ansible 目录,将提供的主机清单 all-in-one 文件过滤掉注释和空行,覆盖到

yoga_all-in-one 文件。

[root@controller ~]# cd /etc/ansible/

[root@controller ansible]# awk '!/^#/ && !/^$/' all-in-one > yoga_all-in-one

2. 检查主机清单文件是否配置正确

使用以下命令测试主机能否连通。

[root@controller ~]# ansible -m ping all

localhost | SUCCESS => {

"ansible_facts": {

"discovered_interpreter_python": "/usr/bin/python3.10"

},

"changed": false,

"ping": "pong"

}

3. 配置 OpenStack 各服务组件的密码

在使用 Kolla-ansible 部署 OpenStack Yoga 平台时 ,各个服务 组件的密码 存储在

/etc/kolla/passwords.yml 文件中,此文件默认所有的密码是空白的,必须手动或者通过运行

随机密码生成器来填写,在部署时建议使用随机密码生成器来生成各个服务的密码,命令

如下。

[root@controller ~]# kolla-genpwd

# 修改 Horizon 界面登录密码为 wxic@2024

[root@controller ~]# sed -i 's/keystone_admin_password: .*/keystone_admin_password: wxic@2024/g' /etc/kolla/passwords.yml

# 验证修改结果

[root@controller ~]# grep keystone_admin /etc/kolla/passwords.yml

keystone_admin_password: wxic@2024

4. 编辑 globals.yml 文件

本次部署 all-in-one 时只安装了 OpenStack 的核心组件,在 globals.yml 指定参数

enable_openstack_core: "yes",安装 GlanceKeystoneNeutronNovaHeat Horizon

务,其中要注意一个选项是 kolla_internal_vip_address 的地址,因为本次 Haproxy

keepalived 都未启用,故该地址为 ens224 网卡的地址(本次部署使用 192.168.100.10),部

署完成后使用该地址登录 Horizon

[root@controller ~]# cd /etc/kolla/

[root@controller ~]#/etc/kolla# cp globals.yml{,_bak}

[root@controller ~]#vi /etc/kolla/globals.yml

---

docker_kernel_memory: 0

docker_registry: "quay.nju.edu.cn"

kolla_base_distro: "ubuntu"

kolla_install_type: "source"

openstack_release: "yoga"

kolla_internal_vip_address: "192.168.100.10"

kolla_sysctl_conf_path: /etc/sysctl.conf

docker_client_timeout: 120

network_interface: "ens224"

network_address_family: "ipv4"

neutron_external_interface: "ens160"

neutron_plugin_agent: "openvswitch"

neutron_ipam_driver: "internal"

openstack_region_name: "RegionWxic"

openstack_logging_debug: "False"

enable_openstack_core: "yes"

glance_backend_file: "yes"

nova_compute_virt_type: "kvm"

nova_console: "novnc"

enable_haproxy: "no"

enable_keepalived: "no"

/etc/kolla/config/目录自定义 Neutron 服务的一些配置,这将在部署集群时使用自定

义的配置覆盖掉默认的配置。

[root@controller ~]# cd /etc/kolla/config/

[root@controller config]# mkdir neutron

[root@controller config]# cat << MXD > neutron/dhcp_agent.ini

[DEFAULT]

dnsmasq_dns_servers = 8.8.8.8,223.6.6.6,119.29.29.29

MXD

[root@controller config]# cat << MXD > neutron/ml2_conf.ini

[ml2]

tenant_network_types = flat,vxlan,vlan

[ml2_type_vlan]

network_vlan_ranges = provider:10:1000

[ml2_type_flat]

flat_networks = provider

MXD

[root@controller config]# cat << MXD > neutron/openvswitch_agent.ini

[securitygroup]

firewall_driver = openvswitch

[ovs]

bridge_mappings = provider:br-ex

MXD

3.1.7 部署集群环境

all-in-one 节点安装 OpenStack CLI 客户端。

[root@controller ~]# dnf -y install python3-openstackclient

为了使部署的 all-in-one 节点网络路由正常工作,需要在 Linux 系统中启用 IP 转发功能,

修改所有节点的/etc/sysctl.conf 文件,并配置在系统启动时自动加载 br_netfilter 模块,具体

操作如下。

将这三项添加到/etc/sysctl.conf中,有则修改,无则添加

net.ipv4.ip_forward=1

net.bridge.bridge-nf-call-ip6tables=1

net.bridge.bridge-nf-call-iptables=1

# 临时加载模块,重启后失效

[root@controller ~]# modprobe br_netfilter

# 重新加载配置

[root@controller ~]# sysctl -p /etc/sysctl.conf

# 创建 yoga.service 文件,设置系统开机自动加载 br_netfilter 模块

[root@controller ~]# cat << MXD > /usr/lib/systemd/system/yoga.service

[Unit]

Description=Load br_netfilter and sysctl settings for OpenStack

[Service]

Type=oneshot

RemainAfterExit=yes

ExecStart=/sbin/modprobe br_netfilter

ExecStart=/usr/sbin/sysctl -p

[Install]

WantedBy=multi-user.target

MXD

[root@controller ~]# systemctl enable --now yoga.service

Created symlink /etc/systemd/system/multi-user.target.wants/yoga.service →

/lib/systemd/system/yoga.service.

all-in-one 节点使用命令安装 OpenStack 集群所需要的基础依赖项和修改一些配置文

件,如安装 Docker 和修改 Hosts 文件等。

[root@controller ~]# kolla-ansible bootstrap-servers

执行结果和用时(单节点部署模式下使用命令安装基础依赖项和配置文件)

解决执行命令报错,未安装docker的问题

  1. 思考为什仫会失败呢

查看/etc/yum.repo

[root@controller ~]# ls /etc/yum.repos.d/

backup.repo  docker.repo 

发现已经配置了docker的源,尝试手动部署发现docker用不了

猜测应该是kolla-ansible默认配置的docker不适配欧拉系统

配置centos7 的docker源

[root@controller ~]# vi $HOME/.ansible/collections/ansible_collections/openstack/kolla/roles/docker/tasks/repo-RedHat.yml

---

- name: Ensure yum repos directory exists

  file:

    path: /etc/yum.repos.d/

    state: directory

    recurse: true

  become: true

- name: Enable docker yum repository

  yum_repository:

    name: docker

    description: Docker main Repository

    baseurl: " https://mirrors.aliyun.com/docker-ce/linux/centos/7/x86_64/stable "

    gpgcheck: "true"

    gpgkey: "https://mirrors.aliyun.com/docker-ce/linux/centos/gpg"

    # NOTE(yoctozepto): required to install containerd.io due to runc being a

    # modular package in CentOS 8 see:

    # https://bugzilla.redhat.com/show_bug.cgi?id=1734081

    module_hotfixes: true

  become: true

- name: Install docker rpm gpg key

  rpm_key:

    state: present

    key: "{{ docker_yum_gpgkey }}"

  become: true

  when: docker_yum_gpgcheck | bool

rm -rf /etc/yum.repos.d/docker.repo

再次尝试部署

[root@controller ~]# kolla-ansible bootstrap-servers

查看docker信息

Docker 默认的镜像拉取地址在国外,在国内拉取镜像速度就比较慢,可以修改国内镜

像地址来加速镜像的拉取,编辑 all-in-one 节点/etc/docker/daemon.json 文件,添加 registry-

mirrors 部分的内容,下面给出 all-in-one 节点修改的示例。

[root@controller ~]# cat /etc/docker/daemon.json

{

"bridge": "none",

"default-ulimits": {

"nofile": {

"hard": 1048576,

"name": "nofile",

"soft": 1048576

}

},

"ip-forward": false,

"iptables": false,

 "registry-mirrors": [

    "https://dockerhub.icu",

    "https://docker.chenby.cn",

    "https://docker.1panel.live",

    "https://docker.awsl9527.cn",

    "https://docker.anyhub.us.kg",

    "https://dhub.kubesre.xyz",

    "https://docker.registry.cyou",

    "https://docker-cf.registry.cyou",

    "https://dockercf.jsdelivr.fyi",

    "https://docker.jsdelivr.fyi",

    "https://dockertest.jsdelivr.fyi",

    "https://mirror.aliyuncs.com",

    "https://dockerproxy.com",

    "https://mirror.baidubce.com",

    "https://docker.m.daocloud.io",

    "https://docker.nju.edu.cn",

    "https://docker.mirrors.sjtug.sjtu.edu.cn",

    "https://docker.mirrors.ustc.edu.cn",

    "https://mirror.iscas.ac.cn",

    "https://docker.rainbond.c"

  ]   

}

[root@controller ~]# systemctl daemon-reload

[root@controller ~]# systemctl restart docker

all-in-one 节点进行部署前检查,openEuler22.09 系统执行过程中如果出现"openEuler

release NA version 22.09 is not supported. Supported releases are: 20.03"提示,不必理会继续接

下来的操作,不会影响后面的部署。

[root@controller ~]# kolla-ansible prechecks

all-in-one 节点使用以下命令下载 OpenStack 集群 all-in-one 节点所需要的全部镜像,

执行结果和用时如图 3-4 所示。

[root@controller ~]# docker pull 99cloud/skyline:latest

[root@controller ~]# kolla-ansible pull

all-in-one 节点执行以下命令部署 OpenStack 集群,

[root@controller ~]# kolla-ansible deploy

执行结果和用时(单节点部署模式下部署 OpenStack 集群)

上述步骤完成后,OpenStack 集群部署结束,所有的服务已经启动并正常运行,输入

globals.yml 文件中定义的 kolla_internal_vip_address 地址在浏览器登录 Horizon 界面,用户

名为 admin,密码为 passwords.yml 文件中 keystone_admin_password 的值 wxic@2024,单

节点部署模式下的 Horizon 登录和概览界面

Horizon 概览界面(单节点部署模式)

3.1.8 OpenStackCLI 客户端设置

OpenStack 集群部署完成 后,客户端执行命令则需要 生成 clouds.yaml admin-

openrc.sh 文件,这些是管理员(admin)用户的凭据,执行以下命令,执行结果和用时如

3-8 所示。

3334

[root@controller ~]# kolla-ansible post-deploy

执行以下命令,将生成的文件移动到/etc/openstack 目录下,并在/etc/profile.d/目录编写

/openstack-yoga.sh 脚本。

[root@controller ~]# mkdir /etc/openstack

[root@controller ~]# mv /etc/kolla/admin-openrc.sh /etc/openstack/

[root@controller ~]# cat << MXD > /etc/profile.d/openstack-yoga.sh

#!/usr/bin/env bash

source /etc/openstack/admin-openrc.sh

MXD

# 重启终端后便可以正常使用 openstack 命令

[root@controller ~]# logout

使用 OpenStack 相关命令验证客户端是否可以正常使用和服务是否正常启动,

[root@controller ~]# openstack service list

[root@controller ~]# openstack compute service list

[root@controller ~]# openstack network agent list

可以发现,所有命令都可以正常使用,并且服务状态正常,下面查看本次部署

OpenStack 版本的详细信息,包括各个组件的版本号,如下所示。

[root@controller ~]# openstack version show

3.1.9 安装 Skyline 服务

Skyline 是新一代的 OpenStack 管理界面,由九州云于 2021 9 月捐献给 OpenStack

区。同年 12 月末,Skyline 孵化完成,成为 OpenStack 正式项目。2022 年,Skyline 开发团

队完成了 OpenStack 的代码重构,并增加了对 OctaviaManilaSwiftBarbicanZun

Trove 等社区模块的支持。Skyline 团队也通过企业微信群与社区开发者、社区用户进行了

很多轮的互动讨论。2022 10 5 日,Skyline 第一个正式版本随 OpenStack Yoga 正式发

布。

Skyline 不仅提供了 OpenStack 基础服务(如计算、存储、网络的操作界面),也支持

许多增值服务(如文件存储、对象存储、负载均衡、数据库等服务)。一旦完成部署,

Skyline 不依赖任何插件就能迅速调用各种云服务接口,满足企业级的生产需求。云上的虚

拟机、容器、K8s 集群、RDSRelational Database Service,关系数据库服务)数据库、负

载均衡等各种资源,都能在 Skyline 的平台上完成全生命周期管理。

Skyline 1.0.0 版本已完成表 3-2 中组件的对接,并支持完整的图形化操作界面。

3-2 Skyline 1.0.0 组件说明

     

1. 创建 Skyline 服务的数据库

MariaDB 容器中创建 Skyline 服务的数据库并赋予远程访问权限,命令及执行结果

如下所示。

# 查询数据库登录密码38

[root@controller ~]# grep ^database /etc/kolla/passwords.yml

# 查询运行数据库服务的容器 ID

[root@controller ~]#  docker container ls -f name=mariadb --format='{{.ID}}'

24200bbea954

# 进入数据库容器创建 Skyline 服务的数据库并赋予远程访问权限

[root@controller ~]# docker exec -it 24200bbea954 sh  

(mariadb)[mysql@controller /]$ mysql -uroot -p3HxaoYzygz9p3zOKQeFlClBBKUzbu6hskgPXnHU7

Welcome to the MariaDB monitor. Commands end with ; or \g.

Your MariaDB connection id is 30361

Server version: 10.6.11-MariaDB-1:10.6.11+maria~deb11-log mariadb.org binary

distribution

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> CREATE DATABASE skyline DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci

Query OK, 1 row affected (0.004 sec)

MariaDB [(none)]> GRANT ALL PRIVILEGES ON skyline. * TO'skyline'@'localhost' IDENTIFIED BY 'mariadb_yoga';

Query OK, 0 rows affected (0.006 sec)

MariaDB [(none)]> GRANT ALL PRIVILEGES ON skyline. * TO 'skyline'@' %' IDENTIFIED BY 'mariadb_yoga';

Query OK, 0 rows affected (0.005 sec)

MariaDB [(none)]> flush privileges;

Query OK, 0 rows affected (0.005 sec)

2. 创建 Skyline 用户并添加 admin 角色

创建 Skyline 服务的新用户 skyline,密码为 wxic@yoga,在默认域 default 中创建,并

Skyline 用户分配 admin 角色。

[root@controller ~]# openstack user create --domain default --password wxic@yoga

skyline

[root@controller ~]# openstack role add --project service --user skyline admin

3. 修改 Skyline 服务配置文件

创建 Skyline 服务需要的配置文件目录和日志文件目录。

[root@controller ~]# mkdir -p /etc/skyline /var/log/skyline /var/lib/skyline /var/log/nginx

/etc/skyline 目 录 创 建 并 修 改 skyline.yaml 配 置 文 件 , 该 示 例 文 件 最 新 版 可 在

OpenStack 官方帮助文档的 settings 界面找到,修改 skyline.yaml 配置文件中的如下几项内

容。

database_url:定义数据库名称和远程连接地址。

debug:是否启用 debug 功能。建议不启用,启用之后会产生大量的日志文件,非开

发人员没有必要启用。

log_dir:定义日志存放目录(上面步骤中创建的/var/log/skyline 目录)。

keystone_urlKeystone 服务的认证地址。

default_region:集群区域名。

system_user_password:已创建的 Skyline 用户的密码。

# 查询 keystone 内部服务端点地址

[root@controller ~]# openstack endpoint list --interface internal \

--service keystone -f value -c URL

# 创建配置文件 skyline.yaml

[root@controller ~]# vi /etc/skyline/skyline.yaml

default:

  access_token_expire: 3600

  access_token_renew: 1800

  cors_allow_origins: []

  # MySQL连接地址及密码

  database_url: mysql://skyline:mariadb_yoga@192.168.233.100:3306/skyline

  debug: false

  log_dir: /var/log/skyline

  log_file: skyline_wxic.log

  prometheus_basic_auth_password: 'wxic@yoga'

  prometheus_basic_auth_user: ''

  prometheus_enable_basic_auth: false

  prometheus_endpoint: http://192.168.233.100:9091

  secret_key: aCtmgbcUqYUy_HNVg5BDXCaeJgJQzHJXwqbXr0Nmb2o

  session_name: session

  ssl_enabled: true

openstack:

  base_domains:

    - heat_user_domain

  # 修改默认区域

  default_region: RegionWxic

  enforce_new_defaults: true

  extension_mapping:

    floating-ip-port-forwarding: neutron_port_forwarding

    fwaas_v2: neutron_firewall

    qos: neutron_qos

    vpnaas: neutron_vpn

  interface_type: public

  # keystone 认证地址

  keystone_url: http://192.168.233.100:5000/v3/

  nginx_prefix: /api/openstack

  reclaim_instance_interval: 604800

  service_mapping:

    baremetal: ironic

    compute: nova

    container: zun

    container-infra: magnum

    database: trove

    identity: keystone

    image: glance

    key-manager: barbican

    load-balancer: octavia

    network: neutron

    object-store: swift

    orchestration: heat

    placement: placement

    sharev2: manilav2

    volumev3: cinder

  sso_enabled: false

  sso_protocols:

    - openid

  # 修改 region 名

  sso_region: RegionWxic

  system_admin_roles:

    - admin

    - system_admin

  system_project: service

  system_project_domain: Default

  system_reader_roles:

    - system_reader

  system_user_domain: Default

  system_user_name: skyline

  # skyline 用户密码

  system_user_password: 'wxic@yoga'

setting:

  base_settings:

    - flavor_families

    - gpu_models

    - usb_models

  flavor_families:

    - architecture: x86_architecture

      categories:

        - name: general_purpose

          properties: []

        - name: compute_optimized

          properties: []

        - name: memory_optimized

          properties: []

        - name: high_clock_speed

          properties: []

    - architecture: heterogeneous_computing

      categories:

        - name: compute_optimized_type_with_gpu

          properties: []

        - name: visualization_compute_optimized_type_with_gpu

          properties: []

  gpu_models:

    - nvidia_t4

  usb_models:

    - usb_c  

4. 运行 Skyline 服务

运行初始化引导容器生成数据库 Skyline 的表结构,并查看日志以验证数据库是否正常

连接和表结构的创建。

[root@controller ~]# docker run -d --name skyline_bootstrap \

-e KOLLA_BOOTSTRAP="" \

-v /etc/skyline/skyline.yaml:/etc/skyline/skyline.yaml \

-v /var/log:/var/log \

--net=host 99cloud/skyline:latest

# 查看 skyline_bootstrap 容器的日志

[root@controller ~]# docker logs -f skyline_bootstrap

1.日志报错解决

这里我出现了报错

sqlalchemy.exc.OperationalError: (pymysql.err.OperationalError) (1045, "Access denied for user 'skyline'@'controller' (using password: YES)")

(Background on this error at: https://sqlalche.me/e/20/e3q8)

make: *** [Makefile:119: db_sync] Error 1

这里凡是接触过数据库的应该可以看出是数据库没有连上

先进行测试为什仫没有连上

进入mysql容器

[root@controller ~]# docker  exec -it --name mariadb 24200bbea954

然后进行远程连接测试

(mariadb)[mysql@controller /]$ mysql -h 192.168.100.10 -u skyline -p

Enter password:

ERROR 1045 (28000): Access denied for user 'luo'@'controller' (using password: YES)

可以看到没有成功,当时我就在想会不会权限没给到skyline用户

登录root查询权限

MariaDB [(none)]> SHOW GRANTS FOR 'skyline'@'%';

ERROR 1141 (42000): There is no such grant defined for user 'skyline' on host '%'

发现他没有权限,于是设权限允许所有主机连接,不再像前面那样只允许本地主机连接

CREATE USER 'skyline'@'%' IDENTIFIED BY 'mariadb_yoga';

GRANT ALL PRIVILEGES ON *.* TO 'skyline'@'%';

再次查询

SHOW GRANTS FOR 'skyline'@'%';

可以看到已经具有所有权限

再次查看 skyline_bootstrap 容器的日志

[root@controller ~]# docker logs -f skyline_bootstrap

skyline_bootstrap容器的作用是生成 Skyline 服务的数据库的表结构,经查询,生成了alembic_version、revoked_token、settings 三张表结构,查询结果如下所示。

show tables;

describe alembic_version;

describe revoked_token;

describe settings;

表结构创建成功后,删除数据库初始化引导容器 skyline_bootstrap。

[root@controller ~]# docker rm -f skyline_bootstrap skyline_bootstrap

运行 skyline-apiserver 服务容器 skyline,设置重启策略为 always,并挂载配置文件和日志目录的数据卷,将容器的网络连接设置为主机的网络。

[root@controller ~]# docker run -d --name skyline --restart=always \

-v /etc/skyline/skyline.yaml:/etc/skyline/skyline.yaml \

-v /var/log:/var/log \

-e LISTEN_ADDRESS=192.168.100.10:9942 \

--net=host 99cloud/skyline:latest

# 查询容器运行日志

 [root@controller ~]# docker logs -f skyline

Skyline 服务组件安装结束,在浏览器访问 http://192.168.100.10:9942 地址便可以看到如图 3-9 所示的 Skyline 登录界面,输入用户名和密码登录后,可看到如图3-10 所示的Skyline 首页界面。

这里可以使用admin管理员登录也可使用skyline用户登录