架构
Kubectl:k8s是命令行端,用来发送客户端的操作指令
API server:是k8s集群的前端接口,各种客户端工具以及k8s的其他组件可以通过他管理k8s集群的各种资源。他提供了HTTP/HTTPS/ RESTful API,即K8S API
Scheduler(调度):负责决定将pod放在那个node上运行。在调度时,会充分考虑集群的拓扑结构,当前各个节点的负载情况,以及应对高可用,性能,数据亲和性需求
Controller manager(管理资源):负责管理集群的各种资源,保证资源处于预期的状态,它有多种controller组成,包括replication controller,endpoints controller,namespace controller,service accounts controller等等
Etcd:负责保存k8s集群的配置信息和各种资源的状态信息,当数据发生变化时。Etcd会快速的通知k8s相关组件。第三方组件,他有可替换方案。Consul,zookeeper
Pod:k8s集群的最小组成单位。一个pod内,可以运行一个或多个容器。大多数情况下,一个pod内只有一个container容器
Flannel:是k8s集群网络方案,可以保证pod的跨主机通信。第三方解决方案,也有替换方案。
查看pod信息
kubectl get pod --all-namespaces
查看pod详细信息
kubectl get pod --all-namespaces -o wide
Kubelet:他是node的agent(代理),当scheduler确定某个node上运行pod之后,会将pod的具体配置信息发送给该节点的kubelet,kubelet会根据这些信息创建和运行容器,并向master报告运行状态。
Kube-proxy:负责将访问service的tcp/udp数据流转发到后端的容器,如果有多个副本,kube-proxy会实现负载均衡。
例子:
创建一个deployment资源对象。Pod控制器
[root@master ~]# kubectl run test-web --image=httpd --replicas=2
删除
kubectl delete pod test-web-5b56bdff65-fwp4l
分析各个组件的作用以及架构工作流程
1.Kubectl发送部署请求到API server
2.API server通知controller manager船舰一个deployment资源
3.Scheduler执行调度任务,将两个副本pod分发到node01和node02上
4.Node01和node02上的kubelet在各自节点上创建并运行pod
补充
1.应用的配置和当前的状态信息保存在etcd中,执行kubectl get pod时API server会从etcd中读取这些数据
2.Flannel回味每个pod分配一个ip,但此时没有闯进啊service资源,目前kube-proxy还没有参与进来
查看
kubectl get deployments.
kubectl get pod
kubectl get pod -o wide