kubernetes整体架构及应用部署

 

kubernetes cluster由master和node组成,节点上运行着若干kubernetes服务。

(1).master节点:

master节点是Kubernetes Cluster的大脑,运行着daemon服务:kube-apiserver,kube-scheduler,kube-controller-manager,etcd和pod网络(例如calico)

 

API Server(kube-apiserver)

API Server提供http/https resful 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,namespace controller, service accounts controller等

不同的controller管理不同的资源,例如replication controller管理deplayment,statefulset,daemonset的生命周期,namespace controller管理namespace资源

 

etcd

etcd负责保存kubernetes cluster的配置信息和各种资源的状态信息。当数据变化时,etcd会快速的通知kubernetes相关组件

 

pod网络

pod要能够相互通讯,kubernetes cluster必须部署pod网络,flaneel,calico是其中的可选方案。

 

(2).node

node是pod运行的地方,kubernetes支持docker,rkt等容器runtime。node上运行的kubernetes组件有kubelet,kubelet-proxy和pod网络(例如calico,flannel)

kubelet

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

 

kube-proxy

service在逻辑上代表了后端的多个pod,外界通过service访问pod。service接收到的请求是如何转发到pod的呢?这就是kube-proxy要完成的工作?

每个node都会运行kube-proxy服务,它负责将访问service的tcp/udp数据流转发到后端容器,如果有多个副本,kube-proxy会实现负载均衡

 

pod网络

pod能够互相通讯,kubernetes cluster必须部署pod网络。

架构图如下:

 kubernetes整体架构及应用部署_第1张图片

 

(3).实例部署

部署应用说明各个组件之间如何协作。

执行命令:

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

 

等待一段时间,应用部署完成。

 kubernetes整体架构及应用部署_第2张图片

Kubernetes 部署了 deployment httpd-app,有两个副本 Pod,分别运行在 k8s-node1 和 k8s-node2。

详细讨论整个部署过程。

 kubernetes整体架构及应用部署_第3张图片

① 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 还没参与进来。 

 
 

你可能感兴趣的:(日志,IT技术)