明天讲的是kubernetes的架构简讲吧,kuberbetes cluster有Master和Node【slave】组成,节点上运行多个kubernetes服务。
Master 节点
Master是kubernetes cluster的大脑,运行着的Daemon服务包含kube-apiserver、kube-scheduler、kube-controller-manager、etcd和pod网络(例如flannel)。
- API Server(kube-apiserver)
这个提供了Rest API,也就是咱们应用层所说的前端接口,各种客户端工具CLI/UI治理的资源的货色,如果你 须要进行二次开发的话,这个服务须要把握。
- scheduler(kube-scheduler)
负责讲Pod放在那个Node上运行,也就是调度时会充分考虑cluster的拓扑构造,以后各个节点的负载,以及利用对高可用、数据亲和性的需要
- Controller Manager
负责Cluster各种资源,爱护资源处于预期的状态,也就是运行的服务器资源,管制在一个适合的中央,不会像老AMD CPU那种状况。一方有难,八方围观。在Controller有能够分了好几种Controller,replication、endpoints、namescpace、serviceaccounts等
不同的controller治理的不同的资源,例如 replication 治理的是deployment、statefulset、daemonset的生命周期,namespace治理的是Namespace资源
4.etcd
etcd是一个key/value分布式数据库,因为他是go写的。所以这货色也就成为了k8s用来保留资状态信息和配置信息应用,自带的负载平衡里的服务发现也用到它。
- pod网络
这个比拟重要了,因为docker是不能跨主机通信的。如果要跨主机通信,就必须本人手动开启port映射,如果你的容器过多,那你操作就很麻烦。flannel刚好就帮你解决了这个问题,当然还有其余的网络计划,这是flannel用的人多,材料多一点。
Node节点
所有的node是pod打工的中央,kubernetes反对docker、rkt等容器Runtime。Node上运行的组件有Kubelet、kube-proxy和Pod网络。
Kubelet
kubelet是node的agent。当scheduler确定在某个node上运行pod后,会将pod的具体配置image、volume等信息发送该街道到kubelet而后依据这些信息创立和运行容器,并向master报告状态。
kube-proxy
service在逻辑上代表了后端的多个pod,外界是通过service拜访pod。service接管到request须要通过proxy进行代理pod进行容器替换,如果你的pod是多个正本的话,这里也会帮你主动进行负载平衡。也就是说如果你应用了k8s有效在应用nginx进行手动负载平衡这些愚昧的操作。我看到很多php的教程是这么搞docker。
上面咱们就看看残缺的结构图
从图中你会发现master也存在kubelet和kube-proxy,那是因为master也能够运行利用,如果你好奇的话能够去试试应用rancher,就算是单节点它也能够创立pod容器的。
咱们要查看k8s上曾经运行的pod能够用上面的命令,和你用docker ps一样频繁
kubectl get pod --all-namespaces -o wide
k8s的零碎组件被放到了kube-system namespace中。这里有一个kube组件,它为cluster提供了dns服务。这个服务在k8s初始化的时候作为附加服务装置
kubelet是惟一没有以容器模式运行的k8s组件,它在ubuntu中通过systemd服务中。你能够应用进行查看服务信息
systemctl status kubelet
用例子把他们串起来
以下所有的命令都是第一章有说到
kubectl run httpd-app --image=httpd --replicas=2
k8s部署了deployment httpd-app,有两个正本pod,别离运行在k8s-node1和k8s-node2
他们运作的步骤是这样的
- kubectl发送部署申请到API Server
- API Server告诉Controller Mananger创立一个deployment pod
- Scheduler执行调度工作、将两个pod别离散发到两个集群节点上
- 收到信息的节点,会本人创立并运行pod,利用的配置和以后运行状态信息保留在etcd中,执行kubectl get pod时API Server会从etcd中读取这些数据,flannel会为每个pod进行调配ip。