目录
3.1.4 安装 Ansible 和 Kolla-ansible
项目三:云基础架构平台部署
【学习目标】
【知识目标】
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
vCPU、12 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
#默认输出的详细程度
#可选值 0、1、2、3、4 等
#值越高输出越详细
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",安装 Glance、Keystone、Neutron、Nova、Heat 和 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的问题
- 思考为什仫会失败呢
查看/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 的代码重构,并增加了对 Octavia、Manila、Swift、Barbican、Zun、
Trove 等社区模块的支持。Skyline 团队也通过企业微信群与社区开发者、社区用户进行了
很多轮的互动讨论。2022 年 10 月 5 日,Skyline 第一个正式版本随 OpenStack Yoga 正式发
布。
Skyline 不仅提供了 OpenStack 基础服务(如计算、存储、网络的操作界面),也支持
许多增值服务(如文件存储、对象存储、负载均衡、数据库等服务)。一旦完成部署,
Skyline 不依赖任何插件就能迅速调用各种云服务接口,满足企业级的生产需求。云上的虚
拟机、容器、K8s 集群、RDS(Relational 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_url:Keystone 服务的认证地址。
⑤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用户登录