K8S简介

发布时间:2026/9/5 14:57:23
K8S简介 文章目录一、概念1.1.官方架构图非官方架构图二、Master1.kube-apiserver2.kube-controller-manager3.kube-scheduler调度决策需要考虑的因素包括etcd三、Node1.kubelet2.kube-proxy3.Docker Engine四、Pod1.普通Pod2.静态Pod五、Label5.1. Label selector的使用场景5.2. 示例六、RC(Replication Controller)七、Deployment八、Service1.三个IPa. Node IPb. Pod IPc. Cluster IP九、Volume十、Namespace十一、Annotation参考书籍《Kubernetes权威指南第2版从Docker到Kubernetes实践全接触》参考文档https://www.kubernetes.org.cn/docs参考视频:https://ke.qq.com/course/1709963新手必须知道的 Kubernetes 架构一、概念Kubernetes是一个高度自动化的资源控制系统以“一切以服务为中心”作为指导思想也就是Service那么由谁来提供Service呢由Pod对象又通过Label标签来为Service和Pod建立关联Pod运行在Node上那么Pod又是怎么产生的呢可以直接定义创建也可由RCReplication Controller文件创建。1.1.官方架构图非官方架构图二、Master是集群控制节点每个K8S集群中都需要一个Master节点来负责整个集群的管理和控制它是整个集群的“首脑”运行着三个关键进程1.kube-apiserver一句话提供API接口是所有资源操作的唯一入口并把处理信息存储到etcd中提供API是所有资源增、删、改、查等操作的唯一入口,也是集群控制的入口进程并把所有操作处理信息存储到etcd中从 etcd 读取ListWatch全量数据并缓存在内存中绝大部分情况下apiserver 直接从本地缓存对外提供服务避免客户端直接请求到etcd无状态服务可水平扩展从最简形式上来说apiserver 就是挡在 etcd 前面的一个代理proxy2.kube-controller-manager一句话负责管理Deployment、StatefulSet、RC、RS等资源对象所有资源对象的自动化控制中心好比资源对象的“大总管”处理集群中常规后台任务一个资源对应一个控制器比如Deployment、StatefulSet、DaemonSet、RC、RS等这些控制器是通过kube-controller-manager组件来管理的3.kube-scheduler一句话负责pod的调度根据调度算法来决定pod调度到具体的Node节点上负责资源调度Pod的进程相当于公交公司的“调度室”在整个系统中起到“承上启下”的作用“承上”是指负责接受Controller Manager创建的新Pod为其调度到Node节点“启下”是指调度完成后目标Node上的kubelet接管后续工作负责Pod接下来的生命周期。在整个调度过程中涉及三个对象待调度Pod列表、可用Node节点、以及调度算法和策略scheduler通过调度算法为待调度Pod列表中的每个Pod从Node列表中选择一个最合适的Node来实现Pod调度。调度决策需要考虑的因素包括Pod 对硬件/软件资源的请求节点是否报告内存或磁盘压力情况 该节点是否具有与 pod 规范中的节点选择器匹配的标签 如果 pod 请求绑定到特定的主机端口该端口是否已在该节点上占用 pod 是否容忍节点的污点 pod 是否指定节点亲和性或反亲和性规则等。etcd持久化 KV 存储集群资源pods/services/networkpolicies/…的唯一的权威数据状态源三、Node除了MasterK8S集群中的其他机器被称为Node节点它是集群中的工作负载节点是真正干活的。它有以下一组关键进程:1.kubelet一句话负责管理pod的生命周期同时定时上报节点信息给Masterkubelet是Master在Node节点上的Agent管理本机运行容器的生命周期如创建/删除容器、Pod挂载数据卷、下载secret、获取容器和节点状态等工作。kubelet将每个Pod转换成一组容器。每个kubelet都会在API Server上注册节点自身的信息定期向Master汇报节点资源的情况并通过CAdvisor监控容器和节点资源。2.kube-proxy一句话提供服务发现和Pod负载均衡功能监听apiserver中的service和endpoint的变化创建路由规则来提供服务IP和负载均衡功能。是Service的透明代理兼负载均衡器其核心功能是将某个Service的访问请求转发到后端的多个Pod实例中3.Docker Engine负责本机的容器创建和管理工作四、PodPod是管理创建计算的最小单元。每个Pod都有一个特殊的“根容器”Pause容器Pod里的多个业务容器共享Pause容器的IP和Volume简化了业务容器之间的通信问题和文件共享问题。Kubernetes为每个Pod分配了唯一的IP地址称之为Pod IP采用虚拟二层网络技术Flannel、Openvswitch实现任意两个Pod之间的TCP/IP直接通信。Pod里的服务进程通过EndpointPodIPcontainerPort对外提供服务。Pod可以对其能使用的服务器上的计算资源设置限额。以千分之一的CPU配额为最小单元用m表示。通常一个容器的CPU配额100~300m即占用0.10.3个CPU。CPU配额是一个绝对值跟服务器CPU的个数无关。内存的配额也是绝对值用Mi表示。Pod有两种类型1.普通Pod一旦创建被放入到etcd中存储随后被调度到某个具体的Node上进行绑定并被kubelet进程实例化成一组相关的Docker容器并启动起来。当Pod中的某个容器停止时K8s会自动检测到这个问题并且重新启动这个Pod重启Pod里的所有容器如果Pod所在的Node宕机则会将这个Node上的所有Pod重新调度到其他节点上。2.静态Pod不存放在K8s的etcd存储里而是存放在某个具体的Node上的一个具体文件中并且只在此Node上启动运行。五、Label一对 key/value 被关联到对象上比如Pod。标签可以用来划分特定组的对象比如所有女的标签可以在创建一个对象的时候直接给与也可以在后期随时修改每一个对象可以拥有多个标签但是key值必须是唯一的。5.1. Label selector的使用场景1.kube-controller进程通过资源对象RC上定义的Label Selector来筛选要监控的Pod副本的数量从而实现Pod副本的数量始终符合预期设定的全自动控制流程2.kupe-proxy进程通过Service的Label Selector来选择对应的Pod自动建立每个Service到对应Pod的请求转发路由表从而实现Service的智能负载均衡机制3.通过对某些Node定义特定的Label,并且在Pod定义文件中使用NodeSelector这种标签调度策略Kube-scheduler进程可以实现Pod定向调度的特性5.2. 示例selector:matchLabels:app:mywebmatchExpressions:-{key:tier,operator:In,values:[frontend]}六、RC(Replication Controller)Replication Controller 保证了在所有时间内都有特定数量的Pod副本正在运行如果太多了Replication Controller就杀死几个如果太少了Replication Controller会新建几个和直接创建的pod不同的是Replication Controller会替换掉那些删除的或者被终止的pod。只创建一个pod也要使用Replication Controller。Replication Controller 就像一个进程管理器监管着不同node上的多个pod,而不是单单监控一个node上的pod。七、Deployment为Pod和ReplicaSet提供了一个声明式定义(declarative)方法用来替代以前的ReplicationController来方便的管理应用。相对于RC的一个最大升级是可以随时知道当前Pod“部署”的进度八、ServiceK8S中的Service就是我们经常提起的微服务架构中的一个“微服务”。K8S为每个Service都分配一个全局唯一的虚拟IP—Cluster IP并通过DNS做了一个Name与Service的域名映射。1.三个IPa. Node IPNode节点的IP地址。是物理网卡的IP地址是一个真实存在的物理网络。b. Pod IP它是Docker Engine根据docker0网桥的IP地址段进行分配的不同Node里面的Pod通过虚拟二层网络进行互相通信。c. Cluster IP通过NodePort的方式来访问Service九、Volume是Pod中能够被多个容器访问的共享目录。Volume与Pod的生命周期相同但与容器的生命周期不相关当容器终止或者重启时Volume中的数据也不丢失。十、Namespace1.命名空间在很多情况下用于实现多租户的资源隔离。K8S集群在启动后会创建一个名为“default”的NameSpace。2.权限控制十一、Annotation与Label类似但没有Label那样严格的命名规则是用户任意定义的“附加”信息以便于外部工具进行查找。