【AICon】 如何构建高效的 RAG 系统?RAG 技术在实际应用中遇到的挑战及应对策略?>>> 了解详情
写点什么

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

王晓飞 孙凯歌

  • 2018-11-07
  • 本文字数:4517 字

    阅读完需:约 15 分钟

苏宁云自动化部署统一平台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


使用 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 有了掌握和了解。

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


yum install epel-releaseyum install python-pippip 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. 复制 globals.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 给出的方案如下图,



  1. 用户首先进行基本信息注册

  2. 创建 data center、region、cluster

  3. 启动 WorkFlow,有四种可以选择:

  4. Install OpenStack Dev All-IN-ONE

  5. Install Kubernetes Dev All-IN-ONE

  6. Install OpenStack Pro

  7. Install Kubernetes Pro

  8. 控制平台接到部署 WorkFlow 指令时,启动对应的检查。

  9. 接下来调用 IPMI 接口进行 PXE 启动,引导至 PXE 安装。

  10. Cobbler 安装 basic OS,比如 CentOS7 或者 Ubuntu16

  11. 安装完成 Basic OS 后,Cobbler 也启动 post script 进行依赖包安装、内核替换、bond 配置、网卡制作等。

  12. 正式安装部署 OpenStack 或者 Kubernetes,接下来过程无需人工干预,在配置正确的前提下,可以自动化完成安装部署。并且安装过程中,会实时向 manager 平台推送当前安装的进度。

  13. 当安装完毕后,启动 Heath-Checker,检查当前安装环境是否正常,比如创建一个虚拟机或者一个 pod,并且检查虚拟机的状态或 pod 的状态。

第三方如何集成苏宁云 Hull
  • 统一注册部署管理方式


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


  • 私有化部署方式


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


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


  • 定制化开发


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


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


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


2018-11-07 00:001776

评论

发布
暂无评论
发现更多内容

跬智信息 (Kyligence) 入选2022年度上海市优质大数据服务供应商目录

Kyligence

大数据 数据分析

【1.27-2.3】写作社区优秀技术博文一览

InfoQ写作社区官方

热门活动 优质创作周报

沿着数字中国的大江大河,领略云上三峡

脑极体

华为云 三峡

2023JAVA面试题全集(超全面!超系统!超实用!)早做准备,早上岸!

架构师之道

Java 编程 程序员 计算机 java面试

青云 KubeSphere 与 OpenCloudOS 完成技术兼容互认证

OpenCloudOS

云原生 操作系统 KubeSphere

提名倒计时! | 2022 龙蜥社区优秀贡献者

OpenAnolis小助手

技术 操作系统 龙蜥社区 开源贡献者 奖项报名

全息电网 数字孪生智慧电网Web3D运维系统

2D3D前端可视化开发

智慧电网 数字电网 智能电网 数字孪生智慧电网 智慧电网三维可视化

从原理源码到企业级实战,腾讯大佬纯手打的Spring Boot笔记(2023版)真香

程序员小毕

spring 后端 springboot java程序员 java面试

我发现买不起自己出版的图书了,这到底是咋回事?

冰河

程序员 并发编程 高并发 架构师 编程开发

写给go开发者的gRPC教程-protobuf基础

凉凉的知识库

golang 微服务 gRPC protobuf 微服务框架

gcc属性__attribute__((naked))使用场景

SkyFire

GCC 内嵌汇编

Zebec 上线投票治理机制,全新流支付生态正在起航

EOSdreamer111

案例研究:让线上故障沉淀为团队的经验

石云升

极客时间 2月月更 技术领导力实战笔记

Jackson 的 DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES

HoneyMoose

深度剖析 Linux 伙伴系统的设计与实现

bin的技术小屋

Linux 内存管理 Linux内核 内存分配 Linux内核源码

D触发器 (D-FF)详解

timerring

FPGA

基于 Flink+Pravega 的游戏服务器监控与调节系统设计

Apache Flink

大数据 flink 实时计算

架构训练营模块四作业

gigifrog

架构训练营

信用卡APP评测系列——工银e生活5.0打造个人生活服务平台,引领用户美好生活

易观分析

金融 银行 信用卡

Zebec 上线投票治理机制,全新流支付生态正在起航

股市老人

Zebec 上线投票治理机制,全新流支付生态正在起航

鳄鱼视界

有了HotSpot JVM为什么还需要OpenJ9?

骑牛上青山

Java jdk JVM 虚拟机

大文件传输软件的优势有哪些?-镭速传输

镭速

喜讯!云起无垠实力入选多项中国网络安全行业全景图

云起无垠

Zebec 投票治理机制上线,全新流支付生态正在起航

西柚子

快速入门pandas进行数据挖掘数据分析[多维度排序、数据筛选、分组计算、透视表](一)

汀丶人工智能

Python 数据挖掘 数据分析 pandas

官宣:计算中间件 Apache Linkis 正式毕业成为 Apache 顶级项目

腾源会

开源

第三届腾讯Light·技术公益创造营正式启动:聚焦三大议题,探索技术公益可持续路径​

OpenCloudOS

开源

抖音春晚直播观看人数破1.3亿,火山引擎技术助力“新年俗”新体验

火山引擎边缘云

云原生 CDN 边缘计算 抖音 视频云

活动预告 | 2023 QCon 全球软件开发大会 - AI 基础架构论坛

第四范式开发者社区

人工智能 机器学习 数据库 开源 特征

湖仓一体电商项目(十八):业务实现之编写写入DWD层业务代码

Lansonli

数据湖 湖仓一体电商项目

苏宁云自动化部署统一平台Hull_云原生_InfoQ精选文章