皇上,还记得我吗?我就是1999年那个Linux伊甸园啊-----24小时滚动更新开源资讯,全年无休!

苏宁云自动化部署统一平台Hull

作者 孙凯歌     , 王晓飞

背景

现有解决方案思路

苏宁云是国内比较早使用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

苏宁云自动化部署统一平台Hull

使用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结构如下:

苏宁云自动化部署统一平台Hull

在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块万兆卡

在正式安装部署之前,假设您对AnsibleDocker有了掌握和了解。

安装依赖

  1. 安装和升级最新版的pip工具

yum install epel-releaseyum install python-pip

pip install -U pip

  1. 安装依赖

yum install python-devel \libffi-devel \gcc \openssl-devel \libselinux-python

  1. 安装Ansible

yum install ansible

  1. 使用pip安装或者升级最新版的Ansible

当前为了更好的兼容kolla,Ansible版本要大于2.4

pip install -U ansible

安装Kolla-ansible

  1. 更改Ansible默认的配置

[defaults] host_key_checking=Falsepipelining=Trueforks=100

  1. 使用pip安装kolla-ansible

pip install kolla-ansible

另外一种方式,使用源码安装kolla-ansible

git clone https://github.com/openstack/kolla-ansible.gitcd kolla-ansible && python setup.py install

  1. 复制yml 和 passwords.yml to /etc/kolla 目录,如果kolla目录不存在,请手动创建。

cp -r /usr/share/kolla-ansible/etc_examples/kolla /etc/

  1. 复制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环境。

  1. 编辑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
  1. 生成密码文件,密码文件其实是一组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安装的话,可以指定分支。

  1. 配置网络

配置管理网

network_interface: “eth0”

配置业务网

neutron_external_interface: “eth1”

配置vip,用于keepalived提供高可用。

kolla_internal_vip_address: “10.1.0.250”

  1. 配置额外服务

比如是否启用cinder

enable_cinder: “yes”

  1. 开始部署环境

一旦以上配置完成,我们就可以进行部署,首先我们要设置最基本的依赖,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虽然满足现有的部署架构,但是也存在一下缺点:

  1. Puppet工具本身的认证问题。
  2. Puppet的C/S架构,会对用户机器有一定侵入。
  3. 如果考虑到升级维护,必须保留Puppet server。
  4. Puppet很难进行产品化,并且一旦部署过程变动,维护成本也比较高。
  5. Puppet本身学习成本比较高。

综合Puppet一些劣势,我们选择了使用Ansible设计的KubeSpray以及Kolla-Ansible。

如果作为产品输出,不是简单的进行定制开发,产品化的最终用户一定不是自家公司的运维工程师或者研发工程师,而是在大多数人看来,经过简单培训加以文档辅助,都可以完成IaaS设施的部署。

所以,我们将重新设计开发一个自动化部署产品,面向一般用户,简化部署流程,用户只需要填入一些参数以及选择不同的值,就可以完成自动化部署过程。过程不需要干预,并且对过程进行监控,发现问题,及时通知用户。

苏宁云的产品化思路

  1. 依赖KubeSpray和Kolla-Ansible
  2. 设计标准的Restful API,将复杂的用户参数配置以及命令执行,转化为友好的API调用。
  3. 定义WorkFlow,WorkFlow的含义本身具有可编排,Hull定义了多种WorkFlow,用户只需要选择对应的WorkFlow,就可以启动部署流程。
  4. 提供可视化安装,Hull将会提供一套完成的UI操作页面,UI与API耦合度很低。
  5. 封装Cobbler API,使用部署操作系统也加入到整个Hull过程中。
  6. 提供用户管理,即一套平台,可以部署多套IaaS设施。
  7. 同时加入Data Center、Cluster、Region等逻辑概念,更好的满足用户的部署需求。

苏宁云的解决方案

苏宁云新的自动化部署产品Hull给出的方案如下图。
苏宁云自动化部署统一平台Hull

  1. 用户首先进行基本信息注册
  2. 创建data center、region、cluster
  3. 启动WorkFlow,有四种可以选择:
  • Install OpenStack Dev All-IN-ONE
  • Install Kubernetes Dev All-IN-ONE
  • Install OpenStack Pro
  • Install Kubernetes Pro
  1. 控制平台接到部署WorkFlow指令时,启动对应的检查。
  2. 接下来调用IPMI接口进行PXE启动,引导至PXE安装。
  3. Cobbler安装basic OS,比如CentOS7或者Ubuntu16
  4. 安装完成Basic OS后,Cobbler也启动post script进行依赖包安装、内核替换、bond配置、网卡制作等。
  5. 正式安装部署OpenStack或者Kubernetes,接下来过程无需人工干预,在配置正确的前提下,可以自动化完成安装部署。并且安装过程中,会实时向manager平台推送当前安装的进度。
  6. 当安装完毕后,启动Heath-Checker,检查当前安装环境是否正常,比如创建一个虚拟机或者一个pod,并且检查虚拟机的状态或pod的状态。

第三方如何集成苏宁云Hull

  • 统一注册部署管理方式

这种方式所有的集成商,将机器资源统一注册到苏宁云部署管理平台,用户必须登录认证之后,方可操作其下的机器资源。有平台下发部署指令,该种方式要求IPMI IP、物理机器访问均可以被统一部署平台访问。

  • 私有化部署方式

该种方式最为理想,架构类似于在每个客户现场部署一套部署管理平台。

机器启动之后,向指定的manage注册自己。之后由该平台进行统一的指令下发以及部署状态收集。

  • 定制化开发

基于Hull定制化开发也很简单,Hull有独立的Restful API,任何集成商都可以在此产品的基础上再次进行产品化。

作者简介

王晓飞, 现担任苏宁云容器网络架构师职位,在针对Openstack、Kubernetes、swarm网络架构方面有着专业的研究和理解,在该领域拥有超过5年经验,现在负责苏宁云容器网络架构、Openstack网络架构、容器集群监控,主导容器云监控系统开发、容器网络需求定制开发,自动化部署平台,PaaS平台。对DevOps理念有很深的掌握。

孙凯歌,苏宁云高级研发工程师,精通OpenStack,擅长Nova、Cinder、Keystone。

转自 http://www.infoq.com/cn/articles/suning-hull-platform