DevOps实践-服务运行环境

本文涉及的产品
简介: 现阶段服务运行环境有很多种方式,可以从不同的角度划分。比较原始的有直接在硬件的操作系统上运行,稍高级一点的需要在硬件系统上虚拟化操作系统再运行系统服务。还有更高级的是在操作系统上做系统隔离然后再运行,在向上可以使用无服务器架构运行服务。

DevOps实践系列文章,请参见连接。

概述:

现阶段服务运行环境有很多种方式,可以从不同的角度划分。比较原始的有直接在硬件的操作系统上运行,稍高级一点的需要在硬件系统上虚拟化操作系统再运行系统服务。还有更高级的是在操作系统上做系统隔离然后再运行,在向上可以使用无服务器架构运行服务。

这里介绍使用Swarm进行服务运行环境搭建,以及使用过程中的一些注意事项。下图为Swarm帮我们解决的问题。
Swarm示意图

技术选型:

业界在开发SaaS化服务时,有很多经验可以借鉴。阿里的大中台服务、HeroKu的十二因子、OpenStack的服务群组、NetFlix的地域IDC、微服务的设计规范等等,这些帮我们在不同的层面上制定相关的要求与解决方案。
在这里大概的总结一下,一个网络服务产品服务在运行环境上的一些大概要求。

编号 要求 说明
1 所有地方统一的运行环境 1. 生产环境和开发人员的开发环境时一样的
2. 生产环境和测试环境时一样的
3. 最小运行环境必须可以在开发人员环境上启动并运行
2 可以针对每一个服务进行资源限制 1. 可以根据硬件的情况进行服务的资源的划分
2. 可以根据服务的负载情况限制服务的资源
3 方便的运行态管理 1. 支持日志
2. 支持运行时数据获取
3. 动态的配置数据下发
4. 快速启动与优雅关闭功能需要支持
4 简单的部署,升级管理 1. 需要支持蓝绿发布
2. 需要可以根据部署情况,切换流量到不同的服务商
5 可以适应大范围的扩缩容 1. 可以根据服务的负载情况进行动态的伸缩工作
2. 最好能够自动的伸,手动的缩
6 方便的运行版本,回滚管理 1. 部署过程中或部署完成后发现版本问题,可以方便的回滚
2. 有自己的发行版管理方法,可以选择确定版本运行
7 最好支持服务发现 1. 各种形式的服务发现工作

运行环境的要求的策略是尽量少的操作就可以完成服务的监控与上线操作,并且是越少越好。所以,下面的技术选择过程中也是会按照这个大原则并根据上面的要求进行技术的选择。

运行环境技术近些年发展出来很多种。所以,这里简单的说明一下各种技术的对比。

各种运行环境示意

使用IaaS系统搭建服务需要进行中间件与运行时,数据持久化的控制。用PaaS做会方便很多用,只需要开发上层应用即可,并对上层应用的部署进行管理。用FaaS的话只需要写脚本,讲脚本上传后就可以运行在任何地方。FaaS把底层的所有内容都屏蔽掉了,不需要进行相关的调试。

从某种角度来看FaaS是最好的选择,它可以满足所有的设计原则。可以满足无状态服务,前后端分离,Restful接口,弹性伸缩,异步任务,延时任务,自动恢复等等特点。不过现阶段,没有成熟的IDE可以支持FaaS的开发,所以从某种角度限制了FaaS的发展。这里就可以排除FaaS的技术选择。

这里就剩下IaaS和PaaS的选择,选择这两个可以使用两条原则:1. 如需要最大程度的免除运维操作,可以使用PaaS,2. 比较可控性与费用。如果使用IaaS自行搭建服务比PaaS的可控性和费用要好,那就可以选择IaaS服务。

在不同的项目或产品上对服务的关注点不一样,所以这里需要针对不同的项目进行分析。我这里选择的是IaaS和PaaS中间的一档,我自己搭建一些PaaS提供的服务,使用另外一些PaaS提供的服务。这样组合形成我的服务运行环境。

本文中会使用Swarm搭建的PaaS运行环境。用Docker的环境隔离能力和Swarm的服务调度能力完成运行环境搭建。

环境搭建:

搭建过程非常简单,可以参照Swarm Mode官方文档进行搭建。

因为这里使用的是IaaS云进行环境搭建,所以,我不指望Swarm帮我去管理整个IDC。如果需要使用容器化技术管理整个IDC请参考CNCF或者Mesos的DC/OS的支持。

Swarm概念介绍:

网络端口:

  1. Swarm使用TCP port 2377作为集群管理通信使用。
  2. TCP/UDP 7946端口用于节点间通信的。
  3. UDP 4789端口用于Ingress。

在搭建环境时需要将这几个端口从防火墙上放开。

Node:
一个Docker Daemon进程。可以加入到Swarm集群中,可以接受Swarm任务调度的一个节点。

Service:
一个服务,一个服务可以有多份部署,多份运行的进程。可以指定服务的运行副本数,指定一个服务运行多少个副本,运行在哪个节点。

Stack:
一群服务可以组成一个栈。提供完整的一套服务。Swarm Stack和Kubernetes的配置文件的格式都是使用yml文件。这是近些年来业界比较流行的一切即代码的一个实践。这里就是基础设施即代码,形成代码后就可以对环境进行版本化的管理。

Task:
一个运行中的容器。

从上可以看出Swarm的概念很简单,使用过Docker的人很容易上手。不像Kubernetes一上来就整了很多概念,安装过程又复杂。从这里可以看出Swarm的血刺成本比Kubernetes低很多,所以,可以使用Swarm作为上手云基础设施搭建的练手过程,然后再去搭建Kubernetes集群会容易很多。

注意事项:

1. 服务集群

Swarm在做服务部署和服务管理时,基本上都是对无状态服务的支持。可以使用volume做有状态服务的状态持久化动作,但是没有对分布式文件系统进行支持。所以,在Swarm上最好的做法是指把无状态服务添加到Swarm进行管理。

在Swarm中对服务调度策略的开放度不是很高,现在Swarm只支持两种调度策略:1.Replicated;2. Global。Replicated是指定副本数,由Swarm进行那个节点运行服务的调度。Global表示在Swarm中所有节点上都运行一个服务。

上面说到服务都是由Swarm进行调度的,所以,这里必须由调度负责帮助进行服务的扩缩容操作,自动恢复操作。在Swarm中可以使用docker stack deploy进行扩缩容。自动恢复也是配合调度策略的,在一个Node上如果服务连续的出现几次宕机之后,服务可能被Swarm调度到另外的Node上。

在Swarm没有完成的版本升级与蓝绿部署,流量切换策略等。所以,需要自行通过Swarm提供的工具进行升级的整体工作。

2. 负载均衡

在Swarm中提供了集群方式发布应用,那它是怎么做负载均衡的?

负载均衡的服务可能需要部署在不同的Node上,所以,Swarm扩展了原来Docker的网络,创建了Overlay网络。Overlay网络可以进行多物理主机间的Docker和容器的通信。

使用Overlay满足了多主机通信后,使用内嵌的DNS服务进行服务的发现操作。这样就可以将多台主机连接到一个Swarm集群中,并保证能够进行通信与交互。

Swarm使用内嵌的Ingress进行负载均衡的支持。

我使用了一段时间的Swarm网络和Ingress之后发现一个问题。在服务重新部署或新加入Docker Overlay网络的时原先的服务没有办法路由到新的服务上,这个具体原因不太清楚。我怀疑是Swarm Overlay和内嵌DNS的更新过程没有做完整,所以,这里才会发生老服务ping新服务不通的问题。

因为Swarm内嵌的Ingress没有暴露出配置接口,所以对Swarm的负载均衡方式的可控性不是很高。

如果进行四层的负载均衡,Ingress的处理能力具体如何不太清晰。在进行7层负载均衡时的策略与控制方法也没有看到。所以,从可控制角度看Swarm内嵌的Ingress不太可用。

3. 持续交付

减轻了环境管理在持续交付过程中的工作量。原先在不同的服务器上运行,并监控的服务。现在都交由Swarm完成。

4. 运行状态

可以看到服务宕机状态,其他状态只能从服务中暴露出接口进行管理。

总结:

现阶段的Swarm在很多反面适应做小系统的控制。在很多方面的可控性和可用性提高后,应该是一个不错的服务管理工具。

在这里留几个问题:

  1. 如何进行有状态服务的Swarm部署?
  2. 怎么进行服务的自动动态增加部署?
  3. 蓝绿发布怎么进行流量的切换,与服务启动?升级过程中的流量切换也有一样问题?
  4. 服务的状态监控怎么控制服务假死情况?
  5. 在使用Dubbo进行服务部署时,需要进行特殊的集群配置吗?(dubbo协议,不是Restful协议)
  6. 十二因子中的日志事件流的方式的支持?(可以使用网络日志方式)
  7. 配置发现方式在Swarm中的处理方式?

接下来的文章中介绍DevOps上遇到这些问题应该怎样解决?

参考:

Docker Reference Architecture: Running Docker Enterprise Edition at Scale
Docker Reference Architecture: Docker Logging Design and Best Practices
Docker Reference Architecture: Universal Control Plane 3.0 Service Discovery and Load Balancing
Docker Reference Architecture: Designing Scalable, Portable Docker Container Networks
Docker Swarm和Kubernetes在大规模集群中的性能比较
【Docker】 Swarm简单介绍
Stack Overflow:我们是如何做监控的

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
2月前
|
运维 安全 Devops
构建高效稳定的云基础设施:DevOps与容器化技术融合实践
在数字化转型的浪潮中,企业对于IT基础设施的要求越来越高,不仅需要快速响应市场变化,还要确保系统的稳定与安全。本文深入探讨了如何通过融合DevOps文化和容器化技术来构建一个高效、稳定且易于管理的云基础设施。通过实际案例分析,阐述了持续集成/持续部署(CI/CD)流程的优化、自动化测试、监控以及日志管理等关键环节的实施策略,旨在为运维专业人员提供一套切实可行的解决方案。
33 3
|
2月前
|
运维 Kubernetes Devops
构建高效可靠的云基础设施:DevOps与容器化技术融合实践
【2月更文挑战第30天】 在当今快速迭代和竞争激烈的软件开发领域,传统的IT运维模式已难以满足业务发展的需要。本文将探讨如何通过整合DevOps文化和容器化技术,构建一个既高效又可靠的云基础设施。文章首先回顾了DevOps的核心理念及其对运维工作流的影响,接着深入讨论了容器化技术的优势和挑战,并提出了一套结合两者的实施方案。最后,通过案例分析展示了该方案在实际环境中的应用效果和潜在益处。
|
4天前
|
运维 Kubernetes Devops
构建高效自动化运维体系:DevOps与容器化技术融合实践
【5月更文挑战第6天】随着企业IT架构的复杂化以及快速迭代的市场需求,传统的运维模式已难以满足高效率和高质量的交付标准。本文将探讨如何通过结合DevOps理念和容器化技术来构建一个高效的自动化运维体系,旨在实现持续集成、持续部署和自动化管理,提升系统的可靠性、可维护性和敏捷性。
|
9天前
|
运维 Kubernetes Devops
构建高效稳定的云基础设施:DevOps与容器化技术融合实践
【5月更文挑战第1天】 随着云计算的普及和企业数字化转型的加速,传统的IT运维模式已无法满足快速迭代和高可用性的要求。本文探讨了如何通过DevOps文化和容器化技术的融合来构建一个高效、稳定且可扩展的云基础设施。文章首先回顾了DevOps的核心理念及其对运维工作的影响,随后详细介绍了容器化技术的基本概念、优势以及在现代云环境中的关键作用。接着,文中以一系列真实案例为基础,分析了将DevOps与容器化相结合时所面临的挑战和解决方案,并提出了一套实施框架。最后,文章总结了这种融合实践对提高运维效率、加快产品上市速度和保障系统稳定性的积极影响,同时对未来的技术趋势进行了展望。
|
10天前
|
Kubernetes Devops Docker
构建高效稳定的云基础设施:DevOps与容器化技术融合实践
【4月更文挑战第30天】 在当今快速迭代和持续交付的软件发展环境中,传统的IT运维模式已不足以满足企业对效率和稳定性的双重需求。本文将深入探讨如何通过整合DevOps理念和容器化技术来构建一个既高效又稳定的云基础设施。文中不仅阐述了DevOps的核心原则、流程自动化的重要性以及容器化技术的基础知识,还提供了一个详细的实施案例,帮助读者理解这两种技术如何协同工作,以支持复杂的应用程序部署和管理。
|
10天前
|
运维 Devops 持续交付
构建高效稳定的云基础设施:DevOps与容器化技术融合实践
【4月更文挑战第30天】 随着云计算的普及和企业数字化转型的深入,传统的IT运维模式已无法满足快速迭代和高可用性的要求。本文将探讨如何通过融合DevOps理念和容器化技术,构建一套高效、稳定且易于管理的云基础设施。文章首先概述了DevOps的基本概念及其在现代IT管理中的重要性,接着介绍了容器化技术的核心组件和优势,最后详细阐述了如何整合这两种技术以提高系统的稳定性和自动化程度,实现持续集成和持续部署(CI/CD),并通过真实案例分析展示了该融合策略的有效性。
|
10天前
|
运维 Devops 持续交付
构建高效稳定的云基础设施:DevOps与容器化技术融合实践
【4月更文挑战第30天】 在当今数字化转型的浪潮中,企业对IT基础设施的要求越来越高。本文将探讨如何通过整合DevOps理念和容器化技术,构建一个既能快速响应市场变化,又能保证系统高效稳定运行的云基础设施。我们将分析DevOps文化的重要性,容器化技术的选型,以及二者结合带来的优势,同时提供具体的实施策略和案例分析,以帮助企业实现持续集成、持续部署(CI/CD)和微服务架构的落地。
|
10天前
|
人工智能 运维 监控
构建高效自动化运维体系:DevOps与AI的融合实践
【4月更文挑战第30天】 在当今快速迭代的软件开发环境中,高效的自动化运维体系成为确保交付速度和服务质量的关键。本文探讨了如何通过整合DevOps理念和人工智能(AI)技术来构建一个更加智能、高效的运维体系。文章将详细阐述自动化运维的核心组件,以及如何利用AI技术优化这些组件的性能和决策过程。通过实际案例分析,本文展示了这种融合实践在提高运维效率、降低错误率以及提升系统稳定性方面的显著成效。
|
25天前
|
运维 Kubernetes Devops
构建高效自动化运维体系:DevOps与容器技术融合实践
【4月更文挑战第15天】 在当今快速发展的信息技术时代,传统的IT运维模式已难以满足业务敏捷性的需求。本文旨在探讨如何通过整合DevOps理念和容器技术来构建一个高效的自动化运维体系。文章将详细阐述DevOps的核心原则、容器技术的基础知识,以及两者结合的优势。此外,文中还将分享一系列实践经验,包括持续集成/持续部署(CI/CD)流程的搭建、微服务架构的应用,以及监控和日志管理策略的优化,以期帮助企业实现快速、可靠且安全的软件交付过程。
|
27天前
|
运维 Devops 持续交付
构建高效稳定的云基础设施:DevOps与容器化技术融合实践
【4月更文挑战第13天】 在当今快速迭代和持续部署的软件开发环境中,传统的IT运维模式已难以满足业务发展的需求。本文聚焦于如何通过融合DevOps理念与容器化技术,构建一个高效、稳定且易于管理的云基础设施。文章将探讨持续集成/持续交付(CI/CD)流程的优化、容器化技术的最佳实践、以及微服务架构下的应用管理,以期为企业提供一种改进运维效率、加速产品上市时间,同时保障系统稳定性的解决方案。

热门文章

最新文章