一、通俗的理解编排

1. 编排是什么

编排这个词,去搜 google 翻译,推荐的是 Orchestration 这个单词。但是你反过来搜 Orchestration 中文意思,它的翻译是“管弦乐编曲”。在管弦乐曲里,要完成多种乐器之间的协调配合肯定需要一种方法,这种方法也叫编排。由此可感受到,有编排的场景存在多种组件事务,而且这些组件事务具有一定的独立性。个人理解,编排是按照某种机制让各种组件自动化配合运作,然后得到你想要的结果。

2. 编排与自动化

初学者经常会把自动化单纯的理解为就是编排,其实这两个概念是有区别的。编排更注重的是组建配合产生出良好的结果,而自动化更注重的是组件运行的方式和效率。但是在IT世界里,编排是离不开自动化的,没有自动化的编排只是一种工作流,有了自动化的编排就能机动化的动起来。好比在生产车间里,每个环节如果都是靠人来运作,虽然每个工人一丝不苟很、按部就班,但是这仅仅也是体现个工作流的完美,没有体现出高效,这样的编排没有灵魂。编排它会穿越你的整个 IT 环境。例如横穿你的 web 服务器,数据库,中间件,负载平衡器等。这里涉及到多个层次,不同的技术领域,IT管理者需要站在一个高纬度去认识你的生产系统,设计出一套复杂的编排机制。有些陈旧的系统和技术债,可能让你寸步难行。

3. 编排意义

有些人或许会疑问,编排的意义在哪?它能带来什么收益?通过上面两点的讲解,编排或许可以理解为一种IT工作流,它能把你负责的IT系统都串接起来,然后自动化运作。这很容易让你想到如果真这么做到了,那不是一劳永逸?如果是输入和输出要求都不变的情况下或许真的能一劳永逸。但是现实的情况往往不是这样。公司的业务更新迭代,IT支撑环境也是会不停的更新迭代,没有一种IT环境能一直保持不变的支撑下去。但是,编排的思想却是贯彻着整个IT阶段发展,每一个发展阶段都有不一样的编排思路。物理机时代,人们用人肉运维“编排”(搬、挪)物理机;虚拟机时代,人们用脚本、CMDB、openstack heat 等“编排”虚拟机;最新容器时代,人们用 K8S、微服务编排容器。套用网上一句话:编排旨在简化并优化重复性的频发流程,以确保准确、快速的软件部署。因为企业知道产品上市速度越快、成功几率越大。只要流程是重复性的,便可通过自动执行相关任务来优化该流程,以消除重复操作。

二、K8S 与编排

1. 实现完美编排的先决条件

其实编排的对象越“原子”、越轻量那么对于编排的操作就更加的灵活。前面提到,业务会随时改变,那么支撑的生产系统也需要随之变化。如果编排的工作流程组件耦合度太高,那么变更就很困难。想想我们过去没有虚拟化的时代,应用直接跑在物理机里,那么应用的安装、迁移都会显得费劲。到了虚拟机时代,会简单很多,但是虚拟机本身还是显得有些重,迁移也受底层硬件条件的影响。可幸的是,容器时代这些问题得到了很好的解决,我们直接能操作“进程”了,通过容器我们能轻松部署、迁移、交付... 容器真是为良好的编排打好了基础。

在当前云原生时代,应用一般由单独容器化的组件(通常称为微服务)组成,且必须按顺序在网络级别进行组织,以使其能够按照计划运行。以这种方法对多个容器进行组织的流程即称为容器编排。在现代开发当中,整体式的应用早已成为过去时,如今的应用由数十乃至数百个松散结合的容器式组件构成,而这些组件需要通过相互间的协同合作,才能使既定的应用按照设计运作。容器编排是指对单独组件和应用层的工作进行组织的流程。虽然诸如 Apache Mesos、Google Kubernetes 以及 Docker Swarm 等平台均有其特定的容器管理方法,但所有的容器编排引擎均可让用户控制容器启动和停止的时间、将其分组合到群集中,以及协调应用组合的流程。容器编排工具允许用户指导容器部署与自动更新、运行状况监控以及故障转移等步骤。

2. K8S 如何实现编排

K8S 是容器资源管理、调度平台,换句话说它就是容器资源的编排系统。那么容器编排都有哪些动作和流程呢?总体来讲有六大部分:

  • 资源调度
  • 资源管理
  • 服务发现
  • 健康检查
  • 自动伸缩
  • 更新升级

资源调度

在分布式系统里,资源的调度是非常重要的,K8S 是通过 scheduler 组件来对 Pod 进行调度的。Scheduler 调度器做为 K8S 的三大核心组件之一, 承载着整个集群资源的调度功能,其根据特定调度算法和策略,将 Pod 调度到最优工作节点上,从而更合理与充分的利用集群计算资源,使资源更好的服务于业务服务的需求。资源的调度是一套分布式系统最基本的核心指标。设想,如果连资源都无法调度好,那么上层的服务将没法玩。

资源管理

资源,一般分为计算资源、网络资源、存储资源。计算资源通常是 CPU、MEM(当然现在还有 GPU 资源),对于这块 K8S 通过可压缩和不可压缩的机制来做区分,这里 CPU 资源是可压缩的,内存是不可压缩的。这里 K8S 主要是通过 Requests 和 Limits 参数来灵活控制 Pod 对资源的使用。

服务发现

所有资源的分配、支撑都是为了跑服务。由于 Pod 的 IP 不是固定的,所以外在的程序或者内部的程序如何访问 K8S 里面的某个 Pod,肯定需要一种固定的访问方式,那么这种方式叫做 service。所有创建的服务只有轻松简单地被发现、被访问,这样才能更加的高效。

健康检查

计算机世界里没有任何一种服务能一直保持正常运行(如果有,那真是太牛了!)。所以,总有各种内在、外在因素影响着服务的稳定运行。那么监控检测服务是否正常运行非常重要,在 K8S 里一般用 liveness 和 readiness 探针机制来做健康检查(前面文章也有提到过探针的用法)。

自动伸缩

在运维环境里,资源的扩容和管理是比较头疼的一件事。工程师一般会比较难的精确把握业务需要多少资源,多了少了都会一定的影响成本和平台的稳定性。所以,假如有套机制能根据当前的负载高低,动态的、精准的扩容资源那么对工程师来说是一个很大的福音。虚拟机时代之前,这个都非常难实现,因为涉及到环境的快速迁移和复制。容器化时代很自然的解决了这个问题,K8S 里使用 Horizontal Pod Autoscaling(Pod 横向扩容机制)来保证资源的按需扩容。

更新升级

程序会随着业务的发展而不断的迭代,所以我们都会架设一套完整的 CICD 来完善程序的发布、更新机制。K8S 目前在 CICD 里占了很重要的角色(如图)。另外,K8S 的内部控制器 ReplicationController 与 Deployment 也为服务的滚动和平滑升级提供了很好的机制。这样实现什么蓝绿发布,K8S 可以协助轻松做到。

Kubernetes 学习总结(34)—— 如何理解编排相关推荐

  1. 【34】理解虚拟机:你在云上拿到的计算机是什么样的?

    [计算机组成原理]学习笔记--总目录 [34]理解虚拟机:你在云上拿到的计算机是什么样的? 引言 一.缘起分时系统 二.从"黑色星期五"到公有云 三.虚拟机的技术变迁 1.解释型虚 ...

  2. Kubernetes学习前的必知知识点

    Table of Contents DevOps详解 到底该如何理解DevOps 持续集成,持续交付,持续部署(CI/CD)简介 在有关微服务.DevOps.Cloud-native.系统部署等的讨论 ...

  3. Kubernetes学习笔记【2年以前的笔记】

    Kubernetes学习笔记 知识储备 熟悉linux基础命令 熟悉docker的基本原理和操作 了解ssl证书工作原理 了解负载均衡工作原理(L4/L7) 了解分布式概念 了解域名解析原理 了解网络 ...

  4. Kubernetes学习笔记-未整理

    Kubernetes学习笔记 标签:Kubernetes 学习笔记 原文:https://github.com/wtysos11/NoteBook/blob/master/微服务/Kubernetes ...

  5. Kubernetes学习笔记三:Docker安装,Docker使用,编写Dockerfile,制作容器镜像,上传docker镜像

    文章目录 Docker的安装 Docker的使用:docker run命令 查看本地存在的镜像:docker images命令 编写Dockerfile,制作容器镜像 docker build制作镜像 ...

  6. Kubernetes学习笔记二:Namespace,Cgroups 的隔离与应用

    Kubernetes学习系列文章:Kubernetes-博客专栏 今天在学习极客时间专栏:<深入剖析Kubernetes> 第五讲05 | 白话容器基础(一):从进程说开去和第六讲06 | ...

  7. Kubernetes 学习总结(19)—— Kubernetes 集群管理平台如何选择?Rancher vs KubeSphere

    前言 Kubernetes(K8s)集群管理平台都是基于 Kubernetes 提供功能,可以说他们是在 K8s 的基础上封装了一层更为友好的操作方式.他们都是为了降低 k8s 集群运维复杂度,降低运 ...

  8. Kubernetes学习-K8S安装篇-Kubeadm安装高可用K8S集群

    Kubernetes学习-K8S安装篇-Kubeadm高可用安装K8S集群 1. Kubernetes 高可用安装 1.1 kubeadm高可用安装k8s集群1.23.1 1.1.1 基本环境配置 1 ...

  9. Kubernetes学习二:资源管理及入门实战

    此部分上接kubernetes学习一:https://blog.csdn.net/weixin_43155804/article/details/125831675?spm=1001.2014.300 ...

最新文章

  1. opencv中stereoCalibrate函数双目标定
  2. 解析SharedPreferences
  3. golang匿名组合
  4. C#中如何将光标定位在某个控件中?
  5. SQL Server 2016 列存储技术做实时分析
  6. vue第二次ajax失效,解决VUE-Router 同一页面第二次进入不刷新的问题
  7. u盘修复linux系统,360u盘修复工具官方版u盘pe安装linux系统
  8. 分布式事务在Sharding-Sphere中的实现
  9. [共享]一个文件上传的控件,绝对是精品源码
  10. android视频通信和web端,探讨用webrtc在手机和浏览器之间实现音视频实时通信的实施环境...
  11. 如何设置鼠标滚轮html,win7如何设置鼠标滚轮
  12. Outlook简单配置
  13. 正向传播、反向传播和计算图
  14. 暗战洗礼 黑客这样炼成--《暗战强人. 黑客攻防入门全程图解》
  15. Mac 录屏制作gif动图
  16. 通过USB设置手机连接电脑上网
  17. lattice diamond 安装及获取license方法
  18. 老王论坛蓝色大屏幕调节亮度
  19. 2018-10-20-WPF-通过位处理合并图片
  20. 平面三角形与三角函数(1):角的度量与换算、三角函数的定义、图形与特征

热门文章

  1. 进程导入表修复工具——Universal Import Fixer
  2. SyntaxError: EOL while scanning string literal【已解决】
  3. 元旦去哪儿?python爬虫告诉你!
  4. 服务器风冷型号大全,PowerEdge 15G服务器的风冷散热“新花样”
  5. Armbian Bionic 桌面视频和3D加速
  6. 得力计算机隐藏游戏,得力计算器游戏 | 手游网游页游攻略大全
  7. 谷歌GDELT数据下载代码
  8. 计算机专业的就业方向
  9. 关于UAP无法运行server的解决办法
  10. POJ1008 Maya Calendar