容器编排是什么?
容器编排是指自动化容器的部署、管理、扩展和联网。通过容器编排,可以构建跨多个容器的应用服务、跨集群调度容器、扩展这些容器,并持续管理它们的健康状况。容器编排给容器技术带来了巨大的价值,包括:
- 自动化部署:支持根据副本数量,回滚,重启等策略自动部署容器。
- 服务发现与负载均衡:自动发现增加的容器,并进行流量的负载均衡。
- 自动化容器恢复:自动对容器进行健康检查,并根据策略进行重启。
- 弹性伸缩:支持工作节点、容器的自动扩缩容。
一个容器编排平台的核心功能:首先可以自动生成容器实例,并且生成的容器可以跨服务器的,帮助提高可用性和性能,同时还有健康检查、容错、可扩展、网络、服务发现、滚动升级等功能,可以很好地解决需求与资源的匹配编排问题。
容器编排平台的市场竞争曾经非常激烈,主流的有三个:Docker Swarm、Mesos Marathon和Kubernetes。它们各有特点,但同时满足上面上述能力的,只有Kubernetes。
Kubernetes简化了集群范围内相关容器被共同调度管理的复杂性,能够相对容易地支持更强大、更复杂的容器调度算法。随着Kubernetes 越来越成熟,越来越受到市场青睐,最终成为了容器调度的事实标准。
思考:如何快速掌握容器编排技术?
小陈学了一段时间的Kubernetes知识,发觉可以基于Kubernetes来搭建公司网站容器集群。但是Kubernetes涉及的概念太多,千头万绪,学习不得要领,还是找大刘请教。
小陈:师傅,我看了一些Kubernetes的资料。
大刘:哦?已经开始学习Kubernetes了,不错。学得怎么样?
小陈:Kubernetes概念好多、涉及很多知识点,看了一些材料,还是一头雾水。
大刘:嗯,这是正常的。从容器到Kubernetes,无论是技术的广度和深度都增加了很多。Kubernetes概念、组件、技术点很多,如果没领会Kubernetes的设计理念,那就是只抓住了皮毛,没有抓住灵魂,学习Kubernetes就会很困难。
小陈:什么是Kubernetes的设计理念呢?
大刘: Kubernetes是一个面向终态的编排系统。用户按照Kubernetes提供的带有编排逻辑的工作负载模版,向Kubernetes声明期望的应用容器的状态,随后Kubernetes会创建对应的工作负载。Kubernetes的调度器一直在监听各种请求,一旦发现创建了对应的应用容器,立马根据计算节点的情况与预定的策略,把容器调度到最适合的计算节点。计算节点也在监听是否有与自己有关的应用容器创建,如果有,立即拉取用户想要的镜像并运行,并向Kubernetes报告应用容器的状态。工作负载的控制器也在不断监听容器集群的状态是否与用户的预期一致,如果不一致,会按照工作负载控制器的编排逻辑进行处理。容器镜像都创建后,计算节点也会自动发现服务并进行业务负载。
小陈:听起来好神奇。感觉用户只要提交自己想要的工作负载的状态,Kubernetes就会自动工作,最后给到用户期望的。对吧?
大刘:的确如此。这就是Kubernetes强大的地方,基于面向终态的工作机制,可以轻松实现自动部署、服务发现、自动愈合、弹性伸缩等功能。
小陈:师傅一席话,真是让我豁然开朗。那么,怎么学习可以效率高一些呢?
大刘:抓住Kubernetes设计理念后,以单个容器为起点,了解单个容器如何走向一组容器,以及容器集群从创建到运行的整个过程,最好结合实际应用创建部署的过程来进行学习,理论结合实践,这样会快一些,你可以试试。
小陈:好的。我学习中有问题,我再来请教您吧。
大刘:没问题。
Kubernetes是什么?
Kubernetes是Google开源的一个容器编排引擎,它支持自动化部署、大规模可伸缩、应用容器化管理。想象一艘载满集装箱的轮船,轮船在大海上航行,把集装箱送到它们该去的地方。集装箱的英文单词是container,container的另一个翻译就是“容器”。 Kubernetes的英文原意是指用来操纵和控制船舶航向的船舵。大海航行靠舵手,借着这个寓意,Kubernetes希望成为运送集装箱的一个轮船,来管理这些集装箱,也就是管理这些容器。这也是为什么Kubernetes的Logo是一张船舵的图片。
Kubernetes 这个单词是希腊语,它的中文翻译是“舵手”或者“飞行员”。在一些常见的资料中也会看到“ks”这个词,也就是“k8s”,它是通过将中间8个字母“ubernete ”替换为“8”而形成的一个缩写。
在Kubernetes中,我们可以创建多个容器,每个容器里面运行一个应用实例,然后通过内置的负载均衡策略,实现对这一组应用实例的管理、发现、访问,而这些细节都不需要开发和运维人员进行复杂的手工配置和处理。
Kubernetes核心概念
Kubernetes简称K8s,是Google开源的一个容器编排引擎,它支持自动化部署、大规模可伸缩、应用容器化管理。
为什么需要Kubernetes?容器是打包和运行应用程序的好方式。在生产环境中,往往需要管理运行着应用程序的容器,并确保服务不会下线。如果一个容器发生故障,则需要启动另一个容器,类似这样的行为可以交由Kubernetes 来处理。Kubernetes 会满足用户的扩展要求、故障转移你的应用、提供部署模式等。
对于容器和Kubernetes的关系,为了便于理解,可以做个类比:Kubernetes就好比一个操作系统,而容器就好比操作系统上运行的一个进程。
Kubernetes中涉及到的关键名词包含以下这些,他们重要但很抽象,建议您先记住这些名词和概念,在本课程中我们将结合后续实际操作步骤为您展开介绍。
- Pod(容器组):Pod是一个逻辑概念,是一组紧密关联的容器的集合。
- Controller(控制器):控制器通过控制循环监控集群状态,将当前状态转变为期望状态。控制器包含节点控制器、命名空间控制器、工作负载控制器等多种。
- Workload(工作负载):工作负载是在 Kubernetes 上运行的应用程序,分为无状态、有状态、任务、定时任务等多种类型。
- Service(服务):将运行在一个或一组Pod上的应用程序公开为网络服务的方法,是真实应用服务的抽象。
- PV、PVC:PV是存储卷,是集群内的存储资源,PV独立于Pod的生命周期。PVC是存储卷声明,是资源的使用者。Pod挂载PVC,PVC消耗PV资源。
- Namespace(命名空间):命名空间为容器集群提供虚拟的隔离作用。
- etcd:etcd是一个分布式、一致且高可用的键值存储系统,通常被用作Kubernetes所有集群数据的后台数据库。
同时,在本课程最后一个课时《Kubernetes简介》中我们会对这些概念和Kubernetes的核心工作原理做进一步的梳理,以帮助您更好的理解。
练习实验:通过ASK搭建企业级网站应用
https://developer.aliyun.com/adc/scenario/ace330daa1d7428cacf3225bea3207e2