不仅是安装,Kolla 让 OpenStack 运维变简单

使用 kolla 部署的 OpenStack 环境和传统直接安装的环境相比较,由于使用了全容器化部署,基本操做上有很大不一样。对于初学者,操做变得更清晰和更简单了,可是若是你已经有了必定的经验,可能反而会不习惯。html

本篇文章就以“建立实例”这个最简单的任务,带你掌握最基本最经常使用的操做。docker

概述

上一篇文章中,咱们把环境搭建完成,登陆以后就结束了。今天的任务就是初步验证环境的可用性,最直接的办法莫过于建立一个虚拟机了。shell

这不是一个零基础的 OpenStack 教程,如下内容假定读者已有必定的基本操做经验。json

准备工做

首先,为了可以启动一个虚机,至少须要完成下面的准备工做:api

  • 新建镜像
  • 新建规格
  • 新建网络

这些操做都将在 dashboard 上完成,不涉及后台,因此和其它环境并无什么不一样。bash

新建镜像

首先下载一个专门用来测试的迷你 Linux 系统镜像,CirrOS,进入下载页面 后选择最新的 0.4.0 版本:网络

选择最新的版本

针对不一样的 CPU 架构和使用场景,有不一样的镜像格式:架构

注意选择正确的架构和格式

点击直接下载最新的 64 位版本 cirros-0.4.0-x86_64-disk.img,镜像的文件格式是 qcow2tcp

qcow2 是镜像的格式,有时保存为 .img 后缀,可用 file 命令查看。ide

$ file cirros-0.4.0-x86_64-disk.img 
 cirros-0.4.0-x86_64-disk.img: QEMU QCOW Image (v3), 46137344 bytes

新建规格

由于咱们在 VirtualBox 虚机中部署的 All-In-One 环境,自己也没有多少资源可用了,CirrOS 系统也不须要不少内存,咱们就建立一个迷你的规格,

  • 1 vCPU
  • 512 MB 内存
  • 1 GB 存储

知足测试便可。

新建网络

Kolla 部署环境时,已经默认配置了 VxLAN 类型的隧道网络,咱们直接建立租户网络便可。

建立租户网络

还记得咱们安装系统时的第 2 块网卡么,那是专门给 Neutron 的外部网络准备的,本次实验咱们暂时还用不到。

新建实例

而后开始新建实例,若是不出意外会遇到以下错误:

虚机建立错误

建立失败~~ 接下来让咱们去后台检查并解决。

这里有可能会遇到另外一个问题,错误日志会显示消息超时,错误缘由是 nova-scheduler 服务在系统重启后有必定概率会启动失败,请参考下面的指导,重启服务便可。

检查服务状态

在日常部署的环境里,OpenStack 的各个服务安装后会在系统里注册为后台服务,咱们查看服务的命令是和操做系统相关,例如:

$ systemctl status openstack-nova-api

使用了 kolla 部署的环境,全部的服务都是在 docker 容器中启动的,咱们直接查看容器的状态就能够了:

$ sudo docker ps

docker ps

能够看到每一个服务都对应到一个容器。好比 nova 有几个子服务,nova-apinova-compute 等,都是独立的容器。正如我前面说的,相对于觉得的环境,对新手来讲,到底一套 OpenStack 系统有哪些服务在运行,可能还不那么清楚,如今看上去一目了然。

注意,服务名是减号 - 链接,而容器的名字是用下划线 _ 链接

大部分状况下,容器内的服务出现问题,致使容器状态异常的状况下,它们都会自动重启。固然,也可能会有启动不了的状况。这时候,使用 docker ps 命令只会显示已经启动的容器,不能表明你们都正常,必须加上 -a 选项,列出全部容器:

$ sudo docker ps -a

各个容器看上去没什么异常,咱们去检查一下服务的日志。

查日志

传统的安装方式中,每一个服务在 /var/log 目录下有各自的日志文件保存路径,例如 /var/log/nova

如今每一个服务都是一个容器,咱们天然会想到登入到容器里面,查看相应的日志文件:

[kolla@control01 ~]$ sudo docker exec -it nova_compute bash
(nova-compute)[nova@control01 /]$ cd /var/log/nova/
(nova-compute)[nova@control01 /var/log/nova]$ ls
(nova-compute)[nova@control01 /var/log/nova]$     <-- 空的

居然是空的!不过不用着急。咱们不妨先思考下若是日志文件真的保存在容器中会怎样?

一个问题,或者说一个业务流程,每每会涉及到多个服务,也就是说,平常在排查问题时,须要查看多个日志文件。因此能够想见,像这样每一个容器逐个进去查看文件,会很是地不方便。

另外,容器的特色之一,就是但愿它是无状态的,咱们可能随时会从新建立一个容器,若是日志只是简单地存在容器里,那么每次重建容器,日志内容也就丢失了。这里你可能会想到,用 docker volume 不就解决问题了么。

事实上,kolla 作的更好。它用了更专业日志收集工具 Fluentd 来汇总全部服务产生的日志。具体的技术细节咱们之后有空再深刻研究。

如今咱们只须要知道,全部的日志文件在容器外面就能够查看,它们集中存放在 /var/log/kolla/ 目录中。

这里虚机建立失败的问题,咱们能够查看 nova-compute 日志:

vi /var/log/kolla/nova/nova-compute.log

nova-compute 日志

从错误提示能够看到,是由于 kvm 的问题,咱们使用的是虚拟机,因此无法支持这个特性,必须修改一下,使用纯软件的(即 qemu)虚拟化。

在虚拟机中建立虚机还能够经过开启 KVM 嵌套虚拟化的特性来实现,可是 VirtualBox 貌似不支持。

修改配置(错误的方式)

配置文件在容器中的位置和咱们日常环境中的并没有不一样:

[root@control01 ~]# docker exec -it nova_compute bash
(nova-compute)[nova@control01 /]$ cd /etc/nova/
(nova-compute)[nova@control01 /etc/nova]$ ls
api-paste.ini  nova.conf  policy.json  release  rootwrap.conf

咱们先按照常规方法修改,将下面的 kvm 修改成 qemu 后保存退出:

(nova-compute)[nova@control01 /]$ cd /etc/nova/
(nova-compute)[nova@control01 /etc/nova]$ vi nova.conf 

[libvirt]
connection_uri = qemu+tcp://10.10.10.1/system
virt_type = kvm

改完配置以后的问题是,如何重启服务让修改生效呢?

重启服务

若是你对 docker 比较熟悉的话,应该知道容器里面是没有 systemd 的,服务都是在前台运行。因此不能用下面的命令:

$ sudo systemctl restart openstack-nova-compute

那怎么去重启服务呢?

其实很是简单,直接重启容器就能够了!

$ sudo docker restart nova_compute

不过,重启完容器以后,若是你细心点再去看一看,会发现刚才的修改消失了!

若是配置有问题,容器启动可能会失败,能够刷几回 docker ps 命令确保容器的状态成功。

修改配置(正确的姿式)

若是是对 docker 有所理解的话,其实上面直接在容器内修改配置的时候就应该有疑义。若是配置信息仅仅是保存在容器内的话,那容器重建怎么办?

因此这里的问题和日志文件是相似的,咱们首先想到的确定仍是 docker volume 来实现。不过如今的现象显然也不太对劲:若是配置文件是存储在 volume 中,修改成什么会在容器重启后失效呢?

实际上,kolla 确实使用 volume 挂载了配置文件,可是并无直接挂载到对应的位置,其中又添加了一次处理,咱们先来看宿主机上配置文件所在的位置:

[root@control01 ~]# cd /etc/kolla/nova-compute
[root@control01 nova-compute]# ls
config.json  nova.conf

注意到其中的 config.json 在容器里面是看不到的,而 nova.conf 和容器内的是一致的。
kolla 的大体处理流程是这样的:

  1. 把这个目录挂载到容器的 /var/lib/kolla/config_files 目录
  2. 在容器的启动脚本中加了处理配置的脚本:kolla_set_configs
  3. kolla_set_configs 根据 /var/lib/kolla/config_files/config.json 中的配置来处理配置文件

如今看一下 config.json 中的内容,是否是很好理解了:

{
    "command": "nova-compute",
    "config_files": [
        {
            "source": "/var/lib/kolla/config_files/nova.conf",
            "dest": "/etc/nova/nova.conf",
            "owner": "nova",
            "perm": "0600"
        }
    ],
}

在宿主机下更改 /etc/kolla/nova-compute/nova.conf,并再次重启容器,再次建立虚机。此次应该没有问题了。

总结

查服务:

docker ps -a

查日志:

cd /var/log/kolla

改配置:

cd /etc/kolla/<service_name>

重启服务:

docker restart <container_name>

只须要记住这几个经常使用的操做命令就能够了,相较于以前须要记忆每一个服务不一样的名字,是否是方便了不少呢?


更详细的操做过程能够去 B站看视频

若是看完本文对你有帮助,请 关注点赞分享 来一波。

谢谢!

相关文章
相关标签/搜索