kubernets架构

Kubernetes Cluster由Master和Node组成,节点上运行着若干Kubernetes服务。

一、Master节点

Master是KubernetesCluster的大脑,运行着的Daemon服务包括kube-apiserver、kube-scheduler、kube-controller-manager、etcd和Pod网络(例如flannel),如图所示。

kubernets架构

1.API Server(kube-apiserver)

API Server提供HTTP/HTTPS RESTful API,即Kubernetes API。APIServer是Kubernetes Cluster的前端接口,各种客户端工具(CLI或UI)以及Kubernetes其他组件可以通过它管理Cluster的各种资源。

2.Scheduler(kube-scheduler)

Scheduler负责决定将Pod放在哪个Node上运行。Scheduler在调度时会充分考虑Cluster的拓扑结构,当前各个节点的负载,以及应用对高可用、性能、数据亲和性的需求。

3.Controller Manager(kube-controller-manager)

Controller Manager负责管理Cluster各种资源,保证资源处于预期的状态。Controller Manager由多种controller组成,包括replication controller、endpoints controller、namespace controller、service accounts controller等。不同的controller管理不同的资源。例如,replication controller管理Deployment、StatefulSet、DaemonSet的生命周期,namespace controller管理Namespace资源。

4.etcd
etcd负责保存Kubernetes Cluster的配置信息和各种资源的状态信息。当数据发生变化时,etcd会快速地通知Kubernetes相关组件。

5.Pod

网络Pod要能够相互通信,Kubernetes Cluster必须部署Pod网络,flannel是其中一个可选方案。

二、node节点

Node节点Node是Pod运行的地方,Kubernetes支持Docker、rkt等容器Runtime。Node上运行的Kubernetes组件有kubelet、kube-proxy和Pod网络 (例如flannel)

kubernets架构

1.kubelet

kubelet是Node的agent,当Scheduler确定在某个Node上运行Pod后,会将Pod的具体配置信息(image、volume等)发送给该节点的kubelet,kubelet根据这些信息创建和运行容器,并向Master报告运行状态。

2.kube-proxy service在逻辑上代表了后端的多个Pod,外界通过service访问Pod。service接收到的请求是如何转发到Pod的呢?这就是kube-proxy要完成的工作。每个Node都会运行kube-proxy服务,它负责将访问service的TCP/UPD数据流转发到后端的容器。如果有多个副本,kube-proxy会实现负载均衡。

3.Pod网络

Pod要能够相互通信,KubernetesCluster必须部署Pod网络,flannel是其中一个可选方案。

三、整体架构
kubernets架构

手动创建pod

# kubectl run httpd-app --image=httpd  --replicas=2

查看deployment,副本为2

# kubectl get  deployment
NAME               READY   UP-TO-DATE   AVAILABLE   AGE
httpd-app          2/2     2            2           3m25s

查看每个pod分布情况

# kubectl get pod  -o wide  
NAME                                READY   STATUS    RESTARTS   AGE     IP            NODE    NOMINATED NODE   READINESS GATES
httpd-app-f9ccf4675-hzv8s           1/1     Running   0          2m31s   192.168.1.4   node2   <none>           <none>
httpd-app-f9ccf4675-w26xr           1/1     Running   0          2m31s   192.168.2.6   node1   <none>           <none>

创建过程
kubernets架构
1、kubectl发送部署请求到API Server。

2、API Server通知ControllerManager创建一个deployment资源。

3、Scheduler执行调度任务,将两个副本Pod分发到k8s-node1和k8s-node2。

4、k8s-node1和k8s-node2上的kubectl在各自的节点上创建并运行Pod。

补充两点:
(1)应用的配置和当前状态信息保存在etcd中,执行kubectl get pod时API Server会从etcd中读取这些数据。

(2)flannel会为每个Pod都分配IP。因为没有创建service,所以目前kube-proxy还没参与进来。

本文大部分来自 :https://www.cnblogs.com/CloudMan6/p/8323420.html,感谢cloudman