kubernetes概念
▶ k8s简介以及主要功能(优势)
• k8s简介
k8s的本质是一组服务器集群,它可以在集群的每个节点上运行特定的程序,来对节点中的容器进行管理。目的是实现资源管理的自动化。
• 主要功能
▪ 自我修复:RS deployment
一旦某一个容器崩溃,能够在1秒左右迅速启动新的容器
▪ 弹性伸缩:HPA/VPA
可以根据需要,自动对集群中正在运行的容器数量进行调整
▪ 服务发现:service
服务可以通过自动发现的形式找到它所依赖的服务
▪ 负载均衡:service
如果一个服务启动了多个容器,能够自动实现请求的负载均衡
▪ 版本回退:RS deployment
如果发现新发布的程序版本有问题,可以立即回退到原来的版本
▪ 存储编排:pv pvc sc
可以根据容器自身的需求自动创建存储卷
▶ k8s架构图

▶ k8s概念
• Master(主节点,控制节点)
集群控制节点,每个集群需要至少一个master节点负责集群的管控
• Node(工作节点)
工作负载节点,由master分配容器到这些node工作节点上,然后node节点上的docker负责容器的运行
• Pod(豌豆荚)
k8s的最小控制单元,容器都是运行在pod中,一个pod中可以有1个或多个容器
• Controller
控制器,通过它来实现对pod的管理,比如启动pod、停止pod、伸缩pod的数量等等
• Service
pod对外服务的统一入口,下面可以维护着同一类的多个pod
• Label
标签,用于对pod进行分类,同一类pod会拥有相同的标签
• NameSpace
命名空间,用来隔离pod的运行环境
▶ k8s组件
• 控制平面(老板)
▪ kube-apiserver(前台接待)
所有沟通都要经过它,它是唯一对外暴露的组件。比如你想部署应用或者查看状态,都得通过它转发给其他组件
▪ etcd(机密档案柜)
存储集群所有重要数据(比如谁在运行、网络配置等)。只有kube-apiserver能直接操作它,其他组件想查资料都得通过API
▪ kube-scheduler(人力资源总监)
负责给新应用(pod)安排合适的工位(节点)。
比如:这个Pod需要GPU,只有Node2有GPU,那就分配给Node2。
▪ kube-controller-manager(各部门主管)
它是一堆控制器的集合,负责检查实际状态是否符合预期。比如:
副本控制器:说好要运行3个副本,结果挂了一个?立刻补上!
节点控制器:发现某个节点挂了,赶紧标记为“不可用”。
• 工作节点(工人)
▪ kubelet(车间主任)
每个节点上的“监工”,负责按老板要求启动/停止容器,并时刻汇报worker的状态(比如CPU不够用了)。
▪ kube-proxy(快递小哥)
负责网络路由和转发。
比如:访问Service A的请求,统统分发给后面的Pod1、Pod2
▪ 容器(工具人 没有身份)
Docker或containerd等,真正负责运行容器的工具。kubelet指挥它干活。
• 其他常用组件(辅助部门)
▪ Ingress Controller(门卫+路由)
管理外部访问的入口,比如把yourdomain.com/api的流量导倒Service A
▪ CNI插件(网络部)
负责给Pod分配IP、配置网络规则,让Pod之间能互相通信
▪ CoreDNS(通讯录)
集群内部的DNS服务,帮你把service-a解析成对应的IP地址
▶ 部署一个应用内部过程
1.你(通过kubectl)告诉kube-apiserver:“我要跑一个Nginx,3个副本!”
2.Scheduler查看etcd里的节点资源情况,决定这3个Pod放哪儿。
3.Controller Manager确保3个副本一直存在(少了就补)。
4.目标节点上的kubelet收到指令,命令Docker拉镜像启动容器
5.kube-proxy配置网络规则,让其他Pod能访问这个Nginx