配置指导:OpenStack Magnum 部署
OpenStack Magnum 部署方案
1 目标与物理网络拓扑
本文主要描述在现有OpenStack(stein版)平台上如何扩展安装Magnum功能组件,实现容器管理服务。
涉及物理拓扑,如图1所示:

部署过程中所涉及到的设备、接口及管理网口的IP地址如下表所示:
设备名称 | 接口 | IP地址 | 备注 |
---|---|---|---|
Switch-A | 管理口 | 192.168.0.254 | 三层交换机 |
Switch-B | 管理口 | 192.168.4.1 | 二层交换机 |
Switch-C | 管理口 | 192.168.5.1 | 二层交换机 |
Server-1 | 管理口 | 192.168.4.144 | / |
Server-2 | 管理口 | 192.168.5.145 | / |
表1:设备管理口列表
2 硬件与软件环境
部署环境中涉及到的硬件和软件如表2和表3所示:
名称 | 型号 | 硬件指标 | 数量 | 备注 |
---|---|---|---|---|
服务器 | 1.至少8G内存 2.磁盘不少于500G | 2 | Server-1计算节点+存储节点 Server-2 控制节点+网络节点 |
表2:硬件环境
软件 | 版本 | 备注 |
---|---|---|
服务器 | Centos7.6 | 安装时选择Compute Node 模式,根目录/至少500G |
OpenStack | stein |
表3:软件环境
3 Magnum简介
Magnum项目是OpenStack中的容器编排服务引擎,向上提供统一API,向下异构兼容K8S,Mesos,Swarm等容器管理平台,是OpenStack与容器结合的官方正式项目
Magnum使用Heat部署一个包含Docker和Kubernetes的操作系统镜像,让容器集群运行在虚拟机(Virtual Machine)或者裸机(Bare Metal)中。
Magnum 由三个代码库组成:
- Magnum: http://git.openstack.org/cgit/openstack/magnum
- Python-magnumclient: http://git.openstack.org/cgit/openstack/python-magnumclient
- Magnum-ui: http://git.openstack.org/cgit/openstack/magnum-ui
Magnum主要提供两个服务:
- Magnum API 和 Magnum Conductor。
- Magnum API是提供资源的Rest接口。
Magnum Conductor是整个项目的核心,首先通过Heat部署虚拟机实例或者裸机实例上,然后通过Cloud init在虚拟机实例或者裸机实例上,调用Kubernetes、Swarm或者Mesos部署容器集群。
Python-magnumclient封装Magnum Rest API向外提供Magnum的接口调用,同时提供CLI功能。
Magnum-ui提供一个Horizon的插件,使用Django和AngularJS实现Magnum的界面操作。
下面是Magnum的整体架构:

主要概念:
- Bay:Bay在magnum主要表示一个集群,新版改为Cluster,现在通过Magnum可以创建K8s和Swarm的Bay,也就是K8s和Swarm的集群。
- Baymodel:Baymodel是Flavor的一个扩展,新版改为Cluster Template,Flavor主要是定义虚拟机或者物理机的规格,Baymodel主要是定义一个Docker集群的一些规格,例如这个集群的管理节点的Flavor,计算节点的Flavor,集群使用的Image等等,都可以通过Baymodel去定义。
- Node:主要是指Bay中的某个节点。
- Container:就是具体的某个Docker容器。
Pod、Replication Controller和Service的意思和在K8s的意思是一样的。
- Pod:是Kubernetes最基本的部署调度单元,可以包含多个Container,逻辑上表示某种应用的一个实例。比如一个Web站点应用由前端、后端及数据库构建而成,这三个组件将运行在各自的容器中,那么我们可以创建包含三Pod,每个Pod运行一个服务。或者也可以将三个服务创建在一个Pod,这个取决于用户的应用需求。一个Pod会包含N个Container,多出来的那一个Container是Net Container,专门做路由的。
- Service:可以理解为是Pod的一个路由,因为Pod在运行中可能被删除或者IP发生变化,Service可以保证Pod的动态变化对访问端是透明的。
- Replication Controller:是Pod的复制抽象,用于解决Pod的扩容缩容问题。通常,分布式应用为了性能或高可用性的考虑,需要复制多份资源,并且根据负载情况动态伸缩。通过Replication Controller,我们可以指定一个应用需要几份复制,Kubernetes将为每份复制创建一个Pod,并且保证实际运行Pod数量总是与预先定义的数量是一致的(例如,当前某个Pod宕机时,自动创建新的Pod来替换)。
简单总结:Magnum自身作为一套 API 框架,本身调用其它的容器管理平台的 API 来实现功能。目前支持的后端包括 Kubernetes、Swarm和Mesos。
如果说 Nova 是一套支持不同 Hypervisor 虚拟机平台的API 框架,那么 Magnum 则是支持不同容器机制的 API 框架。
4 安装步骤
[root@controller ~] 表示在控制节点上执行
[root@compute ~] 表示在计算节点上执行
4.1 创建数据库
- 创建数据库并授权:
[root@controller ~]# mysql -uroot -p
MariaDB [(none)]> CREATE DATABASE magnum;
MariaDB [(none)]> GRANT ALL PRIVILEGES ON magnum.* TO magnum@'localhost' \
IDENTIFIED BY 'magnum';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON magnum.* TO magnum@'%' \
IDENTIFIED BY 'magnum';
注:帐号密码根据自己的情况修改
4.2 创建openstack用户、服务凭据、API端点
- 在安装和配置Magnum之前,必须创建用户、服务凭据和API端点:
[root@controller ~]# . admin-openrc
[root@controller ~]# openstack user create --domain default --password-prompt magnum
[root@controller ~]# openstack role add --project service --user magnum admin
[root@controller ~]#openstack service create --name magnum \
--description "OpenStack Container Infrastructure Management Service" \
container-infra
[root@controller ~]#openstack endpoint create --region RegionOne \
container-infra public http://controller:9511/v1
[root@controller ~]#openstack endpoint create --region RegionOne \
container-infra internal http://controller:9511/v1
[root@controller ~]#openstack endpoint create --region RegionOne \
container-infra admin http://controller:9511/v1
- Magnum需要身份服务中的其他信息来管理COE群集
创建 magnum域
[root@controller ~]# openstack domain create --description "Owns users and projects \
created by magnum" magnum
在magnum域中创建magnum_domain_admin用户
[root@controller ~]# openstack user create --domain magnum --password-prompt \
magnum_domain_admin
添加admin角色到 magnum域 中的magnum_domain_admin用户
[root@controller ~]# openstack role add --domain magnum --user-domain magnum --user \
magnum_domain_admin admin
4.3 在controller节点上安装magnum服务
- 创建用户、组:
[root@controller ~]#groupadd --system magnum
[root@controller ~]#useradd --home-dir "/var/lib/magnum" \
--create-home \
--system \
--shell /bin/false \
-g magnum \
magnum
- 创建目录:
[root@controller ~]#mkdir -p /var/log/magnum
[root@controller ~]#mkdir -p /etc/magnum
[root@controller ~]#chown magnum:magnum /var/log/magnum
[root@controller ~]#chown magnum:magnum /var/lib/magnum
[root@controller ~]#chown magnum:magnum /etc/magnum
- 安装软件包:
[root@controller ~]#yum install openstack-magnum-api openstack-magnum-conductor \
python-magnumclient
- 编辑配置文件:
[root@controller ~]#vi /etc/magnum/magnum.conf
[DEFAULT]
transport_url = rabbit://openstack:tera123@controller
log_dir = /var/log/magnum
[api]
host = 192.168.4.144
port = 9511
[certificates]
#生产环境建议用barbican,如果没有安装barbican则使用x509keypair
#cert_manager_type = barbican
cert_manager_type = x509keypair
[cinder_client]
region_name = RegionOne
[database]
connection = mysql+pymysql:://magnum:magnum@controller/magnum
[keystone_authtoken]
memcached_servers = controller:11211
auth_version = v3
www_authenticate_uri = http://controller:5000/v3
project_domain_id = default
project_name = service
user_domain_id = default
password = magnum
username = magnum
auth_url = http://controller:5000
auth_type = password
admin_user = magnum
admin_password = magnum
admin_tenant_name = service
[trust]
trustee_domain_name = magnum
trustee_domain_admin_name = magnum_domain_admin
trustee_domain_admin_password = magnum_domain_admin
# trustee_keystone_interface with either public or internal 取决于网络配置 默认public
trustee_keystone_interface = public
[oslo_messaging_notifications]
driver = messaging
[oslo_concurrency]
lock_path = /var/lib/magnum/tmp
- 填充数据库:
[root@controller ~]#su -s /bin/sh -c "magnum-db-manage upgrade" magnum
- 启动服务:
[root@controller ~]# systemctl enable openstack-magnum-api.service \
openstack-magnum-conductor.service
[root@controller ~]# systemctl start openstack-magnum-api.service \
openstack-magnum-conductor.service
4.4 在controller节点上安装magnum-ui服务
- 安装magnum-ui:
[root@controller ~]#pip install magnum-ui==5.0.1
- 复制文件:
[root@controller ~]#cd /usr/lib/python2.7/site-packages/magnum_ui
[root@controller ~]#cp enabled/* \
/usr/share/openstack-dashboard/openstack_dashboard/local/enabled/
- 重启服务:
[root@controller ~]#systemctl restart httpd memcached
5 结果验证
在controller节点列出magnum服务
- 列出服务
[root@controller ~]#source admin-openrc
[root@controller ~]#openstack coe service list
- 启动实例
(1)创建一个外部网络
[root@controller ~]#openstack network create public --provider-network-type vxlan \
--external \
--project service
[root@controller ~]#openstack subnet create public-subnet --network public \
--subnet-range 192.168.5.0/24 \
--gateway 192.168.5.1 \
--ip-version 4
(2)创建一个密钥对
[root@controller ~]#openstack keypair create --public-key ~/.ssh/id_rsa.pub mykey
(3)创建一个卷类型
[root@controller ~]#openstack volume type create volumnType1
(4)上传集群必须的镜像
VM版本的Kubernetes和Docker Swarm驱动程序需要Fedora Atomic映像。以下是由Atomic团队构建并经过Magnum团队测试的Fedora Atomic原始图像。
a. 先下载镜像
[root@controller ~]#wget https://download.fedoraproject.org/pub/alt/atomic/stable/Fedora-Atomic-27-20180419.0/CloudImages/x86_64/images/Fedora-Atomic-27-20180419.0.x86_64.qcow2
b. 注册镜像到镜像服务并将os_distro 属性设为fedora-atomic
[root@controller ~]#openstack image create \
--disk-format=qcow2 \
--container-format=bare \
--file=Fedora-Atomic-27-20180419.0.x86_64.qcow2\
--property os_distro='fedora-atomic' \
fedora-atomic-latest
(5)设置Docker Swarm集群并且创建容器
a. 使用fedora-atomic-latest镜像为Docker Swarm集群创建集群模板:
[root@controller ~]#openstack coe cluster template create swarm-cluster-template \
--image fedora-atomic-latest \
--external-network public \
--dns-nameserver 8.8.8.8 \
--master-flavor m1.small \
--flavor m1.small \
--coe swarm
b. 使用一个master和一个node创建一个集群:
[root@controller ~]# openstack coe cluster create swarm-cluster \
--cluster-template swarm-cluster-template \
--master-count 1 \
--node-count 1 \
--keypair mykey \
--labels docker_volume_type=volumnType1
c. 检查创建的集群状态
[root@controller ~]# openstack coe cluster list
[root@controller ~]#openstack coe cluster show swarm-cluster
d.将集群验证凭据添加到环境变量里:
[root@controller ~]#mkdir myclusterconfig
[root@controller ~]#$(openstack coe cluster config swarm-cluster --dir myclusterconfig)
上面的命令会将身份验证工件保存在 myclusterconfig目录中,导出环境以下变量:DOCKER_HOST,DOCKER_CERT_PATH和DOCKER_TLS_VERIFY
[root@controller ~]#export DOCKER_HOST=tcp://172.24.4.10:2376
[root@controller ~]#export DOCKER_CERT_PATH=myclusterconfig
[root@controller ~]#export DOCKER_TLS_VERIFY=True
e. 创建一个容器:
[root@controller ~]#docker run busybox echo "Hello from Docker!"
f. 删除集群
[root@controller ~]# openstack coe cluster delete swarm-cluster
(6)设置Kubernetes集群并且创建部署
本示列中,将会使用一个master和一个node创建一个k8s集群,然后用k8s原生命令kubectl来创建一个部署
a. 使用fedora-atomic-latest镜像为kubernetes集群创建集群模板:
[root@controller ~]# openstack coe cluster template create kubernetes-cluster-template \
--image fedora-atomic-latest \
--external-network public \
--dns-nameserver 8.8.8.8 \
--docker-volume-size=5 \
--master-flavor m1.small \
--flavor m1.small \
--coe kubernetes
b. 使用一个master和一个node创建一个集群:
[root@controller ~]# openstack coe cluster create kubernetes-cluster \
--cluster-template kubernetes-cluster-template \
--master-count 1 \
--node-count 1 \
--keypair mykey \
--labels docker_volume_type=volumnType1
c. 检查创建的集群状态
[root@controller ~]# openstack coe cluster list
[root@controller ~]#openstack coe cluster show kubernetes-cluster
d. 将集群验证凭据添加到环境变量里:
[root@controller ~]# mkdir -p ~/clusters/kubernetes-cluster
[root@controller ~]# $(openstack coe cluster config kubernetes-cluster --dir ~/clusters/kubernetes-cluster)
上面的命令会将身份验证工件保存在~/clusters/kubernetes-clusterg目录中,导出环境以下变量:KUBECONFIG
[root@controller ~]# export KUBECONFIG=/home/user/clusters/kubernetes-cluster/config
e. 检查k8s集群的控制器组件:
[root@controller ~]# kubectl -n kube-system get po
f. 验证部署一个nginx:
[root@controller ~]# kubectl run nginx --image=nginx --replicas=5
deployment "nginx" created
[root@controller ~]#kubectl get po
g. 删除集群:
[root@controller ~]#openstack coe cluster delete kubernetes-cluster
6 参考资料
https://wiki.openstack.org/wiki/Magnum
https://docs.openstack.org/magnum/latest/install/install.html
https://docs.openstack.org/python-magnumclient/latest/
https://docs.openstack.org/magnum-ui/latest/
https://releases.openstack.org/teams/magnum.html
https://docs.openstack.org/magnum/latest/admin/troubleshooting-guide.html
如有其它问题,请填写右侧需求表单联系我们。www.asterfusion.com