"浅尝"Kubernetes

kubernetes Google旗下的容器跨主机编排工具,占据了80%以上的市场份额,已经成为容器编排工具的事实标准,简称K8S。

K8S与docker的区别:

ansible #应用级别的跨主机编排工具

docker #容器引擎 容器运行时

dockerfile #构建镜像

docker-swarm #docker旗下的容器跨主机编排工具,是实现在多机上docker容器集群管理调度的工具

docker-compose #单机容器集群编排工具

mesos+marathon #mesos:分布式资源管理框架,可以对集群中的多台主机硬件资源进行统一调度和管理 marathon:mesos的容器编排框架,用来调度和运行容器服务

K8S 是属于主从设备模型(Master-Slave 架构),即有 Master 节点负责集群的调度、管理和运维,Slave 节点是集群中的运行工作负载节点。 在 K8S 中,主节点一般被称为 Master 节点,而从节点则被称为 Worker Node 节点,每个 Node 都会被 Master 分配一些工作负载。

K8S的架构:

K8S有 master 和 worker node 两类节点

 

master节点(负责K8S集群的管理和资源调度等运维工作) 有 apiserver、controller-manager、scheduler、etcd 组件
apiserver:是所有服务请求的统一访问入口
controller-manager:控制器管理器,负责管理K8S各种资源对象的控制器;通过apiserver监控整个K8S集群的资源状态,并确保资源始终处于预期的各种状态
scheduler:资源调度器,负责pod资源的调度,通过调度算法(预选/优选策略)为要部署的pod选择最合适的 node 节点
etcd:K8S集群的数据库,是一种键值对存储结构的分布式数据库,负责存储K8S集群所有的重要信息,仅apiserver拥有访问和读写权限

worker node节点 (负责运行工作负载,即容器拥有) 组件有 kubelet、kube-proxy、容器引擎(dockers、containerd等)
kubelet:接收apiserver发来的请求,创建管理pod和容器,跟容器引擎交互实现对容器生命周期的管理;收集node节点的资源信息和pod的运行状态发送给apiserver
kube-proxy:作为service资源的载体,实现对pod的网络代理,负责维护pod集群网络规则和四层代理工作
容器引擎:运行管理容器

 

K8S创建pod资源的工作流程:

 

 

用户通过客户端发送创建pod的请求给apiserver
apiserver接收到请求后,会先把请求信息写入到etcd中保存,再找controller-manager根据请求信息的资源预设模板创建pod资源
controller-manager通过apiserver找scheduler调度新创建的pod,scheduler通过调度算法的预选策略和优选策略筛选出最合适的node节点进行调度
scheduler通过apiserver找对应的node节点上的kubelet去创建和管理pod,kubelet会根据容器引擎交互来管理pod及其容器的生命周期
用户还可以通过apiserver在kube-proxy上写入iptables或ipvs网络规则,创建service资源,实现对pod集群网络代理

核心资源对象:

复制代码
pod:是k8s能够创建和管理的最小单位。一个pod里可以包含一个或多个应用容器,同一个pod里的容器之间共享网络、存储等资源。
pod控制器:
deployment:部署无状态应用(没有实时数据需要存储);同时也负责管理replicaset(维持pod副本数始终符合预期状态)和pod(容器化的应用程序)
statefulset:部署有状态应用(有实时数据需要存储)
daemonset:在所有node节点上都部署同一种的pod
job:一次性的部署短期任务的pod(执行完任务后会自动退出的pod容器)
cronjob:周期性的部署短期任务的pod(执行完任务后会自动退出的pod容器)

label:标签,将一个或多个键值对标识关联到某个资源对象,用于资源对象的分组查询和筛选


label selector:标签选择器,用于查询和筛选拥有相关标签的资源对象


annotation:注释,用作用资源对象的注释信息;还可以在一些特殊的资源对象里用作于设置额外的功能特性


service:在k8s集群内部,为通过标签选择器相关联的一组pod提供一个统一的访问入口(clusterip),只支持四层代理转发 通过标签选择器关联pod的标签,从而自动发现相关pod的端点(podip:port)

ingress:作为k8s集群外部的访问入口,可定义ingress规则根据用户请求的域名或url请求路径转发给指定的service,支持七层代理转发 ingress通过配置规则将不同的域名或url路径关联不同的service资源

name:资源名称

namespace:命名空间,用于隔离资源名称的。在同一个命名空间中,同类型的资源对象的名称是唯一的

资源配置信息:

apiversion:资源对象的在k8s中使用的api接口版本


apiversion:资源对象的在k8s中使用的api接口版本


kind:资源对象的类型


metadata:指定资源对象的元数据信息,比如name指定资源名称、namespace指定命名空间、annotation指定注释、label指定标签


spec:指定资源对象的资源配置清单(配置属性),比如副本数、镜像、网络模式、存储卷、label selector标签选择器


status:资源对象在当前的运行状态信息

 
复制代码

posted @   打开方式不对  阅读(10)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示