63

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

 5 years ago
source link: http://www.infoq.com/cn/articles/suning-hull-platform?amp%3Butm_medium=referral
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

背景

现有解决方案思路

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

22image001-1541154131576.png

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

23image003-1541154131319.png

在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.git cd 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给出的方案如下图。

12image004-1541154130421.png
  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。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK