2022争霸赛*干货满满#Kubernetes基础和原理介绍
  

新手386710 1444

{{ttag.title}}
一、需求背景
      Kubernetes 也称为 K8s,是用于自动部署、扩缩和管理容器化应用程序的开源系统,Kubernetes 提供稳定、兼容的基础(平台),用于构建定制化的workflows 和更高级的自动化任务。Kubernetes 具备完善的集群管理能力,包括多层次的安全防护和准入机制、多租户应用支撑能力、透明的服务注册和服务发现机制、内建负载均衡器、故障发现和自我修复能力、服务滚动升级和在线扩容、可扩展的资源自动调度机制、多粒度的资源配额管理能力。本人也有幸于今年考过了CKA,今天就给大家分享一下Kubernetes的一些基础,都是自己总结的,我现在只有CKS环境,后续可以给大家分享一下CKA环境搭建,Kubernetes 集群部署实战。
二、Kubernetes 的特性
(1)自动完成容器部署:构建于容器之上,比如docker,最新的CKS现在是contained,只要有基础资源,就能完成容器部署。
(2)自我恢复:容器出现异常后,容器会自动重启、Kubernetes集群重新调度容器。
(3)水平扩展:基础硬件资源、负载足够,可以进行水平扩展。
(4)负载均衡:实现内部负载均衡可以实现服务访问负载。
(5)回滚自由:可以实现不同版本的回滚,就像超融合加载补丁可以回滚一样。
(6)存储编排:支持多种不同类型的存储,包括本地存储、云存储、网络存储等,现在EDS也可以挂载存储给K8S使用。
(7)批量处理:除服务型应用,还支持批处理,就像结合windows写的批处理程序一样。
三、Kubernetes的组成部分
     Kubernetes集群的话。可以部署两个节点,一个是master主节点,一个node节点工作节点。他们的主要组成部分和功能介绍如下
3.1 主节点(Master)
Master是集群的控制节点,每个Kubernetes集群中至少需要一个Master节点来维护整个集群的管理和控制,几乎所有的控制命令都是发给它,它负责执行具体的动作。它很重要,如果它不可用,那么我们所有的控制命令都会失效。Master节点上运行一组关键进程:API Server API服务器(kube-apiserver):提供HTTP Rest接口的关键服务,是Kubernetes集群里所有资源的增删查改等操作的唯一入口,也是集群控制的入口进程。并提供认证、授权、访问控制、API注册和发现等机制Controller Manager控制管理器(kube-controller-manager):k8s里所有资源对象的自动化控制中心,可以理解为资源对象的“大总管”。运行着所有处理集群日常任务的控制器。包括节点控制器、副本控制器、端点控制器及服务账号和令牌控制器。负责维护集群的状态,比如故障检测、自动扩展、滚动更新等。Scheduler调度器(kube-scheduler):负责资源调度(Pod调度)的进程,相当于“调度室”。按照预定的调度策略将Pod调度到相应的机器上etcd:集群的数据存储,他存储着集群中所有的资源对象。数据存储采用的是键值对存储。保存了整个集群的状态。
3.2 工作节点(Node/Worker)
Node是集群的工作节点,运行具体的Pod,当某个Node宕机时,其工作负载会被Master自动转移到其他Node节点上。默认情况下kubelet会向Master注册自己。一旦Node被纳入集群管理,kubelet进程就会定时向Master节点汇报自身的情况,比如操作系统等信息,这样Master就可以获取每个Node节点的资源使用情况合理的进行调度。如果Node节点在指定时间不上报,那么Master就会认为它“失联”,标记成“Not Ready”状态。Node节点上运行一组关键进程:kubelet:主节点代理,负责Pod对应的容器的创建启停等任务,同时与Master节点密切协作,实现集群管理的基本功能。kube-proxy:它负责节点的网络,在主机上维护网络规则并执行连接转发。它还负责对正在服务的pods进行负载平衡。比如一个服务可能会运行多个副本(Pod),由他来控制具体由哪个Pod提供服务。为Service提供cluster内部的服务发现和负载均衡。Docker Engine(docker):docker引擎,负责本机的容器创建和管理工作。
四、Kubernetes集群涉及常用基本概念和术语介绍
4.1 Pod
Pod 是一组紧密关联的容器集合, 它们共享 PID、 IPC、 Network 和 UTS namespace,是 Kubernetes 调度的基本单位。 Pod 内的多个容器共享网络和文件系统, 可以通过进程间通信和文件共享这种简单高效的方式组合完成服务。 pod分两种:普通pod和静态pod(static pod, 普通pod:一旦被创建,会被放到etcd中存储,随后被Kubernetes master调度到某个具体的node上并进行绑定,随后该pod被对应的node上的kubelet进程实例化成一组相关的docker容器并启动起来。默认情况下,当pod中的某个容器停止时, Kubernetes会自动检测到这个问题并重新启动这个pod(重启pod里面的所有容器),如果pod所在的node宕机,则会将这个node上的所有pod重新调度到其他节点上。静态pod:不存储在etcd中,而是存放在某个具体的node上的一个具体文件中,并只在此node上启动运行。
4.2 pod的生命周期
(1)Pending。这个状态意味着,Pod 的 YAML 文件(或通过kubectl命令创建Pod)已经提交给了 Kubernetes,API 对象已经被创建并保存在 Etcd 当中。但是,这个 Pod 里有些容器因为某种原因而不能被顺利创建。比如,调度不成功。
(2)Running。这个状态下,Pod 已经调度成功,跟一个具体的节点绑定。它包含的容器都已经创建成功,并且至少有一个正在运行中。
(3)Succeeded。这个状态意味着,Pod 里的所有容器都正常运行完毕,并且已经退出了。这种情况在运行一次性任务时最为常见。
(4)Failed。这个状态下,Pod 里至少有一个容器以不正常的状态(非 0 的返回码)退出。这个状态的出现,意味着你得想办法 Debug 这个容器的应用,比如查看 Pod 的 Events 和日志。
(5)Unknown。这是一个异常状态,意味着 Pod 的状态不能持续地被 kubelet 汇报给 kube-apiserver,这很有可能是主从节点(Master 和 Kubelet)间的通信出现了问题。
4.2 Label
Lable是一个key-value键值对,由用户自己制定。可以附加在各种资源上,比如node 、pod、svc、rc等,一个对象资源可以定义任意数量的Lable,同时一个lable也可以被添加到任意数量的资源对象上去,Lable可以在资源对象定义时确定,也可以在对象创建后动态添加和删除。我们可以使用指定的资源对象绑定一个或者多个不同的lable来实现多维度的资源分组管理功能,以便于灵活、方便的对资源进行分配、调度、配置、部署等工作。Lable就是给资源对象打一个标签,然后通过Label Secletor(标签选择器)查询和筛选拥有某些Label的资源对象,Kubernetes通过这种方式实现了类似SQL的简单和通用的对象查询机制。
4.3 Deployment
Deployment部署是一个比RS(Replica Set)应用模式更广的API对象,可以是创建一个新的服务,更新一个新的服务,也可以是滚动升级一个服务。滚动升级一个服务,实际是创建一个新的RS,然后逐渐将新RS中副本数增加到理想状态,将旧RS中的副本数减小到0的复合操作;这样一个复合操作用一个RS是不太好描述的,所以用一个更通用的Deployment来描述。以Kubernetes的发展方向,未来对所有长期伺服型的的业务的管理,都会通过Deployment来管理。
4.4 Volume
Kubernetes集群中的存储卷跟Docker的存储卷有些类似,只不过Docker的存储卷作用范围为一个容器,而Kubernetes的存储卷的生命周期和作用范围是一个Pod。每个Pod中声明的存储卷由Pod中的所有容器共享。Kubernetes支持非常多的存储卷类型,特别的,支持多种公有云平台的存储,包括AWS,Google和Azure云;支持多种分布式存储包括GlusterFS和Ceph;也支持较容易使用的主机本地目录hostPath和NFS。Kubernetes还支持使用Persistent Volume Claim即PVC这种逻辑存储,使用这种存储,使得存储的使用者可以忽略后台的实际存储技术(例如AWS,Google或GlusterFS和Ceph),而将有关存储实际技术的配置交给存储管理员通过Persistent Volume来配置。Persistent Volume,PV(持久存储卷)和 Persistent Volume Claim,PVC(持久存储卷声明):PV和PVC使得Kubernetes集群具备了存储的逻辑抽象能力,使得在配置Pod的逻辑里可以忽略对实际后台存储技术的配置,而把这项配置的工作交给PV的配置者,即集群的管理者。存储的PV和PVC的这种关系,跟计算的Node和Pod的关系是非常类似的;PV和Node是资源的提供者,根据集群的基础设施变化而变化,由Kubernetes集群管理员配置;而PVC和Pod是资源的使用者,根据业务服务的需求变化而变化,由Kubernetes集群的使用者即服务的管理员来配置。
4.5 NameSpace
命名空间用于实现多租户的资源隔离。Namespace通过将集群内部的资源对象分配到不同的Namespace中,形成逻辑上分组的不同项目、小组或用户组,便于不同的分组在共享使用整个集群的资源的同时还能被分别管理。命名空间为K8s集群提供虚拟的隔离作用,Kubernetes集群初始有两个名字空间,分别是默认名字空间default和系统名字空间kube-system,除此以外,管理员可以创建新的名字空间满足需要。
五、Kubernetes使用工具kubectl
kubectl是Kubernetes客户端CLI工具,可以让用户通过命令行的方式对Kubernetes集群进行操作。kubectl命令行语法:kubectl [command] [TYPE] [NAME] {flags}command:子命令,用于操作Kubernetes集群的资源对象的命令,例如create、delete、describe、get、apply等。TYPE: 资源对象的类型,区分大小写,能以单数、复数或者简写形式表示。比如Pod可以使用pod、pods、pdNAME:资源对象的名称,区分大小写,如果不指定名称,则系统返回属于TYPE的全部对象列表,比如kubectl getpods将返回所有Pod的列表Flags:kubectl子命令的可选参数,例如使用“-s”指定apiserver的URL地址而不用默认值。
六、总结
今天给大家总结了Kubernetes一些常用的基础知识,可以有一个大概了解。

打赏鼓励作者,期待更多好文!

打赏
14人已打赏

339015 发表于 2022-10-22 03:54
  
感谢楼主分享,文章介绍了K8s中的相关概念理论,期待更多分享
言不由衷 发表于 2022-10-25 19:52
  
你哪有cka的习题练习么?
小鱼儿 发表于 2023-4-2 11:02
  

学习一下,感谢楼主分享
飞飞侠 发表于 2023-4-2 11:02
  

学习一下,感谢楼主分享
朱墩2 发表于 2023-4-2 11:02
  

学习一下,感谢楼主分享
唐三平 发表于 2023-4-2 11:02
  

学习一下,感谢楼主分享
小德 发表于 2023-4-2 11:08
  

学习一下,感谢楼主分享
小西北 发表于 2023-4-2 11:09
  

学习一下,感谢楼主分享
梦境人生 发表于 2023-4-2 11:09
  

学习一下,感谢楼主分享
发表新帖
热门标签
全部标签>
每日一问
技术笔记
新版本体验
功能体验
技术咨询
2023技术争霸赛专题
技术盲盒
干货满满
标准化排查
GIF动图学习
产品连连看
安装部署配置
秒懂零信任
自助服务平台操作指引
信服课堂视频
技术晨报
运维工具
深信服技术支持平台
通用技术
安全攻防
每日一记
答题榜单公布
卧龙计划
畅聊IT
答题自测
云计算知识
sangfor周刊
资源访问
排障笔记本
专家问答
技术圆桌
在线直播
MVP
网络基础知识
升级
上网策略
测试报告
日志审计
问题分析处理
流量管理
用户认证
原创分享
解决方案
VPN 对接
项目案例
SANGFOR资讯
专家分享
技术顾问
信服故事
SDP百科
功能咨询
终端接入
授权
设备维护
迁移
地址转换
虚拟机
存储
加速技术
产品预警公告
玩转零信任
信服圈儿
S豆商城资讯
技术争霸赛
「智能机器人」
追光者计划
社区帮助指南
纪元平台
华北区拉练
天逸直播
以战代练
山东区技术晨报
文档捉虫活动
齐鲁TV
华北区交付直播
每周精选

本版版主

12
185
6

发帖

粉丝

关注

本版达人

LoveTec...

本周分享达人

新手24116...

本周提问达人