--昨夜西风凋碧树,独上高楼,望尽天涯路
Kubernetes是Google的一套容器编排框架,下面先了解以下K8s的一些重要概念以及组件
-
Cluster
Cluster就是Kubernetes集群,是计算和存储的集合,Kubernetes利用这些资源运行各种基于容器的应用
-
Master
Master负责调度整个Cluster中的资源。通常使用多个Master来实现高可用
-
Node
Node的作用是运行容器。Node由Master管理,Node负责监控并且汇报容器的状态,同时根据Master的要求管理容器的生命周期。
-
Pod
Pod是Kubernetes的最小工作单元,每个Pod包含一个或者多个容器,Pod中的容器作为一个整体被Master调度到Node上运行
Pod是对容器的一个更高层次的封装,将一些紧密联系的容器封装到一个Pod中。Pod中的所有容器使用同一个namespace,即相同的IP地址和Port空间,可以直接使用localhost通信。并且这些容器可以共享存储。
-
Controller
Kubernetes通过Controller来创建Pod。Controler中定义了Pod的部署特性。Kubernetes提供了很多Controller,例如:Deployment、ReplicaSet、DaemonSet、StatefuleSet、Job等。
1)Deployment是最常见的Controller。Deployment可以管理Pod的多个副本,并确保Pod按照期望的状态运行
2)ReplicaSet在使用Deployment的时候回自动创建,实际上Deployment是通过ReplicaSet来管理Pod的多个副本的,Deployment是ReplicaSet的更高抽象,一般情况下我们不需要直接使用ReplicaSet
3)DaemonSet用于每个Node最多只运行一个Pod副本的场景
4)StatefuleSet能够保证Pod的每个副本在整个生命周期中名称是不变的,其他的Controller不提供这个功能。
5)Job运行结束就删除的应用,而其他的Controller中的Pod通常是长期持续运行
-
Service
当Pod被频繁的销毁和重启的时候,它们的IP会发生变化,所以通过IP来访问Pod不现实。Kubernetes Service定义了外界访问一组特定Pod的方式。Service由自己的IP和端口,Service为Pod提供了负载均衡
-
Namespace
Namespace可已经一个物理的Cluster逻辑上划分为多个虚拟的Cluster,每个Cluster就是一个Namespace。不同的Namespace里的资源是完全隔离的。
-
组件
Master节点:
1)kubelet:运行在Cluster的所有节点上,负载启动Pod和容器
2)kubeadm:用于初始化Cluster
3)kubectl:Kubernetes的命令行工具。通过kubectl可以部署和管理应用,查看各种资源,创建、删除和更新各种组件
4)kube-apiserver(API Server):提供HTTP/HTTPS RESTFul API,API Server是Kubernetes Cluster的前端接口,各种客户端工具以及Kubernetes的其他组件可以通过管理Cluster的各种资源
5)kube-scheduler(Scheduler):Scheduler是调度器,负责决定将Pod放在哪个Node上运行。Scheduler会在调度的时候充分考虑Cluster的拓扑结构,当前各个节点的负载,以及应用对高可用、性能、数据亲和性的需求。
6)kube-controller-manager(Controller Manager):负责管理Cluster的各种资源,保证资源处于预期的状态
7)etcd:etcd负责保存Kubernetes Cluster的配置信息和各种资源的状态信息。当数据发生变化的时候,etcd会快速的通知Kubernetes相关组件
8)Pod网络:Pod之间要能够相互通信,Kubernetes Cluster必须部署Pod网络,flannel就是其中一个可选方案
Node节点:
1)kubelet:kubelet在Node节点中充当这agent,当Scheduler确定在某个Node上运行Pod后,会将Pod的具体配置信息(image、Volume等)发送给该节点的kubelet,kubelet根据这些信息创建和运行容器,并向Master报告运行状态
2)kubeadm:用于初始化Cluster
3)kubectl:Kubernetes的命令行工具。通过kubectl可以部署和管理应用,查看各种资源,创建、删除和更新各种组件
4)kube-proxy:每个Node都会运行kube-proxy服务,它负责将访问service的TCP/UDP数据流转发到后端的容器。如果有多个副本,kube-proxy会实现负载均衡
5)Pod网络:Pod之间要能够相互通信,Kubernetes Cluster必须部署Pod网络,flannel就是其中一个可选方案
由于Master也可以作为Node节点,所以Node节点的组件也可以在Master节点中存在