-
kubernetes cluster由master和node组成,节点上运行着若干kubernetes服务
-
Master节点:
- master是kubernetes cluster的大脑,运行着的Daemon服务包括kube-apiserver,kube-scheduler,kube-controller-manager,etcd和Pod网络(如flannel)
- API Service(kube-apiserver):api server提供了HTTP/HTTPS RESTful API。即kubernetes API。API Server是kubernetes cluster的前端接口,各种客户端工具(cli或者ui)以及kubernetes其他组件可以通过他管理cluster的各种资源
- Scheduler(kube-scheduler):scheduler负责决定将pod放在哪个Node上运行,scheduler在调度时会充分考虑cluster的拓扑结构,当前各个节点的负载,以及应用对高可用,性能,数据亲和性的需求
- Controller Manager(kube-controller-manager):controller manager负责管理cluster各种资源,保证资源处于预期的状态,controller manager由多种controller组成,包括replication controller,endpoints controller,namespce controller,serviceaccounts controller等,不同的controller管理不同的资源,比如:replication controller管理Deployment,StatefulSet,DaemonSet的生命周期。namespace controller管理Namespace资源。
- etcd:etcd负责保存kubernetes cluster的配置信息和各种资源的状态信息,当数据发生变化时,etcd会快速地通知kubernetes相关组件
- Pod网络:Pod要能够相互通信,kubernetes cluster必须部署Pod网络,flannel是其中一个可选方案
-
Node节点:
-
Node是pod运行的地方,kubernetes支持Docker,rkt(Rocket)等容器运行时工具,Node上运行的kubernetes组件有kubelet,kube-poxy和pod网络(如:flannel)
-
kubelet:kubelet是Node的agent,当Scheduler确定在某个Node上运行Pod后,会将Pod的具体的配置信息(image,volume等)发送给该节点的kubelet,kubelet根据这些信息创建和运行容器,并向Master报告运行状态
-
kube-proxy:service在逻辑上代表了后端的多个pod,外界通过service访问pod,kube-proxy把service接收到的请求转发到Pod上。每个Node都会运行kube-proxy服务,他负责将访问service的TCP/UDP数据流转发到后端的容器,如果有多个副本,kube-proxy会实现负载均衡
-
Pod网络:Pod要能够相互通信,kubernetes cluster必须部署Pod网络,如:flannel,Calico
-
master上的kubelet和kube-proxy是因为:master上也可以运行应用,即master同时也是一个Node,几乎所有的kubernetes组件本身也运行在pod中,
-
kubernetes的系统组件都被放到kube-system namespace中,kubelet是唯一没有以容器形式运行的kubernetes组件,他通过systemd服务运行,可以通过sudo systemctl status kubelet.service查看kubelet的状态
-
-
举例:
-
执行命令部署应用:kubectl run httpd-app --image=httpd --replicas=2:会看到deployment "httpd-app" created
-
kubernetes部署了deployment httpd-app,有两个副本pod,分别运行在k8s-node1和k8s-node2
-
通过命令kubectl get deployment查看部署的应用,通过kubectl get pod -o wide查看具体的pod信息
-
部署流程:
- kubectl发送部署请求到API Server
- API Server通知controller manager创建一个deployment资源
- Scheduler执行调度任务,将两个副本Pod分发到k8s-node1和k8s-node2
- k8s-node1和k8s-node2上的kubectl在各自的节点上创建并运行pod
- 补充:1:应用的配置和当前状态信息保存在etcd中,执行kubectl get pod时API Server会从etcd中读取这些资源,2:flannel会为每个pod都分配IP,因为没有创建service,所以目前流程kube-proxy没有参与
-
kubernetes架构
莫得等待2024-09-22 17:00
相关推荐
kaiyuanheshang7 小时前
docker 中的entrypoint和cmd指令Python私教8 小时前
除了 Docker,还有哪些类似的容器技术?cnsxjean9 小时前
SpringBoot集成Minio实现上传凭证、分片上传、秒传和断点续传那年星空11 小时前
Flutter 设计模式全面解析:抽象工厂RememberLey11 小时前
【eNSP】ISIS动态路由协议实验petaexpress12 小时前
5种常见的k8s云原生数据管理方案详解凡人的AI工具箱13 小时前
40分钟学 Go 语言高并发:【实战】并发安全的配置管理器(功能扩展)颜淡慕潇13 小时前
【K8S系列】深入解析 Kubernetes 中的 Deploymentzwm_yy15 小时前
docker-mysql