使用kolla-ansible单点部署openstack云平台
使用kolla-ansible单点部署openstack云平台
项目三: 云基础架构平台部署
【学习目标】
【知识目标】
学习 OpenStack 的多种部署方式。
学习 Kolla-ansible 概念。
学习 Ansible 概念。
【技能目标】
掌握 Kolla-ansible 部署模式搭建云平台的技能。
具备 OpenStack 云平台部署的能力。
掌握云平台扩容的方法。
【素养目标】
激发创新思维与探索精神,促进科学态度的形成。
培育诚信为本的道德品质,树立忠诚可靠的行为准则。
塑造精益求精的工作态度,追求严谨细致的职业风范。
【项目实施】
任务 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/| |g’ /etc/yum.repos.d/openEuler.repo
all-in-one 节点更新系统软件包,以获得最新的功能支持。
[root@controller ~]# dnf -y update && dnf -y upgrade
[root@controller ~]# reboot
修改网卡地址
按照规划节点的
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 =
[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:
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 环境初始配置
修改主机清单文件
进入
/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
检查主机清单文件是否配置正确
使用以下命令测试主机能否连通。
[root@controller ~]# ansible -m ping all
localhost | SUCCESS => {
“ansible_facts”: {
“discovered_interpreter_python”: “/usr/bin/python3.10”
},
“changed”: false,
“ping”: “pong”
}
配置
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
编辑
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: "
"
gpgcheck: "
true
"
gpgkey: "
"
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”: [
“ ”,
“ ”,
“ ”,
“ ”,
“ ”,
“ ”,
“ ”,
“ ”,
“ ”,
“ ”,
“ ”,
“ ”,
“ ”,
“ ”,
“ ”,
“ ”,
“ ”,
“ ”,
“ ”,
“ ”
]
}
[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
组件说明
创建
Skyline
服务的数据库
在
MariaDB
容器中创建
Skyline
服务的数据库并赋予远程访问权限,命令及执行结果
如下所示。
查询数据库登录密码
38
[root@controller ~]# grep ^database /etc/kolla/passwords.yml
查询运行数据库服务的容器
ID
[root@controller ~]# docker container ls -f name=mariadb –format=’{ {.ID}}’
24200bbea954
进入数据库容器创建
S
kyline
服务的数据库并赋予远程访问权限
[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)
创建
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
修改
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.yam
l
[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_ :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
运行
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: )
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用户登录