内容简介:苏宁云是国内比较早使用Kubernetes和Openstack的公司,自动化部署1.0产品使用了比较传统的安装方式,主要的部署工具使用Puppet。现有的自动化部署统一平台使用的是ansible为代表的KubeSpray以及Kolla-Ansible。苏宁云有一套成熟的部署思路,所以,在设计方案的兼顾了,不破坏社区版本的代码基础上,进行定制化开发,所有定制化的功能都是可插拔的。统一平台可以让用户的对整体机器资源一目了然;参数统一,用户配置更加方便;同时加强了对部署过程中监控。
背景
现有解决方案思路
苏宁云是国内比较早使用Kubernetes和Openstack的公司,自动化部署1.0产品使用了比较传统的安装方式,主要的部署 工具 使用Puppet。现有的自动化部署统一平台使用的是ansible为代表的KubeSpray以及Kolla-Ansible。
苏宁云有一套成熟的部署思路,所以,在设计方案的兼顾了,不破坏社区版本的代码基础上,进行定制化开发,所有定制化的功能都是可插拔的。
统一平台可以让用户的对整体机器资源一目了然;参数统一,用户配置更加方便;同时加强了对部署过程中监控。
走近Kubernetes KubeSpray
KubeSpray整体介绍
KubeSpray是Kubenetes社区孵化的一个方案,现在已经开源,KubeSpray使用了Ansible-playbook进行了编排,依赖于Kubeadm,可以将Kubernetes部署在AWS、GCE、Azure、OpenStack、Vsphere、以及裸机。Kubenetes可以快速部署一个高可用Kubenetes集群。可选的网络查件,KubeSpray支持的网络插件非常多,包括Flannel、Contiv、Weave、Calico等。KubeSpray也支持主流的操作系统发现版。
KubeSpray定制开发非常简单,如果需要增加步骤,只需要修改playbook的入口文件即可,比如cluster.yaml
使用KubeSpray快速搭建Kubernetes平台
是时候动手尝试一下KubeSpray了,他将会改变你对手动部署Kubernetes的繁琐的认识,特别是配置SSL认证。
(关于实验环境,全部是在CentOS7上进行,后续不再说明。)
上一节说了,KubeSpray使用Ansible-Playbook编写,首先安装Ansible,版本大于2.4版本,使用最简单的pip。
$ pip install ansible
Clone 代码
$ git clone https://github.com/kubernetes-incubator/kubespray.git
进入代码目录
从requiremens.txt文件中安装依赖文件
$ pip install -r requiremens.txt
复制资产文件到自定义目录
$ cp -rfp inventory/sample/* inventory/demo_cluster
复制后在demo_cluster结构如下:
在hosts.ini中配置机器资产;
在group_vars/all.yml 配置部署Kubernetes的通用参数
在group_vars/k8s-cluster.yml配置部署Kubernetes的版本,镜像库、端口、网络等。
开始部署Kubernetes
$ ansible-playbook -i inventory/demo_cluster/hosts.ini cluster.yml
以上就是快速部署Kubernetes的步骤,由此看出,KubeSpray上手非常简单。
如果想深入研究KubeSpray,可以参照社区文档,优化all.yml和k8s-cluster.yml中的详细参数。
理解OpenStack Kolla-Ansible
Kolla-Ansible介绍
Kolla-ansible的两大特性,开箱即用以及允许完整定制化。这针对于缺少OpenStack自动化部署的操作者来说,可以快速的部署生产级别的OpenStack环境出来。
使用Kolla-Ansible快速搭建OpenStack平台
下面我们就看看,使用Kolla-Ansible快速搭建一个3个控制节点OpenStack平台。由于部署时分为研发调试方式和生产方式,我们使用生产方式来部署OpenStack。
(关于实验环境,全部是在CentOS7上进行,后续不再说明。)
本次实验使用是一台物理机,配置如下:
- 32核CPU
- 64GB内存
- 50GB root盘 + 850GB数据盘
- 2块千兆卡 + 2块万兆卡
在正式安装部署之前,假设您对 Ansible 和 Docker 有了掌握和了解。
安装依赖
- 安装和升级最新版的pip工具
yum install epel-releaseyum install python-pip
pip install -U pip
- 安装依赖
yum install python-devel \libffi-devel \gcc \openssl-devel \libselinux-python
- 安装Ansible
yum install ansible
- 使用pip安装或者升级最新版的Ansible
当前为了更好的兼容kolla,Ansible版本要大于2.4
pip install -U ansible
安装Kolla-ansible
- 更改Ansible默认的配置
[defaults] host_key_checking=Falsepipelining=Trueforks=100
- 使用pip安装kolla-ansible
pip install kolla-ansible
另外一种方式,使用源码安装kolla-ansible
git clone https://github.com/openstack/kolla-ansible.git cd kolla-ansible && python setup.py install
- 复制yml 和 passwords.yml to /etc/kolla 目录,如果kolla目录不存在,请手动创建。
cp -r /usr/share/kolla-ansible/etc_examples/kolla /etc/
- 复制all-in-one 和 multinode资产文件到指定目录
cp /usr/share/kolla-ansible/ansible/inventory/* /home/demo_cluster
准备初始化配置
资产配置
在Kolla-ansible中有两个资产配置文件,all-in-one和mutilnode,这两个文件不同之处是all-in-one在localhost部署单个节点OpenStack,multinode部署多节点OpenStack环境,也就是生产级别的OpenStack环境。
- 编辑mutilnode文件
[control] 172.19.1.[10:12] ansible_user=root ansible_password=password ansible_become=true # Ansible supports syntax like [10:12] - that means 10, 11 and 12. # Become clause means "use sudo". [network:children] control # when you specify group_name:children, it will use contents of group specified. [compute] 172.19.1.[13:14] ansible_user=root ansible_password=password ansible_become=true [monitoring] 172.19.1.18 # This group is for monitoring node. # Fill it with one of the controllers' IP address or some others. [storage:children] compute [deployment] localhost ansible_connection=local become=true # use localhost and sudo
- 生成密码文件,密码文件其实是一组key-value值文件,用于各个组件认证的用户名密码。
密码文件默认存储在/etc/kolla/kolla-passwords.yml中,直接执行。
kolla-genpwd
Kolla globals.yml配置
globals.yml是kolla-ansible非常重要的配置。下面是一些典型的配置选项:
使用哪种发行版的操作系统
kolla_base_distro: "centos"
使用哪种安装包方式
kolla_install_type: "source"
source使用源码方式进行安装,依赖于git
binary使用包方式进行依赖yum或者apt
指定OpenStack版本
openstack_release: "pike"
指定OpenStack版本分支
openstack_release: "master"
如果使用source安装的话,可以指定分支。
- 配置网络
配置管理网
network_interface: "eth0"
配置业务网
neutron_external_interface: "eth1"
配置vip,用于keepalived提供高可用。
kolla_internal_vip_address: "10.1.0.250"
- 配置额外服务
比如是否启用cinder
enable_cinder: "yes"
- 开始部署环境
一旦以上配置完成,我们就可以进行部署,首先我们要设置最基本的依赖,docker。
- Bootstrap server
kolla-ansible -i ./multinode bootstrap-servers
- 进行预检查
kolla-ansible -i ./multinode prechecks
- 开始部署
kolla-ansible -i ./multinode deploy
以上就是部署一套多节点的OpenStack环境,过程比较简单,当时在上文提到,globals.yaml文件是非常重要的文件,所以想要优化部署过程或者使用openstack更高级的功能,应该详细研究每一个参数代表的含义。
生产级Kolla-Ansible
部署生产级别的OpenStack与上述步骤大致相同,但是设置的参数项会很多。
- 节点角色划分,在生产中,要详细划分控制节点、网络节点、计算节点、存储节点以及监控节点。
- 网络的配置,为了降低网络的延迟以及网络高可用,那么设置不同的interface是非常重要的,比如network_interface、api_interface、storage_interface、cluster_interface等。
- Docker相关的配置,在实际过程中,要规划好 docker 的存储,默认使用devicemapper,所以在生产中要提前做好规划和调研。另外一项是日志,要规划好日志的目录,防止日志过多,导致root崩溃。
作为产品输出
在1.0版本使用了Puppet工具,利用Puppet进行安装,整个过程是流程化安装。Puppet虽然满足现有的部署架构,但是也存在一下缺点:
- Puppet工具本身的认证问题。
- Puppet的C/S架构,会对用户机器有一定侵入。
- 如果考虑到升级维护,必须保留Puppet server。
- Puppet很难进行产品化,并且一旦部署过程变动,维护成本也比较高。
- Puppet本身学习成本比较高。
综合Puppet一些劣势,我们选择了使用Ansible设计的KubeSpray以及Kolla-Ansible。
如果作为产品输出,不是简单的进行定制开发,产品化的最终用户一定不是自家公司的运维工程师或者研发工程师,而是在大多数人看来,经过简单培训加以文档辅助,都可以完成IaaS设施的部署。
所以,我们将重新设计开发一个自动化部署产品,面向一般用户,简化部署流程,用户只需要填入一些参数以及选择不同的值,就可以完成自动化部署过程。过程不需要干预,并且对过程进行监控,发现问题,及时通知用户。
苏宁云的产品化思路
- 依赖KubeSpray和Kolla-Ansible
- 设计标准的Restful API,将复杂的用户参数配置以及命令执行,转化为友好的API调用。
- 定义WorkFlow,WorkFlow的含义本身具有可编排,Hull定义了多种WorkFlow,用户只需要选择对应的WorkFlow,就可以启动部署流程。
- 提供可视化安装,Hull将会提供一套完成的UI操作页面,UI与API耦合度很低。
- 封装Cobbler API,使用部署操作系统也加入到整个Hull过程中。
- 提供用户管理,即一套平台,可以部署多套IaaS设施。
- 同时加入Data Center、Cluster、Region等逻辑概念,更好的满足用户的部署需求。
苏宁云的解决方案
苏宁云新的自动化部署产品Hull给出的方案如下图。
- 用户首先进行基本信息注册
- 创建data center、region、cluster
- 启动WorkFlow,有四种可以选择:
- Install OpenStack Dev All-IN-ONE
- Install Kubernetes Dev All-IN-ONE
- Install OpenStack Pro
- Install Kubernetes Pro
- 控制平台接到部署WorkFlow指令时,启动对应的检查。
- 接下来调用IPMI接口进行PXE启动,引导至PXE安装。
- Cobbler安装basic OS,比如CentOS7或者Ubuntu16
- 安装完成Basic OS后,Cobbler也启动post script进行依赖包安装、内核替换、bond配置、网卡制作等。
- 正式安装部署OpenStack或者Kubernetes,接下来过程无需人工干预,在配置正确的前提下,可以自动化完成安装部署。并且安装过程中,会实时向manager平台推送当前安装的进度。
- 当安装完毕后,启动Heath-Checker,检查当前安装环境是否正常,比如创建一个虚拟机或者一个pod,并且检查虚拟机的状态或pod的状态。
第三方如何集成苏宁云Hull
- 统一注册部署管理方式
这种方式所有的集成商,将机器资源统一注册到苏宁云部署管理平台,用户必须登录认证之后,方可操作其下的机器资源。有平台下发部署指令,该种方式要求IPMI IP、物理机器访问均可以被统一部署平台访问。
- 私有化部署方式
该种方式最为理想,架构类似于在每个客户现场部署一套部署管理平台。
机器启动之后,向指定的manage注册自己。之后由该平台进行统一的指令下发以及部署状态收集。
- 定制化开发
基于Hull定制化开发也很简单,Hull有独立的Restful API,任何集成商都可以在此产品的基础上再次进行产品化。
作者简介
王晓飞,现担任苏宁云容器网络架构师职位,在针对Openstack、Kubernetes、swarm网络架构方面有着专业的研究和理解,在该领域拥有超过5年经验,现在负责苏宁云容器网络架构、Openstack网络架构、容器集群监控,主导容器云监控系统开发、容器网络需求定制开发,自动化部署平台,PaaS平台。对DevOps理念有很深的掌握。
孙凯歌,苏宁云高级研发工程师,精通OpenStack,擅长Nova、Cinder、Keystone。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- Syncd - 自动化部署工具
- 前端自动化部署方案探索
- 使用 Capistrano 进行自动化部署
- jenkins自动化项目部署实战
- Syncd——开源自动化部署工具
- SaltStack自动化批量部署Apache
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
流畅的Python
[巴西] Luciano Ramalho / 安道、吴珂 / 人民邮电出版社 / 2017-5-15 / 139元
【技术大咖推荐】 “很荣幸担任这本优秀图书的技术审校。这本书能帮助很多中级Python程序员掌握这门语言,我也从中学到了相当多的知识!”——Alex Martelli,Python软件基金会成员 “对于想要扩充知识的中级和高级Python程序员来说,这本书是充满了实用编程技巧的宝藏。”——Daniel Greenfeld和Audrey Roy Greenfeld,Two Scoops ......一起来看看 《流畅的Python》 这本书的介绍吧!