【Kubernetes系统与CKA(D)考试经验】

哈喽,大家好,我是廖志伟,一个专注高并发、高可用、高可靠、微服务、分布式、海量数据、性能调优、项目管理的开发者,希望本篇文章能给你带来收获,喜欢的可以关注我哟。

Java程序员廖志伟

csdn分割线

应用程序部署模式的发展历程

随着信息化社会的不断发展,应用程序的部署方式也经历了从传统到现代的转变。传统部署模式下,应用程序直接运行在物理服务器上,存在着资源分配不均、扩展性差、维护成本高等诸多问题。为了解决这些问题,虚拟化和容器技术相继诞生,为应用程序的部署带来了新的思路和选择。

  1. 传统部署模式
  2. 虚拟化部署模式
  3. 容器部署模式

传统部署模式

  • 在传统部署模式下,应用程序直接运行在物理服务器上,缺乏有效的资源管理机制,常常导致资源浪费和性能瓶颈。此外,由于物理服务器数量有限,难以满足大规模应用程序的需求,进一步加剧了资源紧张的状况。

传统部署模式


虚拟化部署模式

  • 针对传统部署模式的弊端,虚拟化技术应运而生。虚拟化技术通过将物理服务器划分为若干虚拟机(VM),实现了资源的精细化管理和灵活调度。每个虚拟机都拥有独立的操作系统、存储空间和网络连接,从而提高了资源利用率和应用程序的可扩展性。

虚拟化部署模式


容器部署模式

  • 近年来,容器技术逐渐兴起,成为了应用程序部署的新宠。容器相较于虚拟机,具有更加轻量化的特性,能够在同一物理主机上运行更多的应用程序。此外,容器还具备良好的可移植性,能够跨越不同的操作系统和云环境使用。

容器部署模式

容器部署模式的好处

  • 首先,容器提供了高度便捷的应用程序创建和部署能力。相较于传统的虚拟机镜像,容器镜像的创建更加迅速,并且能够显著提升部署效率。这使得企业能够更快地响应市场需求,缩短产品上市周期。

  • 其次,容器技术支持持续的开发、集成和部署流程。借助容器镜像的不可变特性,企业可以实现快速、安全的回滚操作,从而保证应用程序的可靠性和频繁更新。此外,容器技术还能有效地将开发和运维工作进行分离,使二者能够更好地协作,提高工作效率。

  • 再者,容器具备出色的可观测性。它不仅能够展示操作系统层面的信息和指标,同时也能反映出应用程序的运行状况以及其他关键数据。这对于企业监控和诊断问题有着极大帮助,有助于及时发现并解决问题。

  • 除此之外,容器还具备良好的环境一致性和可移植性。无论是在本地还是云端,容器都能保持稳定运行,并且可以在不同的操作系统发行版和云平台之间自由迁移。这意味着企业可以根据实际需求,灵活选择最适合自己的部署方案。

  • 值得一提的是,容器技术还能实现以应用程序为核心的管理模式。通过提高抽象层次,容器将应用程序从物理硬件转移到了逻辑资源之上,实现了对应用程序的精细化管理。这大大降低了企业的管理成本,提高了资源利用率。

  • 最后,容器技术支持松散耦合、分布式、弹性和解耦的微服务架构。应用程序被拆分成多个独立的组件,可以根据业务需求进行动态部署和管理,避免了在单一主机上进行大规模部署的风险。

容器部署的弊端

  • 首先,资源的过度使用可能引发严重问题。当容器内部的应用程序消耗过多资源时,容器将占据更多节点资源,从而导致资源无法得到充分利用。这不仅会影响集群的整体性能,还可能导致高负荷状态下的性能急剧下滑。

  • 其次,网络性能可能成为大型集群环境中的一大瓶颈。容器间的通信与共享依赖于网络服务,而在大规模集群环境中,网络性能可能无法满足需求,尤其是在众多容器同时进行大量网络通信的情况下。

  • 再者,管理难度较大。大型集群环境中的容器数量庞大,管理起来颇为繁琐。用户需应对重复部署、版本冲突等问题,并合理分配容器资源,防止资源浪费。

  • 此外,容器的弹性扩展能力相对较弱。由于容器资源是固定的,因此在大规模集群环境中,容器难以根据负载情况进行灵活调整。

  • 另外,容器的安全性问题不容忽视。由于容器间的隔离性较弱,易受攻击和入侵,故需采取有效的安全防护措施。

  • 最后,资源利用率可能偏低。在大规模集群环境中,由于容器间的资源共享及通信会消耗部分资源,因此整体资源利用率可能不甚理想。

假设一百台机器部署三百个容器,这种场景下,如果使用容器化部署方式进行部署,工作量是非常大的,即便部署上去了,管理这么大的集群也是比较繁琐的,这就需要用到容器编排工具了。


容器编排

容器编排是指通过一个容器编排平台或容器编排技术,对容器、容器应用和容器程序进行管理的过程。容器编排的主要目的是通过自动化部署、管理、弹性伸缩和容器网络管理等任务,提高效率和可靠性。

容器编排的应用场景非常广泛,包括云原生应用、微服务架构、DevOps等。随着云原生技术的推广和实施,容器技术在企业生产环境中的比重越来越大,Kubernetes作为容器编排工具被广泛应用于企业服务中。

K8s 容器生态系统及容器编排技术对比
容器编排的核心是容器编排工具,如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的运行节点,负责运行容器。

容器编排技术对比如图所示:
K8s 容器生态系统及容器编排技术对比

Kubernetes网址

Kubernetes架构

互联网架构体系

互联网架构体系

云原生(微服务+容器化+Devops+不可变基础设施)

云原生(微服务+容器化+Devops+不可变基础设施)

Kubernetes架构

Kubernetes概念
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协议来进行的。
Kubernetes架构其中Etcd可以和master节点一起部署,也可以单独部署,在大规模的生产环境中通常会单独部署。

Kubernetes组件

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工作原理:

  1. 从etcd服务器中获取Pod信息:kubelet会定期从etcd服务器中获取分配给当前节点的Pod信息,这是为了确保每个Pod都能够在正确的节点上运行。
  2. 启动和停止容器:kubelet会根据Pod信息来启动或者停止相应的容器。例如,如果一个Pod需要运行两个容器,那么kubelet就会启动这两个容器。
  3. 监控容器状态:kubelet会持续监控容器的运行状态,并及时处理任何异常情况。如果发现某个容器出现故障,kubelet会自动重启该容器。
  4. 接收apiserver的HTTP请求:kubelet会接收来自apiserver的HTTP请求,并将Pod的运行状态报告给apiserver。
  • proxy:主要负责为Pod提供代理服务,以实现Pod之间的通信。具体来说,kubelet会定期从etcd服务器中获取所有的service信息,然后依据这些信息来创建代理。

proxy工作原理:

  1. 从etcd服务器中获取Service信息:kubelet会定期从etcd服务器中获取所有的Service信息,以便为Pod提供正确的代理服务。
  2. 创建代理:kubelet会根据Service信息来创建代理,从而实现Pod之间的通信。
  3. 转发请求:当某个客户端Pod想要访问其他Pod时,其发出的访问请求会首先经过本地代理进行转发。

Kubernetes组件

Kubernetes 3 个重要概念

Kubernetes Pod

Kubernetes Pod,作为部署和调度的基本维度单位,具有多种特性和优势。它不仅可以容纳容器,更重要的是,其在逻辑层面上代表了特定应用程序的执行实例。例如,在开发一个web应用时,通常包括前端、后端以及数据库等多重组件,所有这些组件都可以被封装进各自独立的容器之中,然后通过创建包含三个此类容器的Pod来实现任务的协同运作。可以看着容器的抽象,类似一个豌豆荚里面有多个豌豆,这里面的豌豆就是Pod。
Kubernetes 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架构

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架构、流程、框架

Kubernetes (k8s)编排调度框架

Kubernetes架构

CKA与CKAD考试

Kubernetes认证体系由三部分组成:CKA(Certified Kubernetes Administrator)和CKAD(Certified Kubernetes Application Developer)、CKS(Certified Kubernetes Security Specialist)。其中CKA和CKAD两个认证分别针对Kubernetes管理员和应用程序开发人员的角色进行设计,以确保认证持有者具备相应的技能、知识和能力。

CKA认证的优势

  1. 提升职业竞争力:CKA认证能够证明认证持有者具备Kubernetes管理员所需的专业技能和知识,从而增强其在就业市场上的竞争优势。
  2. 提高工作效率:通过CKA认证,认证持有者能够更高效地完成Kubernetes环境的部署、配置和维护等任务,进而提高企业的运营效率。
  3. 增强企业声誉:CKA认证是业界公认的Kubernetes领域权威认证之一,获得此认证的企业能够迅速树立良好的品牌形象,吸引更多优秀人才加入。

CKAD认证的优势

  1. 提升专业水平:CKAD认证能够证明认证持有者具备Kubernetes应用程序开发所需的专业技能和知识,从而提升其在行业内的专业地位。
  2. 促进创新发展:CKAD认证持有者能够运用核心资源构建、监控以及故障排除Kubernetes的可扩展应用程序和工具,为企业的创新发展提供有力支撑。
  3. 增加就业机会:随着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的名字是什么,有几台机器,用什么网络插件。
考试环境

官网考前文档:

关注我带你继续嗨

我是廖志伟
我是廖志伟我是廖志伟

关注我

<think>好的,用户遇到了Git合并时本地更改会被覆盖的问题,需要解决方案。根据之前的引用资料,解决方法主要有commit、stash和revert三种。首先,我得确认用户的具体情况,比如他们的本地更改是否已经完成,是否需要保留,或者是否可以丢弃。用户可能不太清楚这三种方法的适用场景,需要详细解释每个选项的步骤和优缺点。比如,commit适用于需要保留更改的情况,stash适合临时保存以便后续恢复,而revert则是直接撤销更改,适用于不需要保留的情况。需要结构清晰,分点说明,每个方法都给出操作步骤和适用场景,帮助用户理解哪种情况最适合他们。还要注意使用中文,避免技术术语过于复杂,让用户容易理解。同时,生成相关问题,可能涉及如何恢复stash的内容,或者如何避免频繁冲突等,扩展用户的知识点。另外,要确保LaTeX格式正确,但在这个问题中可能用不上数学公式,所以主要关注代码块和引用标识。检查引用是否正确,比如引用[^1]和[^2]的来源是否相关,用户提供的引用内容是否准确对应解决方案。 最后,确保回答真实可靠,操作步骤准确无误,避免误导用户。可能还需要提醒用户根据具体情况选择方法,比如如果有未完成的实验性代码,stash可能是更好的选择,而如果是确定要保留的修改,则应该commit。</think>要解决Git合并时本地更改被覆盖的问题,可根据不同场景选择以下三种方法: ### 一、提交本地更改(commit) **适用场景**:当本地更改已测试通过且需要保留到版本历史中。 **操作步骤**: 1. 将改动添加到暂存区: ```bash git add . # 添加所有文件 # 或指定文件 git add file1.txt file2.py ``` 2. 提交更改并添加描述: ```bash git commit -m "完成用户登录模块优化" ``` 3. 执行合并操作: ```bash git merge origin/main ``` **优点**:保留完整的开发记录,便于后续追溯[^1]。 ### 二、暂存更改(stash) **适用场景**:需要临时保存未完成的修改(如调试代码),优先处理合并操作。 **操作步骤**: 1. 保存当前工作状态: ```bash git stash # 可选添加备注 git stash save "用户登录模块调试代码" ``` 2. 查看暂存记录列表: ```bash git stash list ``` 3. 合并远程分支: ```bash git merge origin/main ``` 4. 恢复暂存内容: ```bash git stash pop # 恢复并删除最近一次暂存 # 或指定特定暂存 git stash apply stash@{1} ``` **优点**:保持工作目录整洁,特别适合处理紧急合并任务[^2]。 ### 三、撤销本地更改(revert) **适用场景**:本地修改可丢弃(如实验性代码或错误修改)。 **操作步骤**: 1. 撤销所有未提交的修改: ```bash git checkout -- . # 全部文件 # 或指定文件 git checkout -- file1.txt ``` 2. 执行合并操作: ```bash git merge origin/main ``` **风险提示**:此操作不可逆,需确认文件无需保留。 --- ### 对比决策表 | 方法 | 保留记录 | 可恢复性 | 适用阶段 | |---------|----------|----------|------------------| | commit | ✅ | ✅ | 功能开发完成时 | | stash | ❌ | ✅ | 开发中途临时切换 | | revert | ❌ | ❌ | 放弃无效修改 | ### 扩展应用场景 - 当存在多个暂存时,可用`git stash list`查看记录,通过`git stash apply stash@{n}`精准恢复 - 合并后出现冲突时,可使用`git mergetool`可视化工具解决冲突 - 长期分支开发推荐使用`git rebase`保持提交历史线性
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Java程序员廖志伟

赏我包辣条呗

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值