OpenStack的容器服务体验
magnum 是用于 OpenStack 的容器服务。它有以下特点:
抽象的容器、节点、服务等
集成了用于容器技术的 Kubernetes 和 Docker
集成了多租户安全的 Keystone
继承了k8s多租户网络安全的 Neutron
环境准备
在VMware Workstations建台虚拟机,Ubuntu 14.04 LTS,CPU两个核以上,内存至少4G以上,硬盘100G,两个网卡(一个主机模式,另一个NAT模式)。
$ vi /etc/network/interfaces
#仅主机模式,用于openstack内部模块通信
auto eth0
iface eth0 inet static
address 20.0.0.11
gateway 20.0.0.1
netmask 255.255.255.0
#NAT模式,用于虚拟机访问外网的外部网络
auto eth1
iface eth1 inet static
address 172.24.54.222
gateway 172.24.54.2
netmask 255.255.255.0
#将缺省路由设置为网卡2
up route add default gw 172.24.54.2 dev eth1
部署过程
1.安装git
$ sudo su
# apt-get install git
2.下载devstack源码
# cd /home
# git clone https://github.com/openstack-dev/devstack
3.创建stack用户运行
# cd /home/devstack/tools/
# ./create-stack-user.sh
4.修改devstack目录权限,让stack用户可以运行
# chown -R stack:stack /home/devstack
5.切换到stack用户,进入devstack目录下,创建localrc文件
# su stack
$ cd /home/devstack
$ cat > localrc << END
DATABASE_PASSWORD=password
RABBIT_PASSWORD=password
SERVICE_TOKEN=password
SERVICE_PASSWORD=password
ADMIN_PASSWORD=password
PUBLIC_INTERFACE=eth1
enable_plugin magnum https://git.openstack.org/openstack/magnum
enable_plugin barbican https://git.openstack.org/openstack/barbican
VOLUME_BACKING_FILE_SIZE=20G
HOST_IP=20.0.0.11
END
6.运行Devstack
$ ./stack.sh
注意:使用的是stack用户运行。在安装过程中,可能会提示apt-get下载源错误,重复执行上述安装命令;其他情况,可以再次执行安装命令。
$ ./unstack.sh && ./stack.sh
7.验证
整个安装过程耗时一个小时左右,取决于你的网络状况。在浏览器中打开http://20.0.0.11/ 即可访问horizon。默认Devstack创建admin和demo两个用户,密码是第5步中localrc中设置的password。
或者可以使用OpenStack的命令行工具来验证
$ cd /home/devstack
$ source openrc admin admin
$ glance image-list
+--------------------------------------+---------------------------------+
| ID | Name |
+--------------------------------------+---------------------------------+
| 148f3031-13cd-4a93-85fe-03b42b2117c6 | cirros-0.3.4-x86_64-uec |
| c291cb0c-6265-4be9-8eb2-d2988bda203c | cirros-0.3.4-x86_64-uec-kernel |
| 502aca3d-4e41-4e41-ad50-baa82c0a6cde | cirros-0.3.4-x86_64-uec-ramdisk |
| b89a7a9f-3b2f-4291-8327-60c735495b09 | fedora-21-atomic-5 |
+--------------------------------------+---------------------------------+
窥探Magnum
Magnum一般有两个子模块,magnum-api和magnum-conductor,为了验证conductor服务是否健康运行
$ magnum service-list
+----+-----------+------------------+-------+
| id | host | binary | state |
+----+-----------+------------------+-------+
| 1 | localhost | magnum-conductor | up |
+----+-----------+------------------+-------+
1.创建密钥对
$ test -f ~/.ssh/id_rsa.pub || ssh-keygen -t rsa -N "" -f ~/.ssh/id_rsa
$ nova keypair-add --pub-key ~/.ssh/id_rsa.pub testkey
2.创建BayModel对象
$ magnum baymodel-create --name k8sbaymodel \
--image-id fedora-21-atomic-5 \
--keypair-id testkey \
--external-network-id public \
--dns-nameserver 8.8.8.8 \
--flavor-id m1.small \
--docker-volume-size 5 \
--network-driver flannel \
--coe kubernetes
3.创建Bay对象
$ magnum bay-create --name k8sbay --baymodel k8sbaymodel --node-count 1
Bays对象初始化为CREATE_IN_PROGRESS状态,当创建完成后会更新为CREATE_COMPLETE状态. 此步骤耗时10多分钟,可以通过以下命令查看已有的Bays对象
$ magnum bay-list
+--------------------------------------+--------+------------+--------------+-----------------+
| uuid | name | node_count | master_count | status |
+--------------------------------------+--------+------------+--------------+-----------------+
| f0ce1f2d-a1a9-4a47-977f-15244625463d | k8sbay | 1 | 1 | CREATE_COMPLETE |
+--------------------------------------+--------+------------+--------------+-----------------+
上述的Bay对象将会创建一个Kubernetes master节点和一个minion节点:
$ nova list
+--------------------------------------+-------------------------------------------------------+--------+------------+-------------+------------------------------+
| ID | Name | Status | Task State | Power State | Networks |
+--------------------------------------+-------------------------------------------------------+--------+------------+-------------+------------------------------+
| 4656ff13-9210-47b5-9c27-8c26309d5e04 | k8-fpoxo3qagq-0-bax3fvtb5pf2-kube_master-riv2fk732dbd | ACTIVE | - | Running | private=10.0.0.5, 172.24.4.5 |
| 45b7c2af-29de-4f59-b5ba-b784e0ef503b | k8-hdx2ewllqx-0-5vptn5l4ahtt-kube-minion-i6jyfvsvxkzu | ACTIVE | - | Running | private=10.0.0.6, 172.24.4.6 |
+--------------------------------------+-------------------------------------------------------+--------+------------+-------------+------------------------------+
更直观的,可以在Horizon的编配里面查看相关栈或Bay的详情
4.下载Kubernetes源码
$ wget https://github.com/kubernetes/kubernetes/releases/download/v1.0.1/kubernetes.tar.gz
$ tar -xvzf kubernetes.tar.gz
5.部署Redis容器集群
$ cd kubernetes/examples/redis
$ magnum pod-create --manifest ./redis-master.yaml --bay k8sbay
$ magnum coe-service-create --manifest ./redis-sentinel-service.yaml --bay k8sbay
$ sed -i 's/\(replicas: \)1/\1 2/' redis-controller.yaml
$ magnum rc-create --manifest ./redis-controller.yaml --bay k8sbay
$ sed -i 's/\(replicas: \)1/\1 2/' redis-sentinel-controller.yaml
$ magnum rc-create --manifest ./redis-sentinel-controller.yaml --bay k8sbay
这样我们就创建了一个redis的ReplicationController,由这个Controller来调度和管理redis容器,通过magnum命令可以查看IP与状态。
$ magnum bay-show k8sbay
+--------------------+------------------------------------------------------------+
| Property | Value |
+--------------------+------------------------------------------------------------+
| status | CREATE_COMPLETE |
| uuid | f0ce1f2d-a1a9-4a47-977f-15244625463d |
| status_reason | Stack CREATE completed successfully |
| created_at | 2015-10-20T12:56:07+00:00 |
| updated_at | 2015-10-20T13:13:41+00:00 |
| bay_create_timeout | 0 |
| api_address | https://172.24.4.4:6443 |
| baymodel_id | 33d8e94d-f867-437f-80b4-10d5d6885c8a |
| node_count | 1 |
| node_addresses | [u'172.24.4.6'] |
| master_count | 1 |
| discovery_url | https://discovery.etcd.io/6533dd3e28c0ff7e410cff633fad90ad |
| name | k8sbay |
+--------------------+------------------------------------------------------------+
注意:使用Kubernetes部署Pod时会从Google container registry下载基础的Pause镜像,但众所周知由于国内特殊的网络环境,会导致容器无法部署成功。所以咱最好还是在主机上拨个VPN。
6.验证
剩下来就是ssh到相应的虚拟机中,通过docker命令或redis客户端来控制和访问容器了。
$ ssh minion@172.24.4.6
[minion@k8-hdx2ewllqx-0-5vptn5l4ahtt-kube-minion-i6jyfvsvxkzu ~]$ sudo su
bash-4.3# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6522a94e8c2a gcr.io/google_containers/pause:0.8.0 "/pause" 58 minutes ago Up 55 minutes k8s_POD.49eee8c2_redis-bldhr_default_8f5a1e81-7739-11e5-8d21-fa163ec6c383_cb8d1102
277bbcfca7df gcr.io/google_containers/pause:0.8.0 "/pause" 58 minutes ago Up 56 minutes k8s_POD.39750b55_redis-master_default_690a053d-7739-11e5-8d21-fa163ec6c383_1da0a23d
fbc0bf70079e gcr.io/google_containers/pause:0.8.0 "/pause" 58 minutes ago Up 56 minutes k8s_POD.ecf0e8f4_redis-sentinel-ii2go_default_9ca36eec-7739-11e5-8d21-fa163ec6c383_9a95d2d0
OpenStack的容器服务体验的更多相关文章
- 品尝阿里云容器服务:用nginx镜像创建容器,体验基于域名的路由机制
在前一篇博文中我们了解了阿里云容器服务的路由机制: 请求 -> 负载均衡80端口 -> 容器主机9080端口 -> acsrouting路由容器80端口 --基于域名--> W ...
- 品尝阿里云容器服务:初步尝试ASP.NET Core Web API站点的Docker自动化部署
部署场景是这样的,我们基于 ASP.NET Core 2.0 Preview 1 开发了一个用于管理缓存的 Web API ,想通过阿里云容器服务基于 Docker 部署为内网服务. 在这篇博文中分享 ...
- 阿里云容器服务区块链解决方案全新升级 支持Hyperledger Fabric v1.1
摘要: 全球开源区块链领域影响最为广泛的Hyperledger Fabric日前宣布了1.1版本的正式发布,带来了一系列丰富的新功能以及在安全性.性能与扩展性等方面的显著提升.阿里云容器服务区块链解决 ...
- K8S全栈容器服务如何助力企业云化创新?
容器编排管理平台Kubernetes在实践两年多后,市场主导地位被正式确定,随着首批认证服务商的宣布,围绕着容器的应用编排部署服务已然成熟,Kubernetes开始在商业场景为企业创造价值.华为云在K ...
- 容器服务如何在企业客户落地?Rancher 解决之道分享
Docker 的优势和趋势我想不必再赘述,那么对于非互联网公司的传统企业客户,以及我们大量的围绕企业客户做集成.交付解决方案的服务提供商,需要考虑的一个问题就是怎么样把容器技术以高质量.低成本.易维护 ...
- 阿里云宣布 Serverless 容器服务 弹性容器实例 ECI 正式商业化
摘要: 阿里云宣布弹性容器实例 ECI(Elastic Container Instance)正式商业化,ECI 是阿里云践行普惠的云计算理念,将 Serverless 和 Container 技术结 ...
- ACK容器服务发布virtual node addon,快速部署虚拟节点提升集群弹性能力
在上一篇博文中(https://yq.aliyun.com/articles/647119),我们展示了如何手动执行yaml文件给Kubernetes集群添加虚拟节点,然而,手动执行的方式用户体验并不 ...
- Docker深入浅出系列 | 容器初体验
目录 Docker深入浅出系列 | 容器初体验 教程目标 预备工作 容器与虚拟化技术 什么是Docker 为什么要用Docker 事例 什么是容器镜像和容器 容器与虚拟机的区别 Vagrant与Doc ...
- 传统.NET 4.x应用容器化体验(1)
我们都知道.NET Core应用可以跑在Docker上,那.NET Framework 4.x应用呢?借助阿里云ECS主机(Windows Server 2019 with Container版本), ...
随机推荐
- BZOJ5279: [Usaco2018 Open]Disruption
题目大意:给你一棵n个节点的树,这n条边称为原边,另给出m条带权值的额外边,求删去每条原边后通过给出的m额外条边变回一棵树的最小价值.题解:看完题面以为是Tarjan连通性之类的题目,冷静分析后想到是 ...
- PL/SQL变量的作用域和可见性
变量的作用域和可见性设计变量在块中的位置,不同的位置使得变量具有不同的有效性与可访问性. 变量的作用域是指可以使用变量的程序单元部分,可以是包和子程序包等. 当一个变量在它的作用域中可以用一个不限定的 ...
- Python3 tkinter基础 Tk quit 点击按钮退出窗体
Python : 3.7.0 OS : Ubuntu 18.04.1 LTS IDE : PyCharm 2018.2.4 Conda ...
- sqllite中实现字符串分割
WITH split(word, str) AS ( -- alternatively put your query here -- SELECT '', category||',' FR ...
- CI框架简单使用
CodeIgniter框架 1.回忆MVC 1.1.M:模型,提供数据,保存数据 1.2.V:视图,只负责显示,表单form 1.3.C:控制器,协调模型和视图 1.4.action:动作,是控制器中 ...
- git误commit大文件导致不能push问题解决
git push时终端报错: error: RPC failed; HTTP 413 curl 22 The requested URL returned error: 413 Request Ent ...
- linux中centros6.7安装php5.6,httpd-2.2.19(web产品化)遇到的问题总结
前段时间在公司实习,web系统产品化的过程踩了很多坑,在这边总结一下,由于对linux不是很懂,全是自己一步步一个一个问题解决的 1,查看系统中是否安装apache,php,mysql环境 Apach ...
- spring data jpa开启批量插入、批量更新
spring data jpa开启批量插入.批量更新 原文链接:https://www.cnblogs.com/blog5277/p/10661096.html 原文作者:博客园--曲高终和寡 *** ...
- 用R语言做数据清理
数据的清理 如同列夫托尔斯泰所说的那样:“幸福的家庭都是相似的,不幸的家庭各有各的不幸”,糟糕的恶心的数据各有各的糟糕之处,好的数据集都是相似的.一份好的,干净而整洁的数据至少包括以下几个要素: 1. ...
- web优化及web安全攻防学习总结
web优化 前端:(高性能网站建设进阶指南) 使用gzip压缩(节省服务器的 网络带宽) 减少http请求( 减少DNS请求所耗费的时间. 减少服务器压力. 减少http请求头) 使用cdn(用户可以 ...