文章目录
- 应用程序部署模式的发展历程
- 传统部署模式
- 虚拟化部署模式
- 容器部署模式
- 容器部署模式的好处
- 容器部署的弊端
- 容器编排
- Kubernetes网址
- Kubernetes架构
- 互联网架构体系
- 云原生(微服务+容器化+Devops+不可变基础设施)
- Kubernetes架构
- Kubernetes组件
- Kubernetes 3 个重要概念
- Kubernetes Pod
- Kubernetes Services
- Kubernetes ReplicationController
- Kubernetes架构、流程、框架
- CKA与CKAD考试
- 考试注意事项
- 考试环境
哈喽,大家好,我是廖志伟,一个专注高并发、高可用、高可靠、微服务、分布式、海量数据、性能调优、项目管理的开发者,希望本篇文章能给你带来收获,喜欢的可以关注我哟。
应用程序部署模式的发展历程
随着信息化社会的不断发展,应用程序的部署方式也经历了从传统到现代的转变。传统部署模式下,应用程序直接运行在物理服务器上,存在着资源分配不均、扩展性差、维护成本高等诸多问题。为了解决这些问题,虚拟化和容器技术相继诞生,为应用程序的部署带来了新的思路和选择。
- 传统部署模式
- 虚拟化部署模式
- 容器部署模式
传统部署模式
- 在传统部署模式下,应用程序直接运行在物理服务器上,缺乏有效的资源管理机制,常常导致资源浪费和性能瓶颈。此外,由于物理服务器数量有限,难以满足大规模应用程序的需求,进一步加剧了资源紧张的状况。
虚拟化部署模式
- 针对传统部署模式的弊端,虚拟化技术应运而生。虚拟化技术通过将物理服务器划分为若干虚拟机(VM),实现了资源的精细化管理和灵活调度。每个虚拟机都拥有独立的操作系统、存储空间和网络连接,从而提高了资源利用率和应用程序的可扩展性。
容器部署模式
- 近年来,容器技术逐渐兴起,成为了应用程序部署的新宠。容器相较于虚拟机,具有更加轻量化的特性,能够在同一物理主机上运行更多的应用程序。此外,容器还具备良好的可移植性,能够跨越不同的操作系统和云环境使用。
容器部署模式的好处
-
首先,容器提供了高度便捷的应用程序创建和部署能力。相较于传统的虚拟机镜像,容器镜像的创建更加迅速,并且能够显著提升部署效率。这使得企业能够更快地响应市场需求,缩短产品上市周期。
-
其次,容器技术支持持续的开发、集成和部署流程。借助容器镜像的不可变特性,企业可以实现快速、安全的回滚操作,从而保证应用程序的可靠性和频繁更新。此外,容器技术还能有效地将开发和运维工作进行分离,使二者能够更好地协作,提高工作效率。
-
再者,容器具备出色的可观测性。它不仅能够展示操作系统层面的信息和指标,同时也能反映出应用程序的运行状况以及其他关键数据。这对于企业监控和诊断问题有着极大帮助,有助于及时发现并解决问题。
-
除此之外,容器还具备良好的环境一致性和可移植性。无论是在本地还是云端,容器都能保持稳定运行,并且可以在不同的操作系统发行版和云平台之间自由迁移。这意味着企业可以根据实际需求,灵活选择最适合自己的部署方案。
-
值得一提的是,容器技术还能实现以应用程序为核心的管理模式。通过提高抽象层次,容器将应用程序从物理硬件转移到了逻辑资源之上,实现了对应用程序的精细化管理。这大大降低了企业的管理成本,提高了资源利用率。
-
最后,容器技术支持松散耦合、分布式、弹性和解耦的微服务架构。应用程序被拆分成多个独立的组件,可以根据业务需求进行动态部署和管理,避免了在单一主机上进行大规模部署的风险。
容器部署的弊端
-
首先,资源的过度使用可能引发严重问题。当容器内部的应用程序消耗过多资源时,容器将占据更多节点资源,从而导致资源无法得到充分利用。这不仅会影响集群的整体性能,还可能导致高负荷状态下的性能急剧下滑。
-
其次,网络性能可能成为大型集群环境中的一大瓶颈。容器间的通信与共享依赖于网络服务,而在大规模集群环境中,网络性能可能无法满足需求,尤其是在众多容器同时进行大量网络通信的情况下。
-
再者,管理难度较大。大型集群环境中的容器数量庞大,管理起来颇为繁琐。用户需应对重复部署、版本冲突等问题,并合理分配容器资源,防止资源浪费。
-
此外,容器的弹性扩展能力相对较弱。由于容器资源是固定的,因此在大规模集群环境中,容器难以根据负载情况进行灵活调整。
-
另外,容器的安全性问题不容忽视。由于容器间的隔离性较弱,易受攻击和入侵,故需采取有效的安全防护措施。
-
最后,资源利用率可能偏低。在大规模集群环境中,由于容器间的资源共享及通信会消耗部分资源,因此整体资源利用率可能不甚理想。
假设一百台机器部署三百个容器,这种场景下,如果使用容器化部署方式进行部署,工作量是非常大的,即便部署上去了,管理这么大的集群也是比较繁琐的,这就需要用到容器编排工具了。
容器编排
容器编排是指通过一个容器编排平台或容器编排技术,对容器、容器应用和容器程序进行管理的过程。容器编排的主要目的是通过自动化部署、管理、弹性伸缩和容器网络管理等任务,提高效率和可靠性。
容器编排的应用场景非常广泛,包括云原生应用、微服务架构、DevOps等。随着云原生技术的推广和实施,容器技术在企业生产环境中的比重越来越大,Kubernetes作为容器编排工具被广泛应用于企业服务中。
容器编排的核心是容器编排工具,如DockerSwarm、Kubernetes和Mesos+Marathon等。这些工具可以帮助企业跨多个容器构建应用程序服务、跨集群调度容器、扩展这些容器以及管理它们的运行状况。
容器编排的主要组件包括Apiserver、Scheduler、Controller-manager、Etcd、flannel、cAdvisor、Node节点等。
- Etcd:类似Zookeeper这种键值对数据库,用来存储Kubernetes的配置信息,它不是Kubernetes里面的组件,是单独的组件。
- flannel:管理网络通讯的插件,Docker容器启动起来之后,在每个机器上都有自己的ip地址,那么在不同主机之间需要相互联通的话,就需要通过这个网络插件来进行管理。
- cAdvisor:监测和管理计算节点上的资源使用情况,包括内存、CPU、网络等资源。可以收集实时的资源使用数据,及时进行资源调配。
- Apiserver是Kubernetes的核心组件,用于提供API服务
- Scheduler负责调度容器
- Controller-manager负责管理容器应用副本数
- Etcd是一个分布式的键值存储系统,用于存储Kubernetes的元数据
- Node节点是Kubernetes的运行节点,负责运行容器。
容器编排技术对比如图所示:
Kubernetes网址
- 中文社区:https://www.kubernetes.org.cn/
- 官方网址:https://kubernetes.io/
Kubernetes架构
互联网架构体系
云原生(微服务+容器化+Devops+不可变基础设施)
Kubernetes架构
Etcd、Api Server、Schedular、Controller Manager都是在Master节点进行管理的,也就是控制节点。如果把Kubernetes比作公司的话,那么Master节点就相当于公司的总部,总部里面有不同的角色。
- Etcd:数据库,存储所有配置数据的,可以当作资料库。
- Api Server:相当于联络官或者联络员,可以当作秘书,所有人想找老板谈事都需要通过秘书。
- Schedular:调度器,管理Pod存放在那台机器节点上,可以当作指挥官,总裁办,来了一个活,需要总裁办作决定由谁负责干活。
- Controller Manager:控制器控制器管理者,对资源进行控制,每一种资源都有一个控制器,所有的控制器被控制器管理者进行管理。
- Kubectl:允许用户对集群进行各种操作。相当于董事长,告诉你现在要干个什么事,负责对外交互的。例如,创建新的Pod、更新现有Pod的配置等等。
master里面的这些角色都不是真正干活的,他们是负责管理干活的人的。真正干活的是kubelet和kube-proxy。
- kube-proxy负责处理客户端的请求,相当于看大门的,会告诉你里面有什么东西。
- kubelet负责管理容器的生命周期,例如创建,更新,销毁容器,相当于业务人员干具体的活。
所以的操作都是使用HTTPS协议来进行的。
其中Etcd可以和master节点一起部署,也可以单独部署,在大规模的生产环境中通常会单独部署。
Kubernetes组件
Master节点组件:
- APIServer:APIServer是整个Kubernetes集群的入口点,其主要功能在于封装并实现对核心对象的增删改查等操作,同时以RESTful API的形式向外部客户端及内部组件提供服务调用接口。值得注意的是,APIServer所维护的REST对象会被持久化至Etcd数据库(这是一种具备高度分布式且强一致性的Key/Value存储系统)。
- Scheduler:在Kubernetes集群中,Scheduler负责资源的调度工作,即为新创建的Pod分配相应的计算节点。通过将此部分功能独立出来形成一个组件,使得我们能够更加灵活地进行调度策略的调整或替换。
- Controller Manager:负责执行各种控制器,目前有两类:
1.ReplicationController:ReplicationController是一种控制器,其主要职责在于定期关联ReplicationController与Pod之间的关系,确保ReplicationController所定义的副本数量始终与实际运行中的Pod数量保持一致。
2.EndpointController:EndpointController也是一种控制器,其主要任务是定期更新Service与Pod之间的关联信息,从而确保Service到Pod的映射关系始终处于最新状态。
Node节点组件:
- kubelet:kubelet被设计用来对docker容器的生命周期进行全方位监控和管理。在其功能范围之内包括了诸如启动、停止、监控以及调整这些Docker容器的运行状态等操作。此外,kubelet还会定期从etcd服务器中获取分配给当前节点的pod信息,然后依据这些信息来启动或者停止相应的容器。
kubelet工作原理:
- 从etcd服务器中获取Pod信息:kubelet会定期从etcd服务器中获取分配给当前节点的Pod信息,这是为了确保每个Pod都能够在正确的节点上运行。
- 启动和停止容器:kubelet会根据Pod信息来启动或者停止相应的容器。例如,如果一个Pod需要运行两个容器,那么kubelet就会启动这两个容器。
- 监控容器状态:kubelet会持续监控容器的运行状态,并及时处理任何异常情况。如果发现某个容器出现故障,kubelet会自动重启该容器。
- 接收apiserver的HTTP请求:kubelet会接收来自apiserver的HTTP请求,并将Pod的运行状态报告给apiserver。
- proxy:主要负责为Pod提供代理服务,以实现Pod之间的通信。具体来说,kubelet会定期从etcd服务器中获取所有的service信息,然后依据这些信息来创建代理。
proxy工作原理:
- 从etcd服务器中获取Service信息:kubelet会定期从etcd服务器中获取所有的Service信息,以便为Pod提供正确的代理服务。
- 创建代理:kubelet会根据Service信息来创建代理,从而实现Pod之间的通信。
- 转发请求:当某个客户端Pod想要访问其他Pod时,其发出的访问请求会首先经过本地代理进行转发。
Kubernetes 3 个重要概念
Kubernetes Pod
Kubernetes Pod,作为部署和调度的基本维度单位,具有多种特性和优势。它不仅可以容纳容器,更重要的是,其在逻辑层面上代表了特定应用程序的执行实例。例如,在开发一个web应用时,通常包括前端、后端以及数据库等多重组件,所有这些组件都可以被封装进各自独立的容器之中,然后通过创建包含三个此类容器的Pod来实现任务的协同运作。可以看着容器的抽象,类似一个豌豆荚里面有多个豌豆,这里面的豌豆就是Pod。
Kubernetes Services
Kubernetes的基础构造块之一便是"Services"(以下简称"服务")。它作为实际应用程序服务的抽象形式,背后通过多种对应的容器予以支撑。一项特定服务的执行过程受到"Proxy"端口和服务选择器的精细控制,可以将来自外部的请求精准导引至那些负责提供后端服务的容器中。值得注意的是,从外部视角来看,每个服务均呈现出一种单一且统一的访问界面。这意味着,外部用户无需深入理解后端的具体运作方式以及如何进行有效的运行管理,从而大大降低了后端扩展和维护的难度。
相当于平时访问服务的时候,很少会通过ip地址进行访问,通常都会访问Service名字或者ip进行访问,所以Kubernetes Services就是真实服务的抽象,每个相应的服务都会有对应的Pod来对它进行支持。
在Kubernetes中,Pod和Services的连接是通过Ingress来实现的。这个机制是在集群中的IngressController(控制器)上运行的,它能实现对请求流量的路由选择,从而将请求路由到正确的Pod。这是通过将Ingress与Services进行绑定,并使用基于主机IP的负载均衡技术,通过将请求转发到多个Pod的实例来实现的。
当涉及到大规模的容器集群时,Pod和Services之间的网络通信可能会面临延迟和吞吐量问题,这时可以使用负载均衡器来均衡流量,并将Pod组织成多个副本以提高容器的水平扩展性。在Pod和Service网络中,确保网络安全是一个重要的挑战,可以在Pod和Service之间实施网络策略和访问控制列表(ACL),限制网络通信只能在受信任的Pod之间进行。
Kubernetes ReplicationController
首先,我们需要了解什么是Replication Controller。它是Kubernetes中用于管理Pod副本数量的核心组件之一,也是实现Pod动态伸缩的关键机制。简单来说,Replication Controller可以被视为一种抽象概念,用于描述Pod的复制行为。当我们定义了一个Replication Controller后,Kubernetes会根据我们设定的副本数量,为每个副本创建一个独立的Pod实例。这样做的目的在于确保实际运行的Pod数量始终与预期的副本数量保持一致,从而有效地避免了由于单个Pod故障导致整个应用程序无法正常工作的风险。
其次,Replication Controller还具有高度灵活性和可定制性。我们可以根据实际需求,灵活调整Replication Controller的配置参数,包括副本数量、Pod启动策略等。此外,Replication Controller还提供了丰富的事件监听功能,使得我们能够及时感知到Pod的状态变化,并采取相应的处理措施,如自动重启失败的Pod等。这些特性使得Replication Controller成为了构建高可用性分布式应用的理想选择。
最后,我们需要认识到,Replication Controller并非孤立存在,而是与其他Kubernetes组件紧密配合,共同保障分布式应用的稳定运行。例如,在负载均衡方面,Kubernetes提供了多种负载均衡器供用户选择,而Replication Controller则负责将流量均匀分配给各个Pod副本,从而实现负载均衡。同时,Kubernetes还提供了强大的监控能力,帮助我们实时掌握应用程序的运行状况,进一步提高了应用程序的可靠性和稳定性。
Kubernetes架构、流程、框架
CKA与CKAD考试
Kubernetes认证体系由三部分组成:CKA(Certified Kubernetes Administrator)和CKAD(Certified Kubernetes Application Developer)、CKS(Certified Kubernetes Security Specialist)。其中CKA和CKAD两个认证分别针对Kubernetes管理员和应用程序开发人员的角色进行设计,以确保认证持有者具备相应的技能、知识和能力。
- 官方网站:https://docs.linuxfoundation.org/tc-docs/certification/tips-cka-and-ckad
- 中文网站:https://training.linuxfoundation.cn/
CKA认证的优势
- 提升职业竞争力:CKA认证能够证明认证持有者具备Kubernetes管理员所需的专业技能和知识,从而增强其在就业市场上的竞争优势。
- 提高工作效率:通过CKA认证,认证持有者能够更高效地完成Kubernetes环境的部署、配置和维护等任务,进而提高企业的运营效率。
- 增强企业声誉:CKA认证是业界公认的Kubernetes领域权威认证之一,获得此认证的企业能够迅速树立良好的品牌形象,吸引更多优秀人才加入。
CKAD认证的优势
- 提升专业水平:CKAD认证能够证明认证持有者具备Kubernetes应用程序开发所需的专业技能和知识,从而提升其在行业内的专业地位。
- 促进创新发展:CKAD认证持有者能够运用核心资源构建、监控以及故障排除Kubernetes的可扩展应用程序和工具,为企业的创新发展提供有力支撑。
- 增加就业机会:随着Kubernetes技术的广泛应用,CKAD认证持有者将拥有更为广阔的就业前景,有助于企业快速组建高素质的研发团队,实现业务增长。
CKA考试概述:CKA考试涵盖了云原生容器管理平台Kubernetes的基础概念、部署配置及验证方法、安全策略实施等多个方面。具体来说,其主要包括应用生命周期管理、安装与配置、核心概念理解、网络设置、任务调度、集群维护、日志记录与监控以及存储管理等八个大类,每个类别所占权重如下:
- 应用生命周期管理:8%
- 安装与配置:12%
- 核心概念理解:19%
- 网络设置:11%
- 任务调度:5%
- 安全策略实施:12%
- 集群维护:11%
- 日志记录与监控:5%
- 存储管理:7%
CKAD考试概述:CKAD考试则更注重于Kubernetes应用开发者所需掌握的技能,重点考察考生对Kubernetes核心概念的深入理解、多容器Pod的配置能力、可观测性设计、服务与网络架构搭建、状态持久化等方面的知识。具体来说,其主要包括核心概念理解、配置、多容器Pod、可观测性、Pod设计、服务与网络架构搭建、状态持久化等七个大类,每个类别所占权重如下:
- 核心概念理解:13%
- 配置:18%
- 多容器Pod:10%
- 可观测性:18%
- Pod设计:20%
- 服务与网络架构搭建:13%
- 状态持久化:8%
考试注意事项
- 考试费用是在300美刀,具体情况根据实际情况可能会有所调整,在一年内有二次考试的机会,线上二个小时解决,同时需要保证有一个外置的摄像头,需要能聚焦的摄像头,考试属于半开卷,允许查资料,只允许查文档和博客,超出第一次会警告,第二次直接取消资格,取消资格后第二次考试机会也没有了。
- 考试形式为在线考试,试题内容包含了15至20道基于实际操作能力的题目,这些题目将在运行Linux操作系统的电脑上进行解答。
- 考试时长为两小时,考生需在规定时间内完成答题。考试过程中,会采用流媒体音频、视频及屏幕共享等技术进行远程监控,确保考试的公正性与公平性。考试结束后,将在24小时内发送电子邮件通知成绩。
- 请注意,在考试过程中,需要使用具有root权限的账号登录,并通过执行"sudo+i"命令获取该权限。同时,为了保证考试的顺利进行,建议不要对传入端口8080/tcp、4505/tcp和4506/tcp进行任何限制,包括更改默认防火墙配置文件或使用交互式防火墙命令。
- 此外,为了满足考试需求,可能需要调整系统安全策略,以安装考试所需的服务和应用程序。在考试前,需要预先在Chrome浏览器中安装Innovative Exams Screensharing插件,以便实现屏幕共享功能。如果因网络原因导致插件无法正常安装,也可以尝试通过科学上网方式进行安装。
- 在考试期间,只提供一个终端控制台供使用。但可以利用终端多路复用器(例如GNU Screen和Tmux)创建多个虚拟控制台,以便更高效地完成各项任务。请务必注意,每项任务都应在指定的组集中完成,以避免频繁切换。
- 考试需要准备护照,不用身份证,如果没有护照可能需要公证。
- 注意版本的差别,因为Kubernetes更新很快,不同版本之间有些命令不能使用。
考试环境
考试的每个任务必须在指定的组集/配置上下文中完成。为了最大限度地减少切换,任务被分组,以便给定组集上的所有问题连续出现。
有六个 cluster(CKA) / 四个 cluster (CKAD) 组成考试环境,每个 cluster 由不同数量的容器组成。它会告诉你class的名字是什么,有几台机器,用什么网络插件。
官网考前文档:
-
Read the Curriculum:https://github.com/cncf/curriculum
-
Read the important tips:https://docs.linuxfoundation.org/tc-docs/certification/tips-cka-and-ckad
-
Read the FAQ:https://docs.linuxfoundation.org/tc-docs/certification/faq-cka-ckad
关注我带你继续嗨