目录
Controller Manager(kube-controller-manager)
kubernetes架构
Master节点
master是kubernetes Cluster的大脑,运行着Daemon服务:kube-apiserver、kube-scheduler、kube-controller-manager、etcd和pod网络
API Server(kube-apiserver)
API Server提供HTTP/HTTPS RESTful API,是kubernetes Cluster的前端接口,各种客户端工具以及kubernetes其他组件可以通过它管理Cluster的各种资源
Scheduler(kube-scheduler)
Scheduler负责决定Pod放在那个Node上运行,Scheduler在调度时会充分考虑Cluster的拓扑结构,当前各个节点的负载,以及应用对高可用,性能,数据亲和性的需求
Controller Manager(kube-controller-manager)
Controller Manager负责管理Cluster各种资源,保证资源处于预期的状态
etcd
etcd负责保护Kubernetes Cluster 的配置信息和各种资源的状态信息,当数据发生变化时,etcd会快速地通知Kubernetes相关组件
Node节点
Node时Pod运行的地方,Kubernetes支持Docker,rkt等容器Runtime。Node上运行的Kubernetes组件有kubelet、kube-proxy和Pod网络
kubelet
kubelet时Node的agent,当Scheduler确定在某个Node上运行Pod后,会将Pod的配置信息发给Node节点的kubelet,它会根据配置信息创建并且运行容器,还会向master报告运行状态
kube-proxy
service代表了多个Pod,外界需要通过service访问Pod,service接收到请求会转发到kube-proxy服务,kube-proxy会自动实现负载均衡
Pod网络
Pod之间要能够相互的通信,必须部署Pod网络
典型的创建Pod流程
Pod部署的过程:
kubectl会发送部署的请求到API Server
API Server会通知Controller Manager要创建一个deployment资源
Scheduler在执行调度任务,会将多个副本的Pod分发到Node节点上
Node节点上的kubectl在各自的节点上创建并运行Pod
应用的配置个当前的状态信息会保存到etcd中,当我们要查询当前运行的Pod时,API Server会从etcd中读取这些信息
因为没有创建service,所以kube-proxy还没有参与进来
kubernetes基本概念
cluster
cluster是计算、存储和网络资源的集合,kubernetes利用这些资源运行各种基于容器的应用
Master
Master是Cluster的大脑,主要是负责调度,即决定将应用放在哪里运行
Node
Node职责是运行容器的应用,Node是Master来管理,Node负责监控并且汇报容器的状态,还根据master的要求来管理容器的生命周期
Pod
Pod是k8s的最小工作单元。每个pod包含一个或多个容器,pod中的容器会作为一个整体被master调度到一个node节点上运行,引入pod的两个目的:
可管理性:有的容器天生就是需要紧密联系,将多个容器放到一个pod中进行管理
通信个资源共享:pod中的所有容器使用同一个网络namespacce,就是相同的ip地址个port空间,可以用localhost通信
pods两种使用方式:
运行单一容器
运行多个容器
Controller
k8s通常不会直接创建Pod,是通过Controller来管理Pod,controller中定义了pod的部署个性,比如几个副本等。还有根据不同的业务场景,k8s提供了多种controller,包括deployment、replicaset、daemonset、statefuleset、job等
Deployment是最常用的Controller,它可以管理Pod的多个副本,并确保Pod按照期望的状态运行
ReplicaSet实现了Pod的多副本管理
DaemonSet用于每个Node最多只运行一个Pod副本的场景
StatefuleSet能够保证Pod的每个副本在整个生命周期中名称是不变的
Job用于运行结束就删除的应用,而其他的Controller中的Pod通常是长期持续运行的