k8s总架构:
Master节点:
(默认不参加工作)
kubectl:k8s是命令端,用来发送客户端的操作指令
k8s的原生组件:(部署k8s比必不可少的组件)
API server:是k8s集群的前端接口,各种客户端工具以及k8s的其他组件可以通过它管理k8s集群的各种资源,它提供了HTTP/HTTPS RESTful API,即k8s API
Scheduler:负责决定将Pod放在哪个Node上运行,在调度时,会充分考虑集群内的拓扑结构,当前各个节点的负载情况,以及对高可用、性能、数据和亲和性需求
Controller Manager:负责管理集群的各种资源,保证资源处于预期的状态,它由多种Controller组成,包括Replication Controller、Endpoints Controller、Namespace Controller、Serviceaccounts Controller等等
Etcd:负责保存k8s集群的配置信息和各种资源的状态信息,当数据发生变化时,etcd会快速的通知k8s相关组件。第三方组件,意味着它有可替换方案,比如:Consul、zookeeper
Pod:k8s集群的最小组成单位,一个Pod内,可以运行一个或多个容器,大多数情况下,一个Pod内只有一个Container容器
Flannel:是k8s集群网络解决方案,可以保证Pod的跨主机通信。第三方解决方案,也有替换方案
Node节点:
kubelet:它是Node的agent(代理),当Scheduler确定某个Node上运行Pod之后,会将Pod的具体配置信息发送给该节点的kubelet,kubelet会根据这些信息创建和运行容器,并向Master报告运行状态
kube-proxy:负责将访问service的TCP/UDP数据流转发到后端容器,如果有多个副本,kube-pory会实现负载均衡
运行一个例子:
//创建一个deployment资源对象。Pod控制器
[root@master ~]# kubectl run test-web --image=httpd --replicas=2
分析各个组件的作用以及架构流程:
- kubectl发送部署请求到API server
- API server通知Controller Manager创建一个Deployment资源
- Scheduler执行调度任务,将两个副本Pod分发到node01和node02上
- node1和node02上的kubelet在各个节点上创建并运行Pod
补充:
- 应用的配置和当前的状态信息报错在etcd中,执行kubectl get pod时API server会从etc中读取这
些数据
- flannel会为每个Pod分配一个IP,但此时没有创建Service资源,目前kube-pory还没有参与进来