玩转k8s(二)—— Kubernetes架构

 

1. Master节点

        Master是Kubernetes Cluster的大脑,运行这Daemon服务(守护进程)包括 kube-apiserver、kube-scheduler、kube-controller-manager、etcd和Pod网络(如flannel)。

(1)API Server(kube-apiserver)

        API Server提供 HTTP/HTTPS RESTful API,即Kubernetes API。API Server是K8s Cluster的前端接口,各类客户端工具(CLI或UI)以及k8s其他组件可以通过它管理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、serviceaccounts controller等。

        不同的controller管理不同的资源。例如,replication controller管理Deployment、StatefulSet、DaemonSet的生命周期,namespace controller管理Namespace资源。

(4)etcd

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

(5)Pod网络

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

2. Node节点

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

(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/UDP数据流转发到后端的容器。如果有多个副本,kube-proxy会实现负载均衡。

(3)Pod网络

        Pod要能够相互通信,k8s必须部署pod网络。

实例

root@k8s-master:~# kubectl create deployment httpd-app --image=httpd:latest --replicas=3
deployment.apps/httpd-app created

等待应用部署完成,查看pod:

root@k8s-master:~# kubectl get pod -o wide
NAME                         READY   STATUS    RESTARTS   AGE   IP           NODE        NOMINATED NODE   READINESS GATES
httpd-app-54d8977885-6tfjf   1/1     Running   0          38s   10.244.1.4   k8s-node1   <none>           <none>
httpd-app-54d8977885-dgg88   1/1     Running   0          38s   10.244.2.2   k8s-node2   <none>           <none>
httpd-app-54d8977885-lbtqh   1/1     Running   0          38s   10.244.1.3   k8s-node1   <none>           <none>

可以看到 k8s 部署了 deployment httpd-app,有三个副本Pod,分别运行在 k8s-node1 和 k8s-node2。

部署过程:

 

(1)kubectl发送部署请求到API Server。

(2)API Server 通知 Controller Manager创建一个deployment的资源

(3)Scheduler执行调度任务,将三个副本分发到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还没有参与进来。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小小印z

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值